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 权限的用户。