Bash

為 bash 備份腳本正確配置 visudo NOPASSWD

  • March 20, 2014

抽象的問題是:

如果腳本x呼叫程序y,我是否需要 /etc/sudoers 中的 NOPASSWD 條目xy或者兩者都需要x& y?(然後可以在沒有密碼的情況下撥x打電話嗎?)sudo -v

細節:

我試圖弄清楚 /etc/sudoers 文件中應該包含哪些內容,以允許 Ubuntu 上的使用者(即具有 sudo 權限的使用者 ID 1000)在不輸入密碼的情況下執行預配置的完整備份。

我的備份腳本是:(/usr/local/bin/backup

請參閱下面的腳本。)

我的腳本呼叫的實際備份程序是/opt/storeBackup/bin/storeBackup.pl

(參見http://storebackup.org/

我嘗試了幾種方法,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

我明白了以上。這是我所期望的。

引用自:https://unix.stackexchange.com/questions/120150