如何列出所有具有root用户?


35

在Linux机器上,如何列出具有root特权的所有用户(甚至更好的是,一般而言,所有用户以及是否具有root的用户)?


1
您能否更具体地说明“根特权”的含义?您的意思是用户的UID = 0?
克里斯·S

用户有能力做任何事情。基本上-如果可能,我需要列出用户以及他们所属的组。
埃里克(Eric)2010年

2
如果我知道您的计算机在哪里,我可以走过去并拉电源线。那将被视为“做什么”,这意味着我在您的名单上。Rafiq列出了三个最常见的事物,但可能还有更多,我们知道您的系统或它的设置方式。
克里斯·S

Answers:


42

不要忘记更改root密码。如果任何用户除root之外还具有UID 0,则不应这样做。馊主意。去检查:

grep 'x:0:' /etc/passwd

同样,您不应该这样做,而是要检查用户是否是根组的成员:

grep root /etc/group

要查看是否有人可以以root用户身份执行命令,请检查sudoers:

cat /etc/sudoers

要检查SUID位,该位允许以root特权执行程序:

find / -perm -04000


严格来说,第一个选项仅在影子密码文件位于用户中时才起作用。我同意这几乎总是是,这些天,但为了以防万一,我做了一个快速Perl的工作,明确检查场3
MadHatter支持莫妮卡

4
这是比第一个更好的模式:grep '[^:]*:[^:]*:0:' /etc/passwd。+1尤其用于检查SUID。
暂停,直到另行通知。

33

要查看谁是UID 0:

getent passwd 0

查看谁在分组中rootwheel adm以及admin

getent group root wheel adm admin

列出所有用户及其所属的组:

getent passwd | cut -d : -f 1 | xargs groups

9
与错误地依赖于/ etc / passwd文件的所有其他答案不同,使用该答案getent passwd实际上是正确的。只是不要忘记检查/ etc / sudoers。
mivk 2012年

谢谢你 清楚得多。对我来说,这是公认的答案。
Fiddy Bux

6

纯根是用户标识“ 0”。

系统中的所有用户都在/ etc / passwd文件中:

less /etc/passwd

那些root用户将“ 0”作为用户ID,这是第三列。那些以“ 0”为组(第4列)的用户也可能具有一些root特权。

接下来,您将要查看这些组,并查看谁是“ root”或“ wheel”或“ admin”组的其他成员:

less /etc/group

这些组中列出的用户可以具有一些root特权,尤其是通过“ sudo”命令。

您将要检查的最后一件事是“ sudo”配置,并查看列出谁被授权运行此命令。该文件本身有充分的文档记录,因此在这里不再赘述:

less /etc/sudoers

这涵盖了可以拥有root用户访问权限的主要领域。


另请参阅serverfault.com/questions/205598/…,以获得更多可以授予特权升级权限的地方。(即,consolehelperPackageKit
mattdm

2
绝对不能保证所有用户都在/ etc / passwd中。例如,它们可以在LDAP中。但是getent passwd应该以passwd格式列出所有系统用户(包括root用户),无论在何处定义数据库。
mivk 2012年

3

打印所有用户

perl -n -e '@user = split /:/ ; print "@user[0]\n";' < /etc/passwd

就像其他人所说的那样,仅打印那些UID为0的用户,这些用户具有隐式root特权:

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd

那是一个很好的班轮,但是要注意局限性(我确信MadHatter已经意识到了这一点)-它不会检查组,也不会检查sudoers。正如他所说,它只会检查隐式根。
拉菲克·马尼亚尔

2
不要解析/ etc / passwd。用户可以在其他地方定义。使用getent passwd代替。对于您的第一个“打印所有用户”示例,请尝试以下操作:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk 2012年

2

要获得所有用户的快速列表,请在键入passwd命令后加一个空格,然后尝试按两次tab键(自动完成)。该su命令也可以使用。

必须以root特权用户身份进行。


这是zsh的特定功能吗?Bash建议仅在openSUSE上的文件。
jgillich 2013年

在bash中对Debian(Squeeze)进行了测试。我不相信会有任何人正式支持这一点,但这是捷径。
Emeraldo

更新:这在El Capitan中不再起作用。它可能是出于安全原因而修复的。
Emeraldo '16

0

令我烦恼的是,没有一个单一的答案...如果要列出所有UID 0(root)帐户,请使用以下命令:

cat /etc/passwd | cut -f1,3,4 -d":" | grep"0:0" | cut -f1 -d":" | awk '{print $1}'

最好,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.