Linux文件的S和T权限

S 与 T 权限

上图中, S_IRWXU S_IRWXG S_IRWXO 代表常见的三段权限: 拥有者, 同组用户, 其他用户的权限, 而S_ISUID S_ISGID S_ISVTX 代表的是S权限 与 T权限.

S权限

S权限包括 S_ISUID 和 S_ISGID 两个常量在内, 叫做强制位权限.

其中, S_ISUID 只能应用于二进制可执行文件.

S_ISGID 可应用于二进制可执行文件和目录.

注意shell脚本只是有执行权限的文本文件, 而非二进制可执行文件.

当 S_ISUID S_ISGID 用在二进制文件时

  • 如果 S_ISUID 为真,则把此进程的有效用户ID设置为此文件拥有者的用户ID.
  • 如果 S_ISGID 为真,则把此进程的有效用户组ID设置为此文件的组ID.

由于进程有用户/组ID影响文件访问权限, 于是就相当于临时拥有文件所有者的身份. 典型的文件是passwd. 如果一般用户执行该文件, 则在执行过程中, 该文件可以获得 root 权限, 从而可以更改用户的密码.

当 S_ISGID 用在目录时:

  • 当前用户切换至该目录后,用户进程的有效用户组ID(effective group)将会设置为该目录的用户组. 若用户在此目录下具备w权限,则用户进程所创建的新文件的用户组ID与该目录用户组ID相同.

这两个常量的值是:

十六进制 十进制
S_ISUID 4000 2048
S_ISGID 2000 1024
  • 设置S_ISUID 将相应的权限位之前的那一位设置为4, 如: chmod 4755 examplefile
  • 设置 S_ISGID 将相应的权限位之前的那一位设置为2, 如: chmod 2755 examplefile
  • 两者都设置, 如法炮制, 改成6即可.
posted @ 2023-01-09 12:53  昤昽  阅读(1546)  评论(0编辑  收藏  举报