2013-06-04 102 views
3

我想在shell腳本中檢測到我要通過sudo運行的命令實際上是否可以通過sudo運行。在較新版本的sudo中,我可以執行sudo -l「​​命令」,這給了我完全我想要的結果。檢測命令是否可由sudo執行

但是,一些系統有一箇舊版本的sudo,其中-l「Command」不可用。我想要做的另一種方法是嘗試運行命令,然後查看sudo是否提示輸入密碼。但是,我沒有看到一個簡單的方法來做到這一點,因爲sudo將密碼提示寫入TTY而不是通過stdout。

是否有其他人知道一個簡單的方法來做到這一點?

我還應該提一下「expect」似乎也不適用於舊版sudo修訂版的系統。

僅供參考須藤的「看病難」的版本似乎版本1.6.8

回答

0

在Linux上(至少)的Debian類系統,你可以看看/etc/sudoers(和可選/etc/sudoers.d/*文件如果創建的,幷包括在主/etc/sudoers),該得到(除了別的以外)

  • 到(其DIR)命令可以被髮出
  • 須藤用戶(root)權限
  • 的搜索路徑 個
  • 組誰可以使用sudo的他們的特權

這是sudoers man page以獲取更多信息。

+0

sudoers文件似乎是root:root或root:wheel 110默認情況下,除非你可以'sudo cat/less/view',否則你將無法讀取它。 – Kevin

+0

至少需要一個'sudo cat/etc/sudoers'來查看文件 –

+0

如果我只想查看sudoers文件 - 手動 - 我可以手動發出sudo -l而不用任何參數並解析通配符。不過,我需要以自動化的方式做到這一點。我只需要新版本在舊版本中具有的-n 或-l 功能。我猜它需要做一些類似於輸出sudo -l,寫入文件,將sudo模式轉換爲正則表達式,然後運行我想要針對正則表達式執行的命令。更多的工作,然後我想,但可能沒有辦法解決它:/ – z4ce

0

如果你只是想檢查密碼需要運行一個命令,那麼你應該能夠運行:

$ sudo -n <command> 

例如

$ sudo -n echo 
sudo: sorry, a password is required to run sudo 
+0

不幸的是,-n開關似乎只存在於支持-l開關的相同版本的sudo上。 – z4ce

+0

你的版本有哪些可用的標誌? – mplf