问题描述
我想要一个命令列出所有拥有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/group
中sudo
组中列出的所有用户(如果有)。
命令#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退出值,因此我们减少了对输出的影响。