Linux
為什麼 setuid 不起作用?
我想確保我的程序只能由
xyz
使用 root 權限的使用者執行。為此,我將 setuid 位設置為:chmod u+s program1.sh ls -l program1.sh rwsr-x--- 1 root house 1299 May 15 23:54 program1.sh
另外,我將使用者添加
xyz
到house
組中,以便只有xyz
root 可以執行 program1.sh。在 program1.sh 中有
id -u
這樣它就可以向我顯示有效的ID。
以 root 身份執行
program1.sh
,它顯示root
. 但是使用該xyz
帳戶執行,它顯示**xyz
**. 它似乎沒有以root權限執行。我不知道這裡有什麼問題。
在執行具有 setuid 位的 shell 腳本時(例如,rwsr-xr-x 的權限),腳本以執行它們的使用者身份執行,而不是以擁有它們的使用者身份執行。這與對二進製文件(例如 /usr/bin/passwd)的 setuid 處理方式相反,二進製文件以擁有它們的使用者身份執行,而不管哪個使用者執行它們。
檢查此頁面:https://access.redhat.com/site/solutions/124693 這是作業系統採取的安全措施。您應該將腳本與sudo一起使用。
如果您真的需要在腳本中使用 setuid,您可以創建一個可執行的二進製文件。創建一個新文件“program.c”並複制以下程式碼:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <unistd.h> int main() { setuid(0); system("./program.sh"); #This line is dangerous: It allows an attacker to execute arbitrary code on your machine (even by accident). return 0; }
使用以下命令編譯並執行程式碼:
$ gcc program.c -o program $ sudo chown root.root program $ sudo chmod 4755 program $ ./program
這樣它就會起作用。setuid 適用於編譯後的文件,該文件可以以 root 身份執行其他文件。