您的位置:首页 > 其它

UNIX 实际用户id 有效用户id 保存设置id

2012-08-02 10:31 232 查看
我试试看改过是什么效果。。。

刚刚看到这里的时候对于这几个id,感觉很简单,没有过多的关注他们。后来再看到的时候就有些不懂了。重新看了一遍后,将内容放到网上给大家共享,有什么不对的请各位斧正哈。

首先说说(这里只讲解user id,其实组id基本一致):

real user id: 实际用户id,指的是现在进程的使用者是谁。

effective user id:有效用户id,指进程执行时对文件的访问权限,程序运行时,关心该id而不是real user id

saved set-userid: 保存设置用户ID,作为effective userID的副本,在执行exec调用时后能重新恢复原来的effectiv user ID.

上面三个id都是关于进程的。

而set-user-id 这个是关于文件的一个标志位。一般real user id和effective user id 都是相同的,但如果设置了set-user-id,则effective user id 就和文件所有者的id相同,这样real user id 和effecive user id 就不一定相同了。而这类设置了set-user-id的程序就称为SUID程序了。这种程序很有用:比如说passwd文件,文件所有者是root,而一般用户要修改自己的密码,但是没有权限,这里就用到了上面的方法,在passwd的文件设置set-user-id位,这样无论那个用户在修改自己密码的时候,effective
user id 都变成了root了。

在这里呢?又不得不说下setuid(uid);

对于这个函数很是纠结:1.对于使用这个函数是超级用户的时候,它将real user id 和effective user id 和saved set-user-id设置为uid。

2. 对于使用这个函数是一般用户,且real user id 或saved set-user-id和这里的uid 相同,则将effective user id设置为uid,real user id和saved

set- user-id都不该变。

3. 对于使用这个函数是一般用户,且real user id 和这里的uid 不相同,则报错在errno设置EPERM,并返回-1。

另外还得注意的是:

1. real user id 只能超级用户设置。比如登陆login进程块。

2. 当程序文件设置了set user id 的时候,exec函数才会修改effective user id 的值,如果没有设置,则保持原来的值。任意时刻都可以调用

setuid函数,将effective user id 设置为real user id 或者是saved set-user-id。

3. 对于saved set-user-id,是通过exec 执行从effective user id 复制过来的。

对于例子,可以看看passwd 或者是man还有很多,自己下来理解一下这个过程吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐