2014-03-30 29 views
1

這裏有一個程序,它顯示EUID:可執行文件設置用戶ID-上執行選項沒有設置有效的UID

$ cat main.c 
#include <stdio.h> 
#include <unistd.h> 

int main(int argc, char** argv) { 
    printf("euid: %d\n", geteuid()); 
    return 0; 
} 
$ gcc main.c -o main 
$ ls -l main 
-rwxr-xr-x 1 scdmb scdmb 6425 Mar 30 14:07 main 

讓我們設置set-user-ID-on-execution選項:執行

$ chmod u+s main 
$ ls -l main 
-rwsr-xr-x 1 scdmb scdmb 6425 Mar 30 14:07 main 

計劃作爲用戶scdmb顯示右euid:

$ ./main 
euid: 1000 
$ id -u scdmb 
1000 

讓我們以其他用戶身份執行程序:

$ id -u jakisuser 
1001 
$ su jakisuser 
Password: 

現在EUID是一樣的用戶jakisuser的UID:

$ ./main 
euid: 1001 

爲什麼這個set-user-ID-on-execution選項不會導致該第二次有效用戶ID不是1000(如文件所有者),而1001(作爲執行程序的人)?它不應該與檔案main的擁有者相同嗎?

回答

1

我剛剛在這裏試過這個,你的程序工作完美。

我懷疑發生的事情是你有apparmor或selinux或其他方式阻止你的SUID位生效。我建議你禁用這些,然後重試。

相關問題