linux系统进程凭证:user ID和group ID概念详解

linux系统进程凭证:user ID和group ID概念详解

1 实际用户ID(real user ID)和实际组ID(real group ID)
  • 实际用户ID和实际组ID确定了进程所属的用户或者组,登录shell从/etcpasswd下读取相应用户密码记录的第三或者第四字段,置为实际用户ID和实际组ID,子进程会从父进程那里继承这些ID

2 有效用户ID(effective user ID)和有效组ID(effetive ID)
  • 进程在尝试各种操作时候,将结合有效用户ID、有效组ID、连同辅助ID一起来确定授予进程的权限,例如当进程访问某个文件,此类ID会决定系统授予进程的权限,而这些资源的属主的权限则与另外的与之相关的用户ID或者组ID来决定
  • 有效用户ID为0的进程拥有超级用户的权限,这样的进程称为特权级进程

3 Set-User-ID 和Set-Group-ID 程序
  • x对应的位置(执行位)还可能是其它字符。比如,user或group的执行位若为s,表示该文件的set-user-id或者set-group-id(这两种id下文会着重介绍)和执行权限x被同时置位;若为S,则表示set-user-id或set-group-id被置位,而执行权限x不被置位

  • 一个用户,有两个id:user-id和group-id。user-id对于一个用户唯一的,但一个用户可以隶属于多个不同的group,但默认的组只有一个,这里的默认是指这个用户创建的文件默认隶属的组。这里说的group-id即为默认组id

  • 相对于下面要介绍的effective-user-id和effective-group-id,上面的user-id和group-id确切地说是real-user-id和real-group-id。这两个id被保存在/etc/passwd文件中,创建用户时被写入,每当用户登录时由登录程序来读取该文件,并设定相应用户的id,OS以用户的用户id和组id来判断你是否具有相应的权限来执行特定的操作

  • effective-user-id和effective-group-id,是针对可执行文件来说的,通常一个被执行的程序(进程)的effective-user-id和effective-group-id与real-user-id和real-group-id是相同的,都等于执行该程序的用户的user-id和group-id,不管该程序文件本身属于哪个用户。但当该程序文件的set-user-id或者set-group-id被置位时,该程序进程的effective-user-id或effective-group-id就是该程序文件属主的real-user-id或real-group-id,而不是执行该进程的用户的real-user-id或real-group-id

  • 那么,effective-user-id和effective-group-id有什么作用呢?
    在一个进程试图去访问一种资源时,比如读、写某个文件,OS(内核)会判断此进程对该文件是否具有相应的权限,判断的依据就是上面介绍的文件的权限访问位。那么,OS是拿进程的real*id,即执行该程序的用户的id来判断呢,还是拿进程的可执行文件的属主的id来判断呢?答案是,拿进程的effective-user-id和effective-group-id来判断,而effective-user-id和effective-group-id与set-user-id和set-group-id有关

  • 举例来说,/etc/passwd文件保存了系统中用户的基本信息(早期的Unix中,甚至直接将用户密码保存在该文件中),它的属主是root用户,普通用户对该文件只有读权限。但系统又需要允许用户修改自己的信息,这样就提供了相应的命令,例如passwd命令。这个命令的可执行文件的属主为root用户,为了普通用户也能够通过passwd命令修改密码,这个命令的set-user-id就被置位了,当普通用户执行该命令的时候,passwd的有效ID就变成passwd这个可执行文件属主的UID和GID了,也就拥有了root特权了

  • -rwsr-xr-x 1 root root 37K 2010-01-27 01:09 /usr/bin/passwd

  • 注意,由于现在用户密码已经不再直接保存在/etc/passwd中了,因此passwd命令可能不再修改该文件,而该文件肯定也是不允许root之外的用户(准确说是不具有超级权限的用户)修改的。事实上,真正保存密码的文是/etc/shadow,而这个文件的权限位为0640

  • 因此该权限只能设置在所属者或者所属组位置上

  • 非特权用户可以对其拥有的文件进行设置,特权用户可以对任何文件设置

  • 举例:
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

  • chmod 7777 a.out

  • 在这里插入图片描述

  • 最前面的那一个:

    1. 4 Set-User-ID 2 Set-Group-ID 1
    2. 所以当最前是7的时候,会设置所有者、所属组的相应位子,以及其他人的黏贴位

4 Save Set-User-ID 和Save Set-Group-ID
  • Save Set-User-ID 和Save Set-Group-ID的值由对应进程的有效SUID和SGID复制而来,无论正在执行的文件是否设置了SUID和SGID的相应位

  • 举例:

    1. 某个程序的实际用户ID、有效用户ID和保存SUID为1000,当其执行了root的SUID程序,进程的用户ID变化:

      real = 1000 effective = 0 save = 0

  • 因此许多系统调用允许讲进程的有效用户ID在实际用户ID和save SUID之间切换,提高程序的灵活性

5 Sticky位
  • other的执行为如果为t,表示该文件的粘滞位(sticky bit)和x均被置位;若为T,则表示只有粘滞位被置位
  • 粘滞位如果被置位,而且该文件为可执行文件,则当文件被执行时,其文本段(.text段,即代码段)会被加载到swap中,程序结束时仍然保留在swap,当下次执行该文件时,将直接从swap中加载,由于swap在磁盘中为连续的block,因此加载速度会提高
  • 粘滞位如果被置位,而且该文件为目录文件,表明非特权用户具有该目录的写权限,并且为该目录下某一个文件的属主的时候,才能对文件进行删除、重命名操作,具有CAP_FOWNER(特权用户,一般是root)的能力的进程可以免去对属主的检查,这样多个用户可以共享某个文件,但是只有属于自己的文件才删除,其它文件则不能

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值