5

機能を使用して非ルートとして 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

2 番目の printf() もそのCAP_SETUID機能を示していると思います。どういうわけか、私のプロセスは setuid ファイル機能を取得しません。ここで何が間違っていますか?

4

2 に答える 2

3

file_caps=1 を使用して、カーネル コマンドラインでファイル機能を有効にする必要があることがわかりました。

于 2010-09-30T09:56:43.880 に答える
2

setuid()プロセスの有効なユーザー ID を設定しますgetuid()が、実際のユーザー ID を取得します。

をに変更するgetuid()geteuid()、動作するはずです。

于 2010-09-30T06:13:34.220 に答える