作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 C 程序:
#include <sys/stat.h>
#include <stdlib.h>
int main(void) {
if (chmod("/tmp/foo", 0755 | S_ISGID) < 0) {
exit(1);
}
exit(0);
}
当我这样运行时:
rm -f /tmp/foo &&
touch /tmp/foo &&
./a.out &&
ls -al /tmp/foo &&
a.out
以退出代码 0
运行,但输出为:
-rwxr-xr-x 1 philipp wheel 0 Mar 16 06:58 /tmp/foo
为什么这里没有设置groupid标志?权限应该是-rwxr-sr-x
。
以下操作可以解决该问题(但我仍然想知道为什么会看到这种效果):
S_ISUID
)我尝试过但没有成功:
chmod g+s/tmp/foo
也不起作用/tmp/
上的权限更改为不同的内容,例如0777
或 4777
所以问题仍然是:如果不是权限,那么 /tmp/
与其他目录有何不同?我能看到的唯一区别是:
ls -al /
显示 tmp 如下:
lrwxr-xr-x@ 1 root wheel 11 Dec 11 19:28 tmp -> private/tmp
末尾的@
符号表明目录上设置了一些非unix 属性。使用 ls -l@/tmp 查询显示:
lrwxr-xr-x@ 1 root wheel 11 Dec 11 19:28 /tmp -> private/tmp
com.apple.FinderInfo 32
com.apple.rootless 0
更新:根据评论反馈和否决票,我认为这个问题很困惑,所以我完全修改了问题和标题。在修改过程中我发现我错误地将我的程序的效果与chmod u+s
进行了比较,这是错误的,我需要与chmod g+s
进行比较,我也纠正了这是我的问题。
最佳答案
chmod()
系统调用将文件的权限设置为仅您提供的值。这意味着将权限设置为 S_IRUSR | S_ISGID
清除所有其他权限,包括用户写入和执行。
您可能想要的是:
chmod("/tmp/foo", 0755 | S_ISGID);
(0755
是用户读+写+执行和组/其他读+执行的八进制模式 - 它比等效常量少得多的输入。)
关于c - setgid 不适用于/tmp/,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42811165/
我是一名优秀的程序员,十分优秀!