在Linux机器上,如何列出具有root特权的所有用户(甚至更好的是,一般而言,所有用户以及是否具有root的用户)?
在Linux机器上,如何列出具有root特权的所有用户(甚至更好的是,一般而言,所有用户以及是否具有root的用户)?
Answers:
不要忘记更改root密码。如果任何用户除root之外还具有UID 0,则不应这样做。馊主意。去检查:
grep 'x:0:' /etc/passwd
同样,您不应该这样做,而是要检查用户是否是根组的成员:
grep root /etc/group
要查看是否有人可以以root用户身份执行命令,请检查sudoers:
cat /etc/sudoers
要检查SUID位,该位允许以root特权执行程序:
find / -perm -04000
grep '[^:]*:[^:]*:0:' /etc/passwd
。+1尤其用于检查SUID。
要查看谁是UID 0:
getent passwd 0
查看谁在分组中root
,wheel
adm
以及admin
:
getent group root wheel adm admin
列出所有用户及其所属的组:
getent passwd | cut -d : -f 1 | xargs groups
getent passwd
实际上是正确的。只是不要忘记检查/ etc / sudoers。
纯根是用户标识“ 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用户访问权限的主要领域。
getent passwd
应该以passwd格式列出所有系统用户(包括root用户),无论在何处定义数据库。
打印所有用户
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
getent passwd
代替。对于您的第一个“打印所有用户”示例,请尝试以下操作:getent passwd | perl -naF: -e 'print "$F[0]\n"'
要获得所有用户的快速列表,请在键入passwd
命令后加一个空格,然后尝试按两次tab键(自动完成)。该su
命令也可以使用。
必须以root特权用户身份进行。