我有下面的c程序。
$ 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;
}但我得到了以下错误。
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?
发布于 2021-04-09 23:05:28
你要做的是访问一个你需要特权才能访问的文件。cap_setuid功能不直接授予此权限-它授予进程更改其自己的UID的权限。您可以通过此路径到达那里,但它需要在您的程序中编写更多的代码。
您希望在用例中使用的功能是覆盖自由访问控制的功能:cap_dac_override。
使用您编写的./main_prog,尝试执行以下操作:
$ 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就不需要归根用户所有了。
https://stackoverflow.com/questions/66810609
复制相似问题