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
的擁有者相同嗎?