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

                
      我试试看改过是什么效果。。。

            刚刚看到这里的时候对于这几个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还有很多,自己下来理解一下这个过程吧。



         




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值