2015-11-02 27 views
0

我想一個腳本外殼讓用戶使用su命令不須藤檢查,如果我使用sudo或蘇

我想一個腳本檢查,如果我在我的命令,使用sudo或素,如:

if [ "$USER" != "root" -a "$0" = "sudo" ];then 

    echo "You have to run this script as a root \"Use : su \" " 

fi 

我知道是錯的,有人能幫助我嗎?

+1

爲什麼你需要這樣做?你試圖解決的根本問題是什麼? –

+0

你可能想看看這個:http://serverfault.com/questions/568627/can-a-program-tell-it-is-being-run-under-sudo –

+0

我知道所有的例子作爲根,但我想創建一個腳本拱和拱你可以使用sudo和蘇,所以我怎麼知道他何時使用sudo,當他使用su –

回答

0

您可以使用$ EUID,因爲有效用戶ID將始終爲0 sudo的:) 例子:

#!/usr/bin/env bash 
if [[ $EUID = 0 ]]; then 
    echo "sudo!" 
else 
    echo "not sudo!" 
fi 

編輯:

上述方法無效,但如果你只是想從一個簡單的bash腳本檢查這個你能做到這一點的黑客:

#!/usr/bin/env bash 
if [[ $EUID = 0 && "$(ps -o comm= | sed -n '1p')" = "su" ]]; then 
    echo "sudo!" 
else 
    echo "not sudo!" 
fi 

顯然不會承認正常根炮彈,但實際使用蘇被正確識別。 (當其他腳本調用可以打破:/)

真髒和抗嵌套蘇沒有穩定的使用(如套裝在蘇然當須藤仍然可以通過),這可能足以做這樣的事情:

#!/usr/bin/env bash 
if [[ $EUID = 0 && "$(ps -o comm= | grep su | sed -n '1p')" = "su" ]]; then 
    echo "sudo!" 
else 
    echo "not sudo!" 
fi 

...誠然從(不OK!)類別的解決方案...

+0

非常感謝你,但我知道這個例子;我想要用戶,即使他使用_sudo_它必須得到** Error **,直到他使用su –

+0

如果用__ $ SUDO_USER__替換該變量,該怎麼辦?並測試結果長度? –

+0

剛剛嘗試過($ SUDO_USER),無法正常工作。它仍然返回正常用戶,即使在我su:/ –