[root@localhost ~]# getfattr -m - -d /bin/tcpm
getfattr: Removing leading '/' from absolute path names
# file: bin/tcpm
security.capability=0sAQAAAgAUAAAAAAAAAAAAAAAAAAA=
security.selinux="system_u:object_r:bin_t:s0"
[root@localhost ~]# chgrp 951 /bin/tcpm
[root@localhost ~]# getfattr -m - -d /bin/tcpm
getfattr: Removing leading '/' from absolute path names
# file: bin/tcpm
security.selinux="system_u:object_r:bin_t:s0"
chown
uid
/bin/tcpm
或之后chgrp
gid
/bin/tcpm
,/bin/tcpm
损失 xattr(security.capability)
#/bin/tcpm
提供者tcpm-kmod
答案1
'chown' 命令有时会清除 set-user-ID 或 set-group-ID 权限位。此行为取决于底层“chown”系统调用的策略和功能,这可能会使系统相关的文件模式修改超出“chown”命令的控制范围。例如,当由具有适当权限的用户调用时,或者当这些位表示除可执行许可之外的某些功能(例如,强制锁定)时,“chown”命令可能不会影响这些位。如有疑问,请检查底层系统行为。
所以是时候看看chown()
系统调用了(即man 2 chown
):
当非特权用户更改可执行文件的所有者或组时,S_ISUID 和 S_ISGID 模式位将被清除。 POSIX 没有指定当 root 执行
chown()
;时是否也应该发生这种情况Linux 的行为取决于内核版本,从 Linux 2.2.13 开始,root 的待遇与其他用户一样。如果是非组可执行文件(即未设置 S_IXGRP 位的文件),S_ISGID 位指示强制锁定,并且不会被 chown() 清除。当可执行文件的所有者或组更改(由任何用户)时,该文件的所有功能集都将被清除。
换句话说:每当可执行文件的所有者或组发生更改时,系统都会自动删除该文件的任何特殊权限。这不仅包括 SUID/SGID 位,还包括功能。
特殊权限的删除不是由chown
orchgrp
命令完成的,而是由这些命令用来完成其工作的系统调用完成的,因此任何其他更改文件的组或所有者的方法也应该导致其特殊权限被删除。
没有说明删除特殊权限的原因,但我猜它会阻止一类攻击,这些攻击允许用户通过操纵另一个用户和/或 root 拥有的进程来更改组或所有者来获得额外的权限。特权程序。