
我的作業系統是 Fedora 24,我嘗試測試 suid 位元功能。
我在下面將 bash 寫為 Setuid.bash:
#!/bin/bash
if [ $USER = 'root' ]
then
echo "Like Root Run"
echo "Root User Add in " $(date) >> /etc/SetUid
else
echo "Other User Run"
echo $USER "User Add in " $(date) >> /etc/SetUid
fi
經-rwsrw-r-x. 1 root root 249 May 21 14:45 /bin/Setuid.bash
許可並-rwx------. 1 root root 432 May 21 14:45 /etc/SetUid
現在,當我嘗試/bin/Setuid.bash
以 root 身分時,我得到:
就像根運行一樣
但是當運行它時測試我遇到的用戶:
其他用戶運行
bin/Setuid.bash:第 8 行:/etc/SetUid:權限被拒絕
如果有人告訴我,我的方法錯在哪裡,我將不勝感激?
答案1
很久以前,bash
(和其他 shell 解釋器)已經添加了針對 suid(濫用)使用的內建安全措施,因為它是危險的。SUID Shell 腳本的危險
Bash 腳本無法在設定了 suid 位元的情況下運作。首先,Linux 不允許任何腳本設定 uid,但其他一些作業系統允許。其次,bash 將偵測到以 setuid 身分執行,並立即刪除權限。
這是因為 shell 腳本的安全性極大地依賴環境,比常規的 C 應用程式更依賴環境。
最終,現在 suid 位元對於可執行二進位檔案最有用。執行這樣的腳本/bash 的一種方法是從 suid 編譯的二進位檔案中呼叫它。