¿Cómo enumero a todos los usuarios con root?

35

En un cuadro de Linux, ¿cómo enumero a todos los usuarios que tienen privilegios de root (y aún mejor, a todos los usuarios en general junto con si tienen root o no)?

Eric
fuente
1
¿Puede ser más específico en cuanto a lo que quiere decir con "privilegios de root"? ¿Te refieres a usuarios con UID = 0?
Chris S
Usuarios que tienen la capacidad de hacer cualquier cosa. Básicamente: si es posible, necesito enumerar los usuarios junto con los grupos de los que son miembros.
Eric
2
Si supiera dónde está su computadora, podría subir y tirar del cable de alimentación. Eso calificaría como "hacer cualquier cosa", lo que significa que estoy en tu lista. Rafiq ha enumerado las tres cosas más comunes, pero podría haber más y sabemos que tenemos en cuenta su sistema o cómo está configurado.
Chris S

Respuestas:

42

No olvides cambiar la contraseña de root. Si algún usuario tiene UID 0 además de root, no debería hacerlo. Mala idea. Verificar:

grep 'x:0:' /etc/passwd

Nuevamente, no debe hacer esto sino verificar si el usuario es miembro del grupo raíz:

grep root /etc/group

Para ver si alguien puede ejecutar comandos como root, verifique sudoers:

cat /etc/sudoers

Para verificar el bit SUID, que permite que los programas se ejecuten con privilegios de root:

find / -perm -04000

Warner
fuente
Estrictamente, ese primero solo funciona si el archivo de contraseña oculta está en el usuario. Estoy de acuerdo en que casi siempre lo es, en estos días, pero por si acaso, hice un trabajo rápido que verifica explícitamente el campo 3.
MadHatter apoya a Monica el
44
Este es un patrón mejor que el primero: grep '[^:]*:[^:]*:0:' /etc/passwd. +1 en particular para verificar SUID.
Pausado hasta nuevo aviso.
33

Para ver quién es UID 0:

getent passwd 0

Para ver quién está en grupos root, wheel admy admin:

getent group root wheel adm admin

Para enumerar todos los usuarios y los grupos de los que son miembros:

getent passwd | cut -d : -f 1 | xargs groups
Pausado hasta nuevo aviso.
fuente
99
A diferencia de todas las otras respuestas que confían erróneamente en el archivo / etc / passwd, esta, en getent passwdcambio, es correcta. Simplemente no olvides revisar / etc / sudoers.
mivk
Gracias por esto. Mucho más claro. Para mí esta es la respuesta aceptada.
Fiddy Bux
6

La raíz pura es la identificación de usuario "0".

Todos los usuarios en el sistema están en el archivo / etc / passwd:

less /etc/passwd

Aquellos que son root tienen "0" como ID de usuario, que es la tercera columna. Aquellos con "0" como grupo (cuarta columna) también pueden tener algunos privilegios de root.

A continuación, querrá ver los grupos y ver quién es un miembro adicional de los grupos "raíz" o "rueda" o "administrador":

less /etc/group

Los usuarios que figuran en esos grupos podrían tener algunos privilegios de root, especialmente a través del comando "sudo".

Lo último que querrá verificar es la configuración de "sudo" y ver quién está autorizado para ejecutar este comando. Este archivo en sí está bien documentado, así que no lo reproduciré aquí:

less /etc/sudoers

Eso cubre las áreas principales de quién podría tener acceso de root.

Rafiq Maniar
fuente
Consulte también serverfault.com/questions/205598/… para conocer algunos lugares más donde se pueden otorgar derechos de escalada de privilegios. (A saber, consolehelpery PackageKit.)
mattdm
2
Definitivamente, NO se garantiza que todos los usuarios estén en / etc / passwd. Pueden estar en LDAP, por ejemplo. Pero getent passwddebe enumerar todos los usuarios del sistema (incluida la raíz), en formato passwd, independientemente de la base de datos donde estén definidos.
mivk
3

Para imprimir a todos los usuarios

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

Para imprimir solo aquellos usuarios con UID 0, como lo han dicho otros, los usuarios con privilegios raíz implícitos:

perl -n -e '@user = split /:/ ; print "@user[0]\n" if @user[2] == "0";' < /etc/passwd
MadHatter apoya a Monica
fuente
Es una buena línea, pero tenga en cuenta las limitaciones (estoy seguro de que MadHatter ya lo sabe): no verificará los grupos y no verificará a los sudoers. Solo comprobará, como él dice, raíz implícita.
Rafiq Maniar
2
No analices / etc / passwd. Los usuarios pueden estar definidos en otro lugar. Usar en su getent passwdlugar. Para su primer ejemplo de "imprimir todos los usuarios", más bien intente esto:getent passwd | perl -naF: -e 'print "$F[0]\n"'
mivk
2

Para obtener una lista rápida de todos los usuarios, intente presionar la pestaña dos veces (para completar automáticamente) después de escribir el passwdcomando seguido de un espacio. Esto funciona con el sucomando también.

Debe hacerse como un usuario con privilegios de root.

Emeraldo
fuente
¿Es esta una característica específica de zsh? Bash sugiere solo archivos en openSUSE.
jgillich
Probado en Debian (Squeeze) en bash. No creo que nadie lo respalde oficialmente, pero es un atajo.
Emeraldo
Actualización: esto ya no funciona en El Capitan. Probablemente fue reparado por razones de seguridad.
Emeraldo
0

Me molestó que no hubiera una respuesta de una sola línea ... Si desea enumerar todas las cuentas UID 0 (raíz) use lo siguiente:

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

Mejor,

Boschko
fuente