首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用setcap启用setuid功能

如何使用setcap启用setuid功能
EN

Stack Overflow用户
提问于 2021-03-26 11:24:42
回答 1查看 107关注 0票数 0

我有下面的c程序。

代码语言:javascript
复制
$ cat main.c
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>

int main(int argc, char *argv[]) {
    int fd;
    if((fd = open(argv[1], O_RDONLY)) == -1) {
        perror("open");
        return 1;
    }

    if(close(fd) == -1) {
        perror("close");
        return 1;
    }
    return 0;
}

但我得到了以下错误。

代码语言:javascript
复制
touch tmpfile
sudo chown root tmpfile
sudo chown root ./main_prog
sudo setcap cap_setuid+ep ./main_prog # There will be no error if I use sudo chmod u+s
./main_prog tmpfile
open: Permission denied

谁能告诉我如何使用setcap作为setuid?

EN

回答 1

Stack Overflow用户

发布于 2021-04-09 23:05:28

你要做的是访问一个你需要特权才能访问的文件。cap_setuid功能不直接授予此权限-它授予进程更改其自己的UID的权限。您可以通过此路径到达那里,但它需要在您的程序中编写更多的代码。

您希望在用例中使用的功能是覆盖自由访问控制的功能:cap_dac_override

使用您编写的./main_prog,尝试执行以下操作:

代码语言:javascript
复制
$ touch tmpfile
$ sudo chown root.root tmpfile
$ sudo chmod go-r tmpfile
$ ls -l tmpfile
-rw------- 1 root root 0 Apr  9 08:02 tmpfile
$ cat tmpfile
cat: tmpfile: Permission denied
$ sudo setcap cap_dac_override=ep ./main_prog
$ ./main_prog tmpfile
$ echo $?
0

注意,有了功能,main_prog就不需要归根用户所有了。

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

https://stackoverflow.com/questions/66810609

复制
相关文章

相似问题

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