問題描述
我有ubuntu 8.04,我想編寫一個bash腳本,它作為root
運行,每個用戶都可以運行。
我自己可以做須藤。
我怎麽做?
澄清:我不想使用sudo進行操作,因為那樣的話,用戶將不得不輸入密碼。我隻希望他們以root身份運行腳本,也許是setuid,dunno。
最佳思路
如果這是正常的二進製文件,則可以通過運行setuid
# chmod u+s /path/to/binary
不幸的是,腳本不能設置為setuid。 (您可以,但是將被忽略)。這樣做的原因是腳本的第一行告訴OS在哪個解釋器下運行腳本。例如,如果您的腳本具有:
#!/bin/bash
您實際上最終會跑步
/bin/bash /path/to/script
顯然,您需要將解釋器設置為setuid,這將意味著所有腳本都將為setuid。這樣不好
您可以通過運行visudo將以下內容放在/etc /sudoers文件中來使用sudo進行此操作。
ALL ALL=NOPASSWD: /path/to/script
現在,任何用戶都可以運行
$ sudo /path/to/script
這樣,他們無需輸入密碼即可運行腳本。
還有一種不需要在命令中使用sudo的替代方法,它需要創建一個小的setuided二進製文件來執行腳本,但是每增加一個setuid二進製文件都會增加另一個潛在的安全問題。
次佳思路
我需要在/etc /sudoers的末尾插入該行:ALL ALL = NOPASSWD: <filename>
顯然,以後的%admin ALL=(ALL) ALL
覆蓋要求管理員用戶輸入密碼。
隻要腳本執行了確定的,無害的,允許的操作,並且如果任何參數的值都不會導致腳本行為異常,則允許該腳本以root用戶身份運行不會有安全問題。
但是有一個陷阱…
始終在命令和文件名中使用完整路徑。如果您在myrootscript
中編寫類似echo Hello world!
的內容,則可能有人會編寫~/bin/echo script
,myrootscript
會以root身份執行。
/bin/echo "Hoping this will keep you safe"
🙂