作為 sudo 安全地執行自定義腳本部分
在
/usr/local/bin
我有以下腳本呼叫sdown
/usr/local/bin$ cat sdown #!/bin/bash if [ $# -lt 1 ]; then echo "no time set" else sudo shutdown -h $1 fi
權限為 788:
-rwxr-xr-- user user sdown
關鍵是如果我執行它提示輸入 sudo 密碼的腳本:
/usr/local/bin$ sdown 13:37 [sudo] password for user:
只是為了讓我的生活更美好,我想避免輸入我的密碼來關閉電腦。我認為我可以尋找以下可能性:
- 允許執行
shutdown
命令而不提示輸入 sudo 權限。(sudoers 文件左右…?)- 找一個地方給腳本授予 sudo 權限,這樣我就可以把 sudo 放在那裡。
可能第一種方法更容易,在我的私人機器上我可以做到。但是我想知道如果我遇到另一種情況怎麼辦。雖然這是理論上的,但我想學習最佳實踐。
我想知道是否最好授予我編寫的特定腳本的權限,因此知道它做什麼和不做什麼,而不是刪除完整命令的 sudo 密碼保護(在這種情況下
shutdown
。這可能嗎?同樣在這種情況下,我想我必須通過一些操作腳本來考慮程式碼注入的可能性。我想因此我應該將所有者和組更改為 root 並且只允許執行但不授予其他使用者讀寫訪問權限。
(或僅針對該組,以防更具體的解決方案。)但是,有人用自己的一些文件交換完整文件並因此獲得 sudo 權限的可能性如何?
第一:你幾乎肯定是在浪費你的努力。在您的系統上
閱讀手冊頁
shutdown
:在我見過的每個實現中,時間參數都是強制性的。如果你試圖在
shutdown -h
沒有時間爭論的情況下跑步,它會沖你大喊:[mgraziano@monitor ~]$ sudo shutdown -h Password: usage: shutdown [-] [-h | -p | -r | -k] [-o [-n]] time [warning-message ...]
不過要回答你的問題:
選項 1:允許在不提示 sudo 權限的情況下執行關機命令
使用選項明確允許關機
NOPASSWD
(閱讀man sudoers
資訊)或將您的使用者添加到允許執行關機的組(通常operator
)。選項 2:找一個地方給腳本授予 sudo 權限,這樣我就可以把 sudo 放在那裡。
您不能按照您的想法執行此操作,因為
sudo
那樣行不通 - 權限已授予使用者。您能做的最好的事情是允許使用 執行腳本
sudo
,但這並不能比選項 1 為您帶來任何好處(正如您所提到的那樣,您的腳本中可能存在一些安全漏洞,因為您允許它以root身份執行)。