为什么 chgrp 或 chown 命令会导致文件丢失 xattr

Lee*_*uce 2 linux c chown chgrp

[root@localhost ~]# getfattr -m - -d /bin/tcpm\ngetfattr: Removing leading '/' from absolute path names\n# file: bin/tcpm\nsecurity.capability=0sAQAAAgAUAAAAAAAAAAAAAAAAAAA=\nsecurity.selinux="system_u:object_r:bin_t:s0"\n\n[root@localhost ~]# chgrp 951 /bin/tcpm\n[root@localhost ~]# getfattr -m - -d /bin/tcpm\ngetfattr: Removing leading '/' from absolute path names\n# file: bin/tcpm\nsecurity.selinux="system_u:object_r:bin_t:s0"\n
Run Code Online (Sandbox Code Playgroud)\n

chown uid /bin/tcpmchgrp gid /bin/tcpm\xef\xbc\x8c/bin/tcpm丢失 xattr(security.capability)之后

\n

#/bin/tcpm提供者tcpm-kmod

\n

tel*_*coM 5

文档coreutils.infochown说:

\n
\n

\xe2\x80\x98chown\xe2\x80\x99 命令有时会清除 set-user-ID 或 set-group-ID\n权限位。此行为取决于\n底层 \xe2\x80\x98chown\xe2\x80\x99 系统调用的策略和功能,这可能会使系统相关的\n文件模式修改超出 \xe2\x80\x98chown\xe2 的控制\x80\x99 命令。例如,当具有适当权限的用户调用时,或者当这些位表示除可执行权限之外的某些功能(例如,强制锁定)时,\xe2\x80\x98chown\xe2\x80\x99 命令可能不会影响这些位。 )。\n如有疑问,请检查底层系统行为。

\n
\n

所以是时候看看chown()系统调用了(即man 2 chown):

\n
\n

当非特权用户更改可执行文件的所有者或组时,S_ISUID 和 S_ISGID 模式位将被清除。POSIX 没有指定当 root 执行 ; 时是否也应该发生这种chown()情况 Linux 的行为取决于内核版本,从 Linux 2.2.13 开始,root 的待遇与其他用户一样。如果是非组可执行文件(即未设置 S_IXGRP 位的文件),S_ISGID 位指示强制锁定,并且不会被 chown() 清除。

\n

当可执行文件的所有者或组更改(由任何用户)时,该文件的所有功能集都将被清除。

\n
\n

换句话说:每当可执行文件的所有者或组发生更改时,系统都会自动删除该文件的任何特殊权限。这不仅包括 SUID/SGID 位,还包括功能。

\n

特殊权限的删除不是由chownorchgrp命令完成的,而是由这些命令用来完成其工作的系统调用完成的,因此任何其他更改文件的组或所有者的方法也应该导致其特殊权限被删除。

\n

没有说明删除特殊权限的原因,但我猜它会阻止一类攻击,这些攻击允许用户通过操纵另一个用户和/或 root 拥有的进程来更改组或所有者来获得额外的权限。特权程序。

\n