实际用户id,实际组id
有效用户id,有效组id
- 进程尝试执行各种操作,是根据有效用户id、有效组id,连同辅助组ID一起来确定授予进程的权限,而不是实际用户id和实际组id
- 有效用户id为0(root的用户id)的进程拥有超级用户的所有权限。
- 有效用户id、有效组id一般与其相应的实际id相等,但通过一些系统调用能使其不一致,set-user-ID和set-group-ID程序也能使其不一致
set-user-ID和set-group-ID程序
- set-user-ID程序会将进程的有效用户id置为可执行文件的用户id(属主)从而获得属主的权限,set-group-ID程序道理类似。
- 可执行文件出了一般的权限位外,还拥有set-user-ID和set-group-ID权限位,当执行该文件时看,进程的有效用户id变化为文件属主的id,拥有其相应权限。可通过chmod u+s prog, chmod g+s prog设置
saved set-userID和saved set-group-ID
- 程序执行时,会依次发生两件事:
- 若文件的set-user-ID和set-group-ID权限位开启,进程的有效用户组)id置为文件属主的,无则不变
- saved set-userID和saved set-group-ID置为有效用户、组id,不管有无开启set-user-ID和set-group-ID权限位
- 用处:有不少系统调用,允许将set-user-ID程序的有效用户ID在实际用户ID和保存set-user-ID之间切换。考虑这么一个场景,想用set-userID程序创建一个属于real userId的文件,创建文件时,文件的属主是由进程的有效用户id决定的,当用set-userID程序创建文件时,有效用户id=set-userID,而不是real userID,若创建文件时将有效用户id切换为real userID,意味着丢失了set-userID,失去了可执行程序属主的权限。有了saved-set-userID(可执行文件执行时saved set-userID copy了set-userID),创建为文件后可以切换为set-userID,拥有了可执行文件属主的身份
文件系统用户id和组id
- 在Linux系统中,要进行诸如打开文件、改变文件属主、修改文件权限之类的文件系统操作时,决定其操作权限的是文件系统用户ID和组ID(结合辅助组ID),而非有效用户ID和组ID
- Linux为什么要提供文件系统ID呢?在何种情况下,需要使有效ID有别于文件系统ID?
- 进程某甲的有效用户ID等同于进程某乙的实际用户ID或者有效用户ID,那么发送者(某甲)就可以向目标进程(某乙)发送信号。比如Linux NFS(网络文件系统)服务器程序,在访问文件时就好像拥有着相应客户进程的有效ID。然而,如果NFS服务器真地修改了自身的有效用户ID,面对非特权用户进程的信号攻击,又将不堪一击。为了防范这一风险,文件系统用户ID和组ID应运而生。(只想给某个用户访问权限,若设置了有效用户id,便可执行了)
- 自内核2.0起,Linux开始在信号发送权限方面遵循SUSv3所强制规定的规则,且这些规则不再涉及目标进程的有效用户ID。因此,从严格意义上来讲,保留文件系统ID特性已无必要。
网友评论