Linux 文件属性中的 S 是什么意思?

Linux 文件属性中的 S 是什么意思?

我正在使用以下代码在 perl 中创建目录并更改它们的权限:

umask 0000;
mkdir $path, 0770;
chown $userid, $groupid, $path;

现在,当我对刚刚创建的目录执行 ls -l 时,它们如下所示:

drwxrws---  2 user group 4096 Nov  3 15:34 test1

我注意到,对于组权限,有一个 s 而不是 x。即使我手动 chmod 删除用户和组的所有权限(“chmod g=”和“chmod u=”,它仍然存在:

d-----S---  2 user group 4096 Nov  3 15:36 test2

互联网建议 S 表示文件夹中的所有内容都以 su 或类似方式运行?我不太明白这是什么意思,但我认为我应该明白,因为这些都是 webroot,所以如果有安全隐患,我应该意识到这一点。

非常感谢您的帮助!

答案1

s表示setgid/setuid位和executable位均已设置

S表示仅设置了setgid/位setuid

查看man chmod更多信息。

答案2

发生这种情况是因为umask您设置的值。

互联网表明 S 意味着文件夹中的所有内容都以 su 或类似方式运行?

这是不正确的。

如果setuid在可执行程序上设置了该位,那么它将以其所有者的权限执行。

如果setgid在可执行程序上设置了该位,那么它将以其组的权限执行。

因此,不要到处创造类似的root:root东西umask 0000

更好的是,永远不要将其设置为你的 umask。

看这里:http://linuxzoo.net/page/sec_umask.html

作为 umask 命令的参数给出的数字与作为 chmod 命令的参数给出的数字的工作方式相反。'mask' 用于删除权限,而不是授予权限。

答案3

从某种程度上来说,它表明了一个“错误”:

如果没有设置可执行位,那么设置 setuid 位就没有意义。

相关内容