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 细分:
^
: 行首.*
: 零个或多个字符$
: 行结束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)
And*_*ini 16
如前所述,答案可以在Unix & Linux Stack Exchange 上找到:
这表明用户“saml”是wheel组的成员。
Run Code Online (Sandbox Code Playgroud)$ getent group wheel wheel:x:10:saml
唯一的区别是 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 输出。
小智 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 权限的用户。