2011-05-07 45 views
8

這可能是一個愚蠢的問題。sudo用於bash腳本中的單個命令

我有一個腳本,我想在Mac OS X和我使用的Linux機器之間移植。在OS X中,腳本中的命令需要sudo,在Linux上,它不包含。

長話短說,一個人如何在腳本中運行一個命令sudo,然後爲腳本的其餘部分刪除提升的權限?

我曾嘗試使用

su - 

su -c 

,但他們似乎都報錯了。 (他們說「對不起」,繼續前進,我假設因爲它試圖運行,因爲rootroot沒有密碼)。

我知道必須有一個愚蠢和簡單的方法來做到這一點,每個人都建議?

回答

6

可以「撤銷」 sudo的權限(實際上是:早期關閉須藤時間窗)做:

sudo -k 

此外,您還可以配置sudo來只允許特定的命令提升的權限,甚至爲特定命令模擬非root用戶。請參閱man sudoers示例部分非常清楚地表明sudo(角色,主機,命令,允許轉義,允許sudo目標用戶,允許的事情的例外,密碼更少的授權等等)的可配置性實際上沒有限制。

希望在你的背景下一個有趣的例子:

弗雷德可沒有給一個密碼作爲運行在DB Runas_Alias(Oracle或Sybase)任何用戶命令的用戶。

fred   ALL = (DB) NOPASSWD: ALL 

如果你不能/不會真的要使用/ etc/sudoers文件染指(visudo命令!),那麼我建議你使用類似

{ 
    trap "sudo -k" EXIT INT QUIT TERM 
    sudo ls # whatever 
} 
+0

這正是我所需要的。運行該命令,然後運行sudo -k。非常感謝。 – rick 2011-05-07 23:12:05

+0

感謝sudoers;正是我所需要的。 – 2016-10-27 04:18:03

0

嘗試使用sudo su而不是su更改回常規用戶。

+0

當我嘗試「sudo su umount/dev/disk1」,我得到「蘇:未知的登錄名:umount」。通過男人sudo看,我只能得出結論,它正在尋找一個名爲「umount」的用戶? – rick 2011-05-07 04:55:31

+0

@rick:是的,它正在尋找名爲'umount'的用戶。 'su'用於更改爲不同的用戶(通常是root),並且只能以root身份運行,因此所需的參數是用戶名。 'sudo'用於以不同的用戶身份運行單個命令。在你的例子中,你說你想要以root身份運行'su umount/dev/disk1'命令,然後說你想改變到用戶'umount'(帶有一個額外的被忽略的參數)。 – 2011-05-07 18:18:57

0

使用sudo沒有su

#!/bin/bash 
whoami # Runs under your regular account 
sudo whoami # Runs as root 
whoami # Runs under your regular account again 

這裏的輸出,當我る它:

$ ./sudotest 
gordon 
Password: 
root 
gordon