Unix suid位问题

Inf*_*ies 5 c unix

我用c编写了一个程序,做了一些计算,然后创建了一个文件夹.该文件夹的所有者是root用户.对于其他用户,我正在尝试运行此c应用程序.我有这个错误:

mkdir: lol: Permission denied
Run Code Online (Sandbox Code Playgroud)

好的,我知道这个错误是可以的,因为我没有权利,但我已经在互联网上阅读,如果我在文件上设置suid位,那么这个文件将以所有者的权利运行.我用过这个命令:

chmod +s filename
Run Code Online (Sandbox Code Playgroud)

但它不起作用...... :(任何想法?

编辑:
首先,我的Unix发行版是Mac OS X 10.5.8.我的文件名是a.out,因为我已经使用以下命令从ic.c编译它:gcc ic.c 并且我正在使用root用户运行chmod命令.

epa*_*tel 4

我认为您还需要setuid(0);在您的程序中成为 root。仅设置 s 位是不够的。

我同意所有其他人的观点,做所有这些事情都是非常危险的......

编辑

乔纳森·莱夫勒的评论是正确的。setuid(0);在这种情况下可能没有必要。即在下创建文件的必要步骤/etc

create_file_under_etc.c

#include <stdio.h>
int main() {
  FILE *fp = fopen("/etc/so-su-test.txt", "wt");
  if (fp) {
    fprintf(fp, "I'll be back\n");
    fclose(fp);
    printf("File created.\n");
  } else {
    printf("File not created.\n");
  }
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

...并测试和编译

cc create_file_under_etc.c
sudo chmod +s a.out
sudo chown root:staff a.out
./a.out
Run Code Online (Sandbox Code Playgroud)

...你最好也清理一下

sudo rm a.out
sudo rm /etc/so-su-test.txt
Run Code Online (Sandbox Code Playgroud)