Linux中的SUID位不正常

时间:2016-10-28 18:30:04

标签: linux shell setuid

我有一个名为 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.

0 个答案:

没有答案