我有一个名为 Demo 的文本文件,它只对所有者具有写入权限。
我还有一个可执行文件(此处称为 demowr.bash )将写入此演示文件,因为我希望其他用户使用此程序,我设置了该集合 - 比特。
以下是文件中ls -l
的内容。
-rw-r--r-- 1 Coder Coder 6 Oct 28 23:36 ./Demo
-rwsrwxr-x 1 Coder Coder 7472 Oct 28 23:27 ./demowr.bash*
如果我将文件作为编码器执行,一切都很好。 但是,如果我像任何其他用户一样运行它,它就不起作用,说它没有写入权限。
我已将以下代码用于可执行文件和文本文件:
chmod u+s ./demowr.bash
chmod o-w ./demowr.bash
chmod o-w ./Demo
chmod g-w ./Demo
以下是 demowr.bash 文件的内容
#!/bin/bash
echo "$1">Demo
为什么这样,即使设置了 s 位,我也无法在作为另一个用户运行时写入?
PS
Linux忽略所有已解释的可执行文件上的setuid¹位(即 以#开头的可执行文件!线)
我还写了一个C程序,做同样的事情。结果是一样的,access
函数表示没有给出写权限。
这是C代码:
#define FILENAME "./Demo"
int main(int argn, char *argv[])
{
int length = strlen(argv[1]);
if (access(FILENAME,W_OK) == -1){
printf("Error: You do now have write permission.\n");
return 1;
}
int fd = open(FILENAME,O_WRONLY);
write(fd,argv[1],length);
close(fd);
return 0;
}
以非所有者身份运行时,我收到错误。
Error: You do now have write permission.