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

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

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

假设我是 sudoer 用户。我如何知道所有其他 sudoer 用户?

答案1

如果您只需要列出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

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

命令#1分解:

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

正则表达式 #1 分解:

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

命令#2分解:

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

正则表达式 #2 分解:

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

答案2

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

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

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

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

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

答案3

扩展测试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没有返回我们可以利用的非零退出值,因此我们只能对输出进行 grep。

答案4

命令:

cat /etc/group | grep sudo

输出:

sudo:x:27:Tom,Stacy

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

相关内容