2010-10-04 70 views
6

有一個shell腳本(/ bin/sh,而不是bash),它需要root權限才能執行。su和sudo在shell腳本中

如果它是由普通用戶運行的,它應該詢問用戶密碼以獲得root訪問權限並重新運行自己。

現在使用下面的代碼:

if [ $(id -u) -ne 0 ]; then su root -- $0 [email protected] ; ... fi

這工作正常,但也有一些像Ubuntu操作系統,沒有root密碼的。另一方面,許多系統使用sudo來獲得root權限。

的問題是:如何能腳本檢測是否使用susudo而不要求用戶輸入過多的密碼(例如,輸入密碼sudo,如果失敗 - 運行su)。

回答

3

這樣做沒有防彈的方法,因爲任何發行版都可以以任何想要的方式放置文件。例如,Debian和Ubuntu通常會將系統文件放在Red Hat以外的目錄中。爲其安裝的操作系統定製腳本要容易得多。

2

您可以設置帳戶不是需要在/ etc/sudoers文件sudo的密碼:

yourusername ALL=(ALL) NOPASSWD: ALL 

如果你不想這樣做,你可以迫使他們運行腳本以root身份。加入這樣的事情你的shell腳本的頂部:

if [ "$UID" -ne 0 ]; then 
    echo "You must be root to run this script" 
    exit 1 
fi 

通過這種方式,用戶可以得到root權限但他們選擇(su或sudo的)。

+0

這個腳本是一種安裝的 - 我不會在我的主機上運行它,但其他用戶在運行他們的機器。 – zserge 2010-10-04 15:10:58

+0

第二部分呢?提前退出並提示他們以root用戶身份運行腳本。 – gpojd 2010-10-04 15:12:40

+0

這是舊版本中使用的代碼。現在我試圖從腳本獲得root權限,所以用戶不必重新啓動它。似乎是一個更方便用戶 – zserge 2010-10-04 15:36:24

0

檢查sudo IST安裝

SU='su' 
which sudo > /dev/null && SU='sudo' 
+0

一個不錯的方法,但是:可以在機器上安裝sudo,但用戶沒有權限使用sudo運行此腳本。 – zserge 2010-10-04 15:23:30

+0

這並不重要,因爲sudo將會失敗,並且不會詢問密碼,並且你可以調用'su'來代替(只是觀察'sudo true'的結果) – bitmask 2010-10-04 15:31:31

+0

也許我錯了,但是當用戶被允許運行時,它不能保證他能運行我們的腳本,並且,如果允許用戶用密碼運行程序,執行'sudo true'時會提示,我試圖避免不需要的密碼提示 – zserge 2010-10-04 15:39:47

0

雖然這並不能完全回答你的問題,這是值得注意的是,您可以檢查是否正在使用下面的安裝sudo包:

基於Debian的系統:

dpkg -s sudo 

基於RPM的系統:

rpm -q sudo 
+1

那麼gentoo,arch或slackware用戶呢?在我看來,'哪個sudo'是測試程序是否安裝的更一般的方法。 – zserge 2010-10-04 15:41:32

+0

就此而言,Free/Open/Net BSD,macOS,Illumos,HP/UX,Android,webOS如何?如果你必須依靠某些東西,依靠POSIX.1。當然不是平臺特定的打包工具。 – ghoti 2017-06-08 12:18:44

+0

'hash somebinary'也是查找二進制文件的好方法,尤其是如果您要在快速執行時緩存路徑時再次調用二進制文件,但是如果您需要將所有輸出重定向到/ dev/null期望失敗,只想要退出代碼。 – dragon788 2017-11-17 18:52:16

6

它不應該。如果腳本需要root權限,它應該以root身份運行。用戶的業務是如何實現的 - 使用su,sudo或其他機制。

如果您關心安全問題並且不想從根開始執行所有操作,則可以刪除這些部分的root權限。

+0

zserge的下面的評論解釋了「那是舊版本中使用的代碼,現在我試圖從[安裝]腳本獲得root權限,所以用戶不必重新啓動它。似乎是一個更多的用戶-友善」。似乎是一個問題的公平基礎,而不是天生的邪惡;-)。 – 2010-10-05 03:07:10

+0

@Tony:我的觀點是,它不*用戶友好。這是一個試圖比用戶更聰明的例子。在某些情況下,這可能會起作用,但是更有可能導致用戶出現問題。你也應該遵循最少驚喜的原則。如果某些程序在未經我的同意的情況下嘗試使用sudo獲取root權限,我會感到驚訝(並且會對作者提出一些問題)。 – 2010-10-05 06:02:47

1

從該文件中創建一個更sh文件調用您的原始.sh文件一樣 -

su - oracle /u01/enlightics/Enlightiks/UploadFTP/ExportScript2.sh