簡體   English   中英

具有CAP_SETUID的setuid(0)

[英]setuid(0) with CAP_SETUID

我正在嘗試使用CAP_SETUID功能將我的uid更改為非root用戶的0。 我有以下程序:

#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文件的功能。 我在這里做錯了什么?

剛剛發現,需要在內核命令行上使用file_caps = 1啟用文件功能。

setuid()設置setuid()有效用戶ID,但是getuid()獲取實際的用戶ID。

getuid()更改為geteuid()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM