2011-03-06 43 views
0

我正試圖編寫一個bash腳本來設置我的web開發環境。作爲設置腳本的過程的一部分,它需要編輯由root擁有的文件。它還需要在運行腳本的用戶的public_html目錄中創建字段。編寫一個執行需要根權限的操作的bash腳本

因此,我是否應該要求腳本以超級用戶身份運行?如果它應該,那麼我如何獲得它來訪問當前用戶的用戶名?我通常會使用$ USER變量,但如果腳本以超級用戶身份運行,我無法做到這一點。如果我不是超級用戶,如何讓腳本爲某些操作請求超級用戶權限,而不要求用戶爲每個需要超級用戶權限的操作輸入密碼。

感謝

回答

3

您可以使用-do標誌來保存環境變量,或者,您可以設置sudoers來保留每個命令的環境。

您還可以設置sudoers文件不要求對每個命令的基礎密碼,例如,允許用戶XY使用smbmount不要求輸入密碼:

xy ALL=NOPASSWD: /usr/bin/smbmount 

在你情況下,這將是不夠的,只是在一個變量的當前用戶存儲調用須藤之前,並使用已保存的用戶名:

CURRENT_USER=$USER 

sudo yourscript.sh $CURRENT_USER 

然後從$ 1讀取的用戶名。 您也可以使用設置爲正在調用sudo的用戶的env變量SUDO_USER

+0

不知道-E,這很方便。 – Vamana 2011-03-06 15:54:52

1

有一個用於此目的的名爲sudo命令。它允許您指定某些用戶可以作爲root用戶(或其他用戶)運行某些命令。

+0

耶哈,我已經要求腳本使用sudo運行,但是當腳本運行的所有sudo的環境變量發生變化。有沒有辦法在保留環境變量的同時運行sudo。 – 2011-03-06 02:50:16

0

如果您的用戶無論如何都擁有root訪問權限,您只需編寫一個腳本,該腳本必須以超級用戶身份運行,並將用戶名作爲參數,而不是提取用戶名。

可替換地,在一個交互式殼拾取登錄用戶名的一種方式是:

stat -Lc %U /proc/self/fd/0 

此檢索與標準輸入相關聯的TTY的ovner。

0

只是讓它成爲一個setuid文件。或者使用可能更安全的sudo,因爲你可以限制誰可以運行它。

chmod 4755 script.sh 
+0

您不能setuid shell腳本。 http://www.faqs.org/faqs/unix-faq/faq/part4/section-7.html – 2011-03-06 15:47:29

+0

沒錯,你可以總是隻有一個perl/python/c包裝器,但這是我用過的一旦。 – atx 2011-03-07 00:20:58

0

在Ubuntu中,有SUDO_USER環境變量。

所以,你可以運行你的腳本sudo somescript.sh並讓它拉動調用用戶的用戶名$SUDO_USER

不確定在其他dists,雖然。

2

在腳本的頂端插入檢查:

# Make sure only root can run this script 
if [[ $EUID -ne 0 ]]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

在當你沒有,你會被提示root權限運行是這樣,那麼你可以簡單地重新運行的正確方法:

sudo yourscript.sh 

更多的相關信息在http://www.cyberciti.biz/tips/shell-root-user-check-script.html

+0

謝謝,但這並沒有解決我如何維護對當前用戶用戶名的訪問權限的問題。 – 2013-03-17 11:36:10

相關問題