我怎么能列出所有超级用户?

May*_*hux 120 command-line sudo

我想要一个命令来列出所有拥有 root 权限的用户,即 sudo ?

假设我是 sudoer 用户。我怎么知道所有其他 sudoer 用户?

kos*_*kos 115

如果您只需要列出sudo组中列出的 sudoers ,我认为最好的方法是运行此命令(该命令在计算上应该比此答案中的任何其他命令更轻):

grep -Po '^sudo.+:\K.*$' /etc/group
Run Code Online (Sandbox Code Playgroud)

同样如 muru 的评论中所建议的那样,条目的格式/etc/group可以通过以下方式轻松处理cut

grep '^sudo:.*$' /etc/group | cut -d: -f4
Run Code Online (Sandbox Code Playgroud)

同样,正如 muru 的评论中所建议的那样,可以使用getent来代替grep

getent group sudo | cut -d: -f4
Run Code Online (Sandbox Code Playgroud)

这些命令中的任何一个都将打印sudo组中列出的所有用户/etc/group(如果有)。

命令 #1 分解:

  • grep: 打印文件中与正则表达式匹配的所有行
  • -P:grep匹配 Perl 风格的正则表达式
  • o:grep只打印匹配的字符串
  • '^sudo.+:\K.*$':grep匹配引号之间的正则表达式

正则表达式 #1 细分:

  • 未列出的任何字符或字符组与字符或字符组本身匹配
  • ^: 行首
  • .+: 一个或多个字符
  • \K: 丢弃之前的匹配
  • .*: 零个或多个字符
  • $: 行结束

命令 #2 细分:

  • grep: 打印文件中与正则表达式匹配的所有行
  • '^sudo.+:\K.*$':grep匹配引号之间的正则表达式
  • cut: 只打印文件中每一行的指定部分
  • -d:: 使cut解释:为字段分隔符
  • -f4:cut只打印第四个字段

正则表达式 #2 细分:

  • 未列出的任何字符或字符组与字符或字符组本身匹配
  • ^: 行首
  • .*: 零个或多个字符
  • $: 行结束

  • -1:这不会捕获可能已添加到 sudoers 的其他用户或组,或像 LDAP 这样的外部资源,而且这是否是一种丑陋的方法。`getent 组 sudo | cut -d: -f4`,或使用 awk,但无论哪种方式,请记住 group 和 passwd 具有固定格式,带有分隔符。 (6认同)

JoK*_*KeR 34

正如这里所说的我认为最简单的方法是与-l&-U选项一起发现,只需键入users它就会列出例如:John然后:

如果用户具有sudo访问权限,它将打印该sudo特定用户的访问级别:

  sudo -l -U John
  User John may run the following commands on this host:
     (ALL : ALL) ALL
Run Code Online (Sandbox Code Playgroud)

如果用户没有 sudo 访问权限,它将打印不允许用户sudo在本地主机上运行:

   sudo -l -U John
   User John is not allowed to run sudo on localhost.
Run Code Online (Sandbox Code Playgroud)

  • 您可以遍历所有普通用户并使用 [something like](http://askubuntu.com/a/633911/178596) 返回他们的详细信息:`for u in $(awk -F'[/:]' '{if($3>=1000&&$3!=65534) 打印 $1}' /etc/passwd); 做 sudo -lU "$u" ; 完成`。快速破解没有任何保证:) (2认同)

And*_*ini 16

如前所述,答案可以在Unix & Linux Stack Exchange 上找到

这表明用户“saml”是wheel组的成员。

$ getent group wheel
wheel:x:10:saml
Run Code Online (Sandbox Code Playgroud)

唯一的区别是 Ubuntu 中的组不是wheel, but sudo(或admin在旧版本的 Ubuntu 中)。所以命令变成:

getent group sudo
Run Code Online (Sandbox Code Playgroud)


mur*_*uru 16

扩展sudo -l -U测试,可以getent passwd用来确定可以使用sudo. Usinggetent允许我们访问文件中可能不存在的passwd用户,例如 LDAP 用户:

getent passwd | cut -f1 -d: | sudo xargs -L1 sudo -l -U | grep -v 'not allowed'
Run Code Online (Sandbox Code Playgroud)

sudo -U 不返回我们可以利用的非零退出值,因此我们减少到 grep 输出。

  • 这是最好的答案,因为它不假设有一个名为“sudo”的组。 (3认同)

小智 9

命令:

cat /etc/group | grep sudo
Run Code Online (Sandbox Code Playgroud)

输出:

sudo:x:27:Tom,Stacy
Run Code Online (Sandbox Code Playgroud)

Tom、Stacy 是具有 sudo 权限的用户。

  • 欢迎询问 Ubuntu!只是想让你知道,这是一个[无用的`cat`用法](http://porkmail.org/era/unix/award.html#cat)。 (2认同)