簡體   English   中英

Shell腳本無需以sudo身份運行即可獲得超級用戶權限

[英]Shell script getting superuser privilege without being run as sudo

這是我的腳本:

腳本.sh :

sudo cat /etc/passwd-

如果我在sudo會話中(例如,幾分鍾前我用sudo運行了另一個命令),現在運行

script.sh

該腳本將獲得sudo訪問權限。 但是,如果我運行cat /etc/passwd-/ ,則會收到權限被拒絕錯誤。

作為用戶,我不希望 script.sh 能夠如此簡單地獲得超級用戶權限(例如,我沒有通過sudo script.sh授予超級用戶權限)。

這是預期的行為嗎? 是否可配置?

我認為這種行為與sudo su完全相似,例如可能允許超級用戶訪問您在該會話中運行的任何腳本,但更糟糕的是,因為您甚至可能不知道它,也不知道它何時結束(至少不是沒有手動檢查)

這是預期的行為嗎?

是的,確實,這是預期的行為。 用戶的 sudo 緩存憑據對此負責。

可配置嗎?

是的,它是可配置的。

我認為您的安全擔憂是有效的。 如果腳本是使用顯式sudo命令編寫的,則在之前運行sudo命令的終端中運行script.sh (在特定超時內)將授予腳本超級用戶權限。

您可以通過運行以下命令來避免在以 sudo 身份運行時不提示輸入密碼的任何腳本:

sudo -k script.sh

無論之前是否有任何 sudo 命令或會話,它都會要求輸入密碼。

並在沒有 sudo 的情況下運行 script.sh,即只使用script.sh並仍然提示輸入 sudo 命令的密碼:

您可以永久更改超時值(sudo 維護會話的持續時間):

運行sudo visudo

然后換行:

Defaults        env_reset

Defaults        env_reset,timestamp_timeout=0

保存並退出(ctrl+X 然后是 Y)

這將確保 sudo 每次運行時都要求輸入密碼。

或者,如果您不想永久更改它並希望您的腳本至少提示輸入一次密碼(同時保持會話),那么您可以像這樣更改您的腳本:

sudo -k first-command-with-sudo
sudo second-command
sudo third
and so on

無論之前是否有任何 sudo 命令或會話,此腳本將至少提示輸入一次密碼。

如果您不知道(或無法訪問)腳本 script.sh 的內容(它可以包含或不包含 sudo 命令)

並且您要確保任何 sudo 命令肯定會提示輸入密碼至少一次,然后在運行腳本之前運行sudo -K (大寫 K)。

現在如果你運行script.sh並且它包含一個 sudo 命令,它肯定會提示輸入密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM