我正在使用以下代码在 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 位就没有意义。