2009-07-15 53 views
2

用戶將通過SSH遠程訪問基於nix的計算機,並且我需要確定最快的方式來檢查他們當前使用的用戶名是否具有NOPASSWD訪問權限在/ etc/sudoers文件中。確定/ etc/sudoer中用戶權限的最快方式

可能的選項:

  • grep命令在/ etc/sudoers文件的用戶名,解析命令提示符下輸出,以確定它是否有NOPASSWD如果沒有,刪除該行,然後追加新的權限
  • 只需追加無論(壞主意),該文件的權限字符串。
  • 嘗試須藤到一個受保護的文件,看看它提示我輸入密碼。

我希望的東西更容易,但我的谷歌福沒有拿出任何答案。

+0

屬於對serverfault。 – 2009-07-15 19:19:30

+0

會問「超級用戶」,但我目前不在測試版。不確定這是否甚至與此處的服務器故障有關;不適合任何地方... – ahawker 2009-07-15 19:22:59

+1

@Hawker:超級用戶是在'半私人測試'。您可以無障礙地訪問。看這裏:http:// blog。stackoverflow.com/2009/07/super-user-semi-private-beta-begins/ – Stephan202 2009-07-15 19:36:40

回答

4

如果sudo -v成功,用戶被授權使用sudo;如果失敗,則用戶未被授權使用sudo

 
# su user -c 'setsid sudo -v </dev/null'; echo $? 
[sudo] password for user: 
1 
# su root -c 'setsid sudo -v </dev/null'; echo $? 
0 

沒有setsidsudo會盡量要求輸入密碼交互即使標準輸入/輸出/標準錯誤都被重定向。如果你沒有控制終端,這是沒有必要的,但你可能會需要比其他su一些改變用戶權限,如fork + setreuid

1

如果你確實需要「最快的」的方式,我想你正在建立一個網絡服務器,可以處理很多併發請求。

這引發了另一個問題 - 併發問題。通常,對同一個重要文件的許多過程讀寫是一場災難。

建立一個小的獨立進程來處理任務。它應該有一個最小的接口,它將接收來自客戶端的請求,並更新/etc/sudoer文件。類似於has_NOPASSWD_access()set_NOPASSWD_access()。它只應在需要寫入文件時纔讀取該文件,這樣您將大大減少提供請求所需的I/O時間。

優點 -

  • 快捷:無需I/O需要的只是讀取文件,因爲它被保存在自初讀
  • 線程安全緩衝區:只有一個服務器的寫入和讀取sudoer文件
  • Single choice principle - 只有這個過程處置sudoer文件
  • 優雅(我希望):-)

缺點 - - 列出他們的評論,我會補充。