我已经用c写了一个程序,做一些计算,然后创建一个文件夹。该文件夹的所有者是root用户。我正在尝试与其他用户一起运行此c应用程序。我得到了这个错误:
mkdir: lol: Permission denied好吧,我知道这个错误是正常的,因为我没有权限,但我在互联网上读到,如果我在文件上设置suid位,那么这个文件将以所有者的权限运行。我使用过这个命令:
chmod +s filename但它不起作用。:(有什么想法吗?
编辑:
所以,首先,我的Unix发行版是Mac 10.5.8。我的文件名是chmod,因为我是使用命令gcc ic.c从ic.c编译的,并且我正在使用根用户运行a.out命令。
发布于 2010-01-05 08:01:19
我认为您还需要在您的程序中使用setuid(0);才能成为根用户。仅设置s位是不够的。
我同意所有其他人的观点,做所有这些事情都是非常危险的…
编辑
乔纳森·莱弗勒在评论中说得没错。在这种情况下,setuid(0);可能不是必需的。ie在/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;
}用于测试和编译的...and
cc create_file_under_etc.c
sudo chmod +s a.out
sudo chown root:staff a.out
./a.out...you最好也清理干净
sudo rm a.out
sudo rm /etc/so-su-test.txt发布于 2010-01-05 07:53:29
你没说'filename‘是什么。您只能在可执行文件上执行suid。特别是,您不能在shell脚本上设置它-它必须是一个真正的机器代码可执行文件。在现代的UNIXes中,就像一些可怕的Linux发行版一样,你可能根本无法设置它,除非经历比你想要的更多的困难。
发布于 2010-01-05 07:52:02
尝试以root用户身份运行chmod。
我以前也被这个问题困扰过:(
https://stackoverflow.com/questions/2003177
复制相似问题