簡體   English   中英

使用set-user-ID-on-execution選項可執行文件未設置有效的uid

[英]Executable with set-user-ID-on-execution option doesn't set effective uid

這是一個顯示euid的程序:

$ 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所有者相同嗎?

我剛剛在這里嘗試過,您的程序運行完美。

我懷疑正在發生的事情是您使用了apparmor或selinux或其他方式阻止了SUID位生效。 我建議您禁用這些,然后重試。

暫無
暫無

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

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