Bash
為 bash 備份腳本正確配置 visudo NOPASSWD
抽象的問題是:
如果腳本
x
呼叫程序y
,我是否需要 /etc/sudoers 中的 NOPASSWD 條目x
,y
或者兩者都需要x
&y
?(然後可以在沒有密碼的情況下撥x
打電話嗎?)sudo -v
細節:
我試圖弄清楚 /etc/sudoers 文件中應該包含哪些內容,以允許 Ubuntu 上的使用者(即具有 sudo 權限的使用者 ID 1000)在不輸入密碼的情況下執行預配置的完整備份。
我的備份腳本是:(
/usr/local/bin/backup
請參閱下面的腳本。)
我的腳本呼叫的實際備份程序是
/opt/storeBackup/bin/storeBackup.pl
我嘗試了幾種方法,
visudo
但無論我嘗試了什麼,執行腳本時仍然提示我輸入密碼。我希望在 /etc/sudoers 中添加最後一行(使用 visudo),如下所示:
myuser ALL=(ALL) NOPASSWORD:/usr/local/bin/backup
那沒有用。這也沒有:
myuser ALL=(ALL) NOPASSWORD:/usr/local/bin/backup, /opt/storeBackup/bin/storeBackup.pl
sudo -v
問題是因為我的腳本在開頭附近呼叫嗎?還是有其他問題?要執行以下腳本,我希望使用者打開終端並鍵入
backup
. 我希望它如此簡單,我根本不希望他們被提示輸入密碼。#!/bin/bash sudo -v # Keep-alive: update existing sudo time stamp if set, otherwise do nothing. while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null & #do a bunch of stuff that could take a while... #finally, do backup without asking for password: sudo /opt/storeBackup/bin/storeBackup.pl -f backup.conf
謝謝
正如您所描述的,我成功地使用了以下範例。範例腳本:
頂部.bash
$ cat /tmp/top.bash #!/bin/bash echo "running $0" sudo -v whoami sudo /tmp/bott.bash
底部.bash
$ more /tmp/bott.bash #!/bin/bash echo "running $0" whoami
現在進行以下修改
sudo
:## Allow root to run any commands anywhere root ALL=(ALL) ALL sam ALL=(ALL) NOPASSWD:/tmp/top.bash
現在作為使用者山姆:
$ sudo /tmp/top.bash running /tmp/top.bash root running /tmp/bott.bash root
不使用 sudo 執行 top.bash 怎麼樣?
如果我
/etc/sudoers
像這樣更改文件:sam ALL=(ALL) NOPASSWD:/tmp/top.bash,/tmp/bott.bash
然後
/tmp/top.bash
以使用者身份執行saml
:$ /tmp/top.bash running /tmp/top.bash sam running /tmp/bott.bash root
我明白了以上。這是我所期望的。