- 实际用户(组)ID:进程的执行者
- 有效用户(组)ID:一般等于实际,文件访问权限(有效用户ID+有效组ID+辅助组ID,准确的说是系统用户ID和组ID),一个进程有没有特权看有效用户ID
- 保存的
set-User-ID
和set-group-ID
:对应的有效用户(组)ID复制而来,某些系统调用中,在实际用户(组)ID和保存的set-User-ID(set-group-ID)间自由切换
set-User-ID程序
和set-group-ID程序
:有效ID->属主(需开启UG权限位)
chomd:开启set-User-ID
权限位
chown:更改属主
-
非特权用户:设置拥有的文件
-
特权用户:ALL
举例:passwd程序
Sticky位
旧的Unix:实现程序拷贝到交换区,加速程序运行
现代Unix:对于目录来说,①有写权限②为文件的属主或者属组—>可以进行删除操作
用途:创建一个多个用户共享的文件开T位,每个用户只能删除自己的文件,比如/tmp
文件权限检查算法
在Linux中,如何判断某一个进程是否对文件拥有权限,遵循如下规则:
- 特权进程:拥有所有访问权限
- 判断有效用户ID是否等于用户ID(决定文件属主,创建时由创建进程的有效ID复制而来),如相等则将属主权限赋予进程
- 判断有效组ID或附属组ID是否等于文件组ID(决定文件属组),如相等则将属组权限赋予进程,可能会出现组的权限比用户权限还大的情况
- 若以上都不满足,赋予other权限
如果文件的属主发生了改变,则会关闭UG位(防止设法将文件设为特权用户所有后。拥有特权身份),更改目录的属主则不会关闭(通过目录的G位来控制创建文件的所有权,启用强制文件锁定)