当前位置: 首页>>技术问答>>正文


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

, ,

问题描述

我想要一个命令列出所有拥有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/article/1523.html,未经允许,请勿转载。