當前位置: 首頁>>技術問答>>正文


我怎麽能列出所有超級用戶?

, ,

問題描述

我想要一個命令列出所有擁有root權限的用戶,例如sudo?

假設我是一個sudoer用戶。我怎麽能知道所有其他sudoer用戶?

最佳解決方法

如果你隻需要列出sudo組中列出的sudoers,我認為最好的方法是運行這個命令(它應該比這個答案中的任何其他命令計算更輕):

grep -Po '^sudo.+:\K.*$' /etc/group

同樣如muru的評論中所建議的那樣,/etc/group中的條目格式可以通過cut輕鬆處理:

grep '^sudo:.*$' /etc/group | cut -d: -f4

同樣如muru的評論中所建議的,可以使用getent代替grep

getent group sudo | cut -d: -f4

這些命令中的任何一個都將打印/etc/groupsudo組中列出的所有用戶(如果有)。

命令#1細分:

  • grep:打印與文件中的正則表達式匹配的所有行

  • -P:使grep匹配Perl-style正則表達式

  • o:使grep僅打印匹配的字符串

  • '^sudo.+:\K.*$':使grep與引號之間的正則表達式匹配

正則表達式#1細分:

  • 未列出的任何字符或字符組都與字符或字符組本身匹配

  • ^:行首

  • .+:一個或多個字符

  • \K:丟棄上一場比賽

  • .*:零個或多個字符

  • $:行尾

命令#2細分:

  • grep:打印與文件中的正則表達式匹配的所有行

  • '^sudo.+:\K.*$':使grep與引號之間的正則表達式匹配

  • cut:僅打印文件中每行的指定部分

  • -d::使cut:解釋為字段分隔符

  • -f4:使cut僅打印第四個字段

正則表達式#2細分:

  • 未列出的任何字符或字符組都與字符或字符組本身匹配

  • ^:行首

  • .*:零個或多個字符

  • $:行尾

次佳解決方法

正如它所說的here我認為用-l& amp; -U選項在一起,隻需鍵入users它就會列出例如:John然後:

如果用戶具有sudo訪問權限,則將為該特定用戶打印sudo訪問級別:

  sudo -l -U John
  User John may run the following commands on this host:
     (ALL : ALL) ALL

如果用戶沒有sudo訪問權限,則會打印出不允許用戶在localhost上運行sudo

   sudo -l -U John
   User John is not allowed to run sudo on localhost.

第三種解決方法

正如已經說明的那樣,答案可以在Unix & Linux Stack Exchange上找到:

This shows that user “saml” is a member of the wheel group.

$ getent group wheel wheel:x:10:saml 

唯一的區別是Ubuntu中的組不是wheel,而是sudo(或舊版Ubuntu中的admin)。所以命令變成:

getent group sudo

第四種方法

擴展sudo -l -U測試,可以使用getent passwd來確定可以使用sudo的用戶。使用getent可以讓我們訪問passwd文件中可能不存在的用戶,例如LDAP用戶:

getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'

sudo -U不返回我們可以利用的non-zero退出值,因此我們減少了對輸出的影響。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/1523.html,未經允許,請勿轉載。