我想要一个命令来列出所有具有 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
:打印文件中与正则表达式匹配的所有行-P
:grep
匹配 Perl 风格的正则表达式o
:grep
仅打印匹配的字符串'^sudo.+:\K.*$'
:grep
匹配引号之间的正则表达式
正则表达式 #1 分解:
- 任何未列出的字符或字符组都与该字符或字符组本身匹配
^
:行首.+
:一个或多个字符\K
:丢弃前一个匹配.*
:零个或多个字符$
: 行结束
命令#2分解:
grep
:打印文件中与正则表达式匹配的所有行'^sudo.+:\K.*$'
:grep
匹配引号之间的正则表达式cut
:仅打印文件中每行的指定部分-d:
: 将cut
其解释:
为字段分隔符-f4
:cut
仅打印第四个字段
正则表达式 #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 权限的用户。