这个命令:
sudo chown -R root:root directory
将删除 SUID 位并重置文件的所有功能。我想知道为什么它是默默完成的,并且在手册页中没有提及。奇怪的是 GUID 位没有被删除。在运行此命令之前文件或目录属于谁并不重要。
此外,目录的SUID/GUID 位也不会被删除(认为它们在这种情况下毫无用处)。
大概这是以安全的名义进行的,但对我来说,这绝不能悄无声息地进行。
这变得更糟:
$ setcap cap_sys_rawio,cap_sys_nice=+ep test
$ getcap -v test
test cap_sys_rawio,cap_sys_nice=ep
$ chown -c -v -R 0:0 .
ownership of './test' retained as root:root
ownership of '.' retained as root:root
$ getcap -v test
test
文件的 SUID 位test
将被完全默默地删除。就好像该命令所做的事情比要求的要多得多。
权限和功能集不会由
chown
实用程序清除,而是由系统调用清除(chown
在Linux 上):正如上面提到的,这是由 POSIX 部分指定的:
如果要通知用户这一点,
chown
实用程序在调用该函数时必须显式检查对文件元数据所做的进一步更改chown
。就基本原理而言,我怀疑这是为了减少系统管理员陷入困境的可能性——
chown root:root
在 Linux 上可以被认为是安全的,即使用户提前准备了 setuid 二进制文件。GNU
chown
手册页没有提及此行为,但与 GNU 软件的常见情况一样,手册页仅部分记录了该实用程序;它的“另请参见”部分指向系统调用文档(这对于大多数用户来说无疑是多余的)和信息页面,它确实描述了这种行为:(我根据您在问题上的标签将其限制为 Linux;由于 Linux 限制对特权进程的所有者更改,因此与其他一些 Unix 风格的系统相比,安全隐患更少。有关详细信息,请参阅chown (1) POSIX 规范的说明.)