2014-10-07 88 views
1

如果使用sudo執行了bash腳本,腳本內的命令如何以當前登錄用戶的身份運行,而不是root,然後恢復爲root繼續運行其他命令?以sudo提升腳本作爲標準用戶運行命令

例如: -

#!/usr/bash 

touch fileOwnedByRoot.txt 
touch fileOwnedByUser.txt 
touch otherRootFile.txt 

如果該腳本與須藤運行,而無需改變命令的順序,如何能在第二觸摸命令運行作爲標準用戶?

腳本只是一個簡單的例子,所以使用chmod來更改所創建文件的所有權是無關緊要的。

我正在使用的實際腳本正在由安裝程序運行,因此需要使用提升的權限運行,但必須以運行安裝程序的用戶身份運行特定的命令,該安裝程序的名稱未知。

+0

沒有「標準用戶」;你的意思是作爲首先運行'sudo'的用戶嗎? – chepner 2014-10-07 15:07:40

+0

@chepner是的,負責調用腳本的用戶。 – TheDarkKnight 2014-10-07 15:08:16

回答

4

使用su - another_user -c "<command>"來運行特定的命令:

#!/bin/bash 

touch /tmp/f1 
su - another_user -c "touch /tmp/f2" 
touch /tmp/f3 

正如評論通過以下chepner,你需要使用$SUDO_USER$SUDO_UID才能獲得真正的用戶名運行sudo命令:

su - $SUDO_USER -c "touch /tmp/f2" 

這樣,運行該命令的用戶將會觸及該文件。

您可以測試:

#!/bin/bash 
echo "sudo_user: $SUDO_USER" 
echo "sudo_uid: $SUDO_UID" 

,要麼與./scriptsudo ./script運行該腳本。在第二種情況下,值將被填充。

+0

對不起,我已經在對這個問題的編輯中更加清楚地解釋了一下;我不知道當前用戶是誰在運行腳本。這將如何在這裏指定? – TheDarkKnight 2014-10-07 15:07:51

+1

'sudo'將'$ SUDO_USER'設置爲調用'sudo'的用戶名。如有必要,還有'$ SUDO_UID'和'$ SUDO_GID'。 – chepner 2014-10-07 15:09:05

+0

@ Merlin069查看chepner的評論! – fedorqui 2014-10-07 15:12:52

4

不要將腳本作爲sudo運行,只需要提升特權的命令。

#!/bin/bash 
sudo touch fileOwnedByRoot.txt 
touch fileOwnedByUser.txt 
sudo touch otherRootFile.txt 
+0

我通常會同意,但該腳本是一個安裝後腳本,默認情況下以root用戶身份運行,某些命令必須使用提升的權限運行,而其他命令則不能,例如運行服務 – TheDarkKnight 2014-10-07 15:10:14

2

按照man page當您運行sudo的變量SUDO_USER設置,所以你可以做類似的環境:

#!/usr/bash 

touch fileOwnedByRoot.txt 
sudo ${SUDO_USER} touch fileOwnedByUser.txt 
touch otherRootFile.txt 

我沒有測試過這一點,如果它在不同的工作,不知道OSX,但它值得一試。

相關問題