阻止某些指令以超級使用者權限執行

阻止某些指令以超級使用者權限執行

我是bash新手。我編寫了一個由許多行和命令組成的腳本。這是用於取得和安裝多個軟體包的安裝檔。因此,我需要在腳本中使用許多安裝命令,例如以下命令:

sudo apt install python2.7 python-pip

為了避免sudo在腳本中使用這麼多命令,我決定sudo在每個命令之前刪除並執行類似sudo ./setup.sh.

sudo它工作正常,但問題是有一些命令在它們之前並不真正需要,例如mkdir,wget和 ...

當我使用 運行腳本時sudo ./setup.sh,如果不使用 ,則無法刪除、複製或編輯使用此腳本建立的目錄sudo,但是我希望所有使用者都可以存取它們。因此,我的問題是:

當使用 sudo (如 )運行腳本時sudo ./setup.sh,有什麼方法可以不執行某些內部命令(例如mkdirwget以超級使用者權限)?

答案1

當您使用 時,您將以您告訴切換到的sudo任何使用者(預設為 root)身分啟動一個新 shell 。sudo這會將SUDO_USER變數設定為該使用者的使用者名稱:

$ cat foo.sh
#!/bin/bash
echo "SUDO_USER: $SUDO_USER"

如果我像我一樣運行這個腳本,我什麼也得不到,因為變數沒有設定:

$ foo.sh
SUDO_USER: 

但如果我用 運行它sudo,變數就會被設定:

$ sudo foo.sh
SUDO_USER: terdon

考慮到這一點,您可以使用啟動腳本的使用者的使用者名稱來簡單地以普通使用者身分執行您想要執行的特定命令。因此,在腳本中更改您的wgetchmod以及您想要作為普通用戶運行的任何其他命令,並使它們運行,sudo -u $SUDO_USER以便它們將以普通用戶而不是 root 的身份運行:

apt install python2.7 python-pip ## will run as root
sudo -u $SUDO_USER mkdir foo ## will run as $SUDO_USER

使用該SUDO_USER變數可確保您建立的任何目錄和檔案都由啟動該腳本的使用者擁有,並且您無需在每次執行腳本時明確告訴腳本該使用者的名稱。

答案2

要使 mkdir 建立的目錄可供所有使用者使用,需要使用 chmod 命令將權限變更為 WORLD 可讀/寫。

在腳本中,執行後mkdir,使用以下命令:

chmod -R 755  «directory-name»

(所有人可讀,僅root可寫)

或者

chmod -R 777  «directory-name» 

(系統中所有使用者可讀可寫)

對於wget,請chmod下載後使用該命令。

或者

如果您想以其他使用者身分執行命令,請使用 su 命令:

su - «username» -c 'command to be executed'

相關內容