首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unix suid位问题

Unix suid位问题
EN

Stack Overflow用户
提问于 2010-01-05 07:47:51
回答 6查看 2.9K关注 0票数 5

我已经用c写了一个程序,做一些计算,然后创建一个文件夹。该文件夹的所有者是root用户。我正在尝试与其他用户一起运行此c应用程序。我得到了这个错误:

代码语言:javascript
复制
mkdir: lol: Permission denied

好吧,我知道这个错误是正常的,因为我没有权限,但我在互联网上读到,如果我在文件上设置suid位,那么这个文件将以所有者的权限运行。我使用过这个命令:

代码语言:javascript
复制
chmod +s filename

但它不起作用。:(有什么想法吗?

编辑:

所以,首先,我的Unix发行版是Mac 10.5.8。我的文件名是chmod,因为我是使用命令gcc ic.c从ic.c编译的,并且我正在使用根用户运行a.out命令。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-01-05 08:01:19

我认为您还需要在您的程序中使用setuid(0);才能成为根用户。仅设置s位是不够的。

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

编辑

乔纳森·莱弗勒在评论中说得没错。在这种情况下,setuid(0);可能不是必需的。ie在/etc下创建文件的必要步骤

create_file_under_etc.c

代码语言:javascript
复制
#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

代码语言:javascript
复制
cc create_file_under_etc.c
sudo chmod +s a.out
sudo chown root:staff a.out
./a.out

...you最好也清理干净

代码语言:javascript
复制
sudo rm a.out
sudo rm /etc/so-su-test.txt
票数 4
EN

Stack Overflow用户

发布于 2010-01-05 07:53:29

你没说'filename‘是什么。您只能在可执行文件上执行suid。特别是,您不能在shell脚本上设置它-它必须是一个真正的机器代码可执行文件。在现代的UNIXes中,就像一些可怕的Linux发行版一样,你可能根本无法设置它,除非经历比你想要的更多的困难。

票数 2
EN

Stack Overflow用户

发布于 2010-01-05 07:52:02

尝试以root用户身份运行chmod。

我以前也被这个问题困扰过:(

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2003177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档