Bash
讓非 root 使用者使用需要 root 訪問權限的命令執行腳本的最佳方法?
我有一個由 php 執行的腳本,因此它以 www-data 使用者身份執行。該腳本非常簡單,它基本上將一些預製文件(例如主機和介面文件)複製到正確的目錄中。也許更新一些權限等。
我認為創建一個新使用者並僅通過它授予對所需命令的訪問權限
visudo
可能會起作用,但是
- 仍然要求使用者執行
.sh
密碼和- 它顯然沒有授予測試使用者權限。
visudo
(執行時拒絕所有權限./script.sh
)test ALL=(ALL) NOPASSWD:ALL test ALL= NOPASSWD:ALL test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv
當我將
test
使用者更改為我登錄的實際使用者時,它可以工作。
.sh
由登錄/www-data
使用者嘗試以具有所需權限的不同使用者身份執行命令。#!/bin/bash sudo -H -u test cp test.txt /etc/test.txt sudo -H -u test chown test /etc/test.txt echo "ok"
使
www-data
使用者能夠執行需要root
權限的腳本的最佳方法是什麼?
您顯示的
sudoers
部分沒有意義。test ALL=(ALL) NOPASSWD:ALL test ALL= NOPASSWD:ALL test ALL=(ALL) NOPASSWD:/bin/cp,/bin/mv,/bin/nano,/bin/chown,/bin/mv
您只需要這些行中的一條,可能是最後一條。
不考慮早期命令的退出程式碼執行
echo "ok"
也沒有多大意義。據您顯示,
sudo
使用者沒有權限www-data
。在普通系統
sudo -H -u test cp test.txt /etc/test.txt
上沒有意義,因為使用者test
無法在/etc
. 這僅在目標文件存在並且對使用者 `test.但是,
sudo -H -u test chown test /etc/test.txt
這永遠不會有意義,因為唯一可以chown
成功呼叫這種方式的使用者是 root。解決方案
我想你需要的是這個。一個腳本
#!/bin/bash cp ~test/test.txt /etc/test.txt && chown test /etc/test.txt && echo 'ok' || echo 'failure'
- 將該腳本放在只能由以下人員寫入的路徑中
root
- 創建這樣的
sudo
權限www-data ALL= NOPASSWD:/path/to/script.sh
www-data
像這樣 呼叫腳本sudo /path/to/script.sh