Bash

作為 sudo 安全地執行自定義腳本部分

  • April 28, 2012

/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身份執行)。

引用自:https://serverfault.com/questions/383982