我正在尝试将我的uid更改为0,作为具有CAP_SETUID功能的非根用户。我有以下程序:
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/capability.h>
#include <sys/prctl.h>
int main(int argc, char *argv[])
{
printf("cap setuid in bset: %d\n", prctl(PR_CAPBSET_READ, CAP_SETUID, 0, 0, 0));
printf("%s\n", cap_to_text(cap_get_file(argv[0]), NULL));
printf("%s\n", cap_to_text(cap_get_proc(), NULL));
printf("uid: %d\n", (int) getuid());
setresuid(0, 0, 0);
printf("uid: %d\n", (int) getuid());
return 0;
}我按如下方式分配setuid功能:
sudo /sbin/setcap cap_setuid=ep ./capsetuid我得到了下面的输出
cap setuid in bset: 1
= cap_setuid+ep
=
uid: 1000
uid: 1000我希望第二个printf()也能显示CAP_SETUID功能。不知何故,我的进程没有获得setuid文件功能。我在这里做错了什么?
发布于 2010-09-30 17:56:44
我刚刚发现需要使用file_caps=1在内核命令行上启用文件功能。
发布于 2010-09-30 14:13:34
setuid()设置进程的有效用户id,而getuid()获取真正的用户id。
将getuid()更改为geteuid(),它应该可以工作。
https://stackoverflow.com/questions/3822604
复制相似问题