2016-04-08 21 views
2

使用setuid位我有這個C文件:在Linux中

#include <stdio.h> 
#include <unistd.h> 

int main(void) 
{ 
    printf("%s\n", getlogin()); 
    printf("%i\n", getuid()); 
} 

我編譯它,UID和GID都設置爲root並設置setuid位,所以它看起來是這樣的:

-rwsrwsr-x 1 root root 8735 Apr 8 19:51 a.out 

然而,當我打電話$ ./a.out我仍然得到:

user 
1000 

我在做什麼錯誤?

回答

4

實際用戶ID仍然是稱爲該程序的用戶,但有效用戶ID是根。在一個setuid程序中,它們是不一樣的。

要獲得有效的用戶ID,請致電geteuid()。您還可以使用cuserid()獲取與有效用戶標識關聯的名稱。

+0

如何獲得EUID的名稱? – hgiesel

+0

@hgiesel試試'man getpwuid' –

+0

@hgiesel看我的編輯。 – dbush

1

您的程序已獲得更改其uid的權限。要真正切換到root,您必須在其中調用setuid(0)。 請看看here