我用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命令.
我认为您还需要setuid(0);在您的程序中成为 root。仅设置 s 位是不够的。
我同意所有其他人的观点,做所有这些事情都是非常危险的......
编辑
乔纳森·莱夫勒的评论是正确的。setuid(0);在这种情况下可能没有必要。即在下创建文件的必要步骤/etc
#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)