权限检查和有效ID、有效组ID

时间:2021-10-09
本文章向大家介绍权限检查和有效ID、有效组ID,主要包括权限检查和有效ID、有效组ID使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

一、进行相关ID

  一共有6个与进程相关的ID(也有可能更多)。

  

   1、实际用户ID(RUID)和实际组ID(RGID)

    实际ID说明了我们实际上是谁或者属于谁,该值在login函数执行时,取自口令文件/etc/passwd中,一般由用户标识号(第三列)和组标识号标识(第四列)(0-999的数)。

    这个两个ID在登录期间一般不会改变,除非有root权限用setuid和setgid改变。

  2、有效用户ID(EUID)和有效组ID(EGID)(附属组ID)

    有效ID用于权限检查,当访问或执行文件时会检查相应的权限,这个检查就是检查有效ID,其中附属组ID代表一个用户属于多个其他组的组ID。具体检查规则稍后列出。

  设位置

    设置位是文件的属性用于改变访问者的相应ID,使其具有访问权限。查看文件权限 ls -l时,uid区域的s和gid区域的s即代表文件有设置位。在访问者访问该文件时,把访问者的EUID或者EGID改变为文件的UID或者GID。这样访问者就拥有了访问文件的权限。例如命令passwd就是利用这样的机制来使任何用户拥有修改他们自己的密码的功能,而不用在passwd命令的所有者中加入所有用户或者加入一个组来达到这样的目的。

思考:为什么需要设置位而不是直接设置文件的其他用户权限?

  因为设置位可以维护文件权限这一机制,比如passwd是靠设置位修改访问者有效ID然后根据passwd的内容访问/etc/shadow文件来修改对应的密码(文件内判断访问者的实际ID,来用对应的参数修改shadow文件)。如果是直接设置shadow和passwd的其他位,则任何用户都可以修改任何用户的密码,则丧失了文件权限这一机制的初衷。

  3、保存的设置用户ID(SUID)和保存的设置组ID(SGID)

    这个用户ID的作用是保存有效用户ID的一个副本。有效用户ID可以被更改,既然有更改那么就应该有恢复,一个进程在访问文件的时候要设置有效用户ID但在处理进程命令的时候要切换回用户实际ID,SUID的作用就是保存有效用户ID的副本,用于后续恢复有效用户ID。

    这个ID的作用可以看这个博客  https://blog.csdn.net/zhoucheng05_13/article/details/86304602   讲的很详细。

二、文件访问权限测试

  每当进程打开、创建或者删除一个文件时,内核就进行内核访问权限测试。测试顺序如下

  1、若进程的有效用户ID是0(root),则允许访问。

  2、若进程的有效用户ID等于文件所有者,那么如果所有者适当的访问权限被设置,则允许访问;否则访问拒绝。

  3、若进程的有效组ID或进程的附属组ID之一等一文件的组ID,那么有过组权限适当位被设置,则允许访问;否则拒绝访问

  4、若其它用户适当的访问权限位被设置,则允许访问;否则拒绝。

  

原文地址:https://www.cnblogs.com/wildricky/p/15384767.html