44 votos

¿Cómo puedo listar a todos los usuarios con root?

En una caja linux, ¿cómo puedo listar todos los usuarios que tienen privilegios de root (y mejor aún, todos los usuarios en general junto con si tienen root o no)?

3 votos

¿Puede ser más específico en cuanto a lo que quiere decir con "privilegios de root"? ¿Se refiere a usuarios con UID=0?

0 votos

Que los usuarios tengan la capacidad de hacer cualquier cosa. Básicamente, necesito una lista de usuarios junto con los grupos a los que pertenecen, si es posible.

2 votos

Si supiera dónde está tu ordenador, podría acercarme 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 no sabemos nada sobre su sistema o cómo está configurado.

48voto

Warner Puntos 17528

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

grep 'x:0:' /etc/passwd

De nuevo, no deberías hacer esto sino para comprobar si el usuario es miembro del grupo root:

grep root /etc/group

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

cat /etc/sudoers

Para comprobar el bit SUID, que permite ejecutar programas con privilegios de root:

find / -perm -04000

0 votos

Estrictamente, la primera sólo funciona si el archivo de contraseña en la sombra está en el usuario. Estoy de acuerdo en que casi siempre lo está, hoy en día, pero por si acaso, hice un trabajo rápido en perl que comprueba explícitamente el campo 3.

4 votos

Este es un patrón mejor que el primero: grep '[^:]*:[^:]*:0:' /etc/passwd . +1 en particular para la comprobación del SUID.

0 votos

@DennisWilliamson ¿puede explicar por qué?

39voto

jason saldo Puntos 5036

Para ver quién es el UID 0:

getent passwd 0

Para ver quién está en los grupos root , wheel adm y admin :

getent group root wheel adm admin

Para listar todos los usuarios y los grupos a los que pertenecen:

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

9 votos

A diferencia de todas las demás respuestas que se basan erróneamente en el archivo /etc/passwd, ésta, utilizando getent passwd en su lugar, es realmente correcto. Sólo no olvides revisar /etc/sudoers.

0 votos

Gracias por esto. Mucho más claro. Para mí esta es la respuesta aceptada.

0 votos

Podría añadir sudo egrep '\(root\)|\(ALL\)' /etc/sudoers; sudo ls /etc/sudoers.d para sudo

6voto

Rafiq Maniar Puntos 835

root pura es el ID de usuario "0".

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

less /etc/passwd

Los que son root tienen "0" como id de usuario, que es la 3ª columna. Los que tienen "0" como grupo (4ª columna) también pueden tener algunos privilegios de root.

A continuación, querrás mirar los grupos, y ver quién es un miembro adicional de los grupos "root" o "wheel" o "admin":

less /etc/group

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

La última cosa que querrá comprobar es la configuración "sudo" y ver quién aparece como autorizado para ejecutar este comando. Este archivo está bien documentado, así que no lo reproduciré aquí:

less /etc/sudoers

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

0 votos

Ver también serverfault.com/questions/205598/ para algunos lugares más en los que se podrían conceder derechos de privilegio-escalada. (A saber, consolehelper y PackageKit .)

2 votos

Definitivamente NO se garantiza que todos los usuarios estén en /etc/passwd. Pueden estar en LDAP, por ejemplo. Pero getent passwd debería listar todos los usuarios del sistema (incluido el root), en formato passwd, independientemente de la base de datos donde estén definidos.

3voto

MadHatter Puntos 44059

Para imprimir todos los usuarios

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

Para imprimir sólo los usuarios con UID 0, siendo como otros han dicho, los usuarios con privilegios implícitos de root:

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

0 votos

Es una buena idea, pero ten en cuenta las limitaciones (estoy seguro de que MadHatter ya lo sabe): no comprobará los grupos y no comprobará los sudoers. Sólo comprobará, como él dice, root implícita.

2 votos

No analizar /etc/passwd. Los usuarios pueden estar definidos en otra parte. Utilice getent passwd en su lugar. Para su primer ejemplo de "imprimir todos los usuarios", mejor pruebe esto: getent passwd | perl -naF: -e 'print "$F[0]\n"'

2voto

Emeraldo Puntos 61

Para obtener una lista rápida de todos los usuarios, intente pulsar dos veces el tabulador (para autocompletar) después de escribir el passwd seguido de un espacio. Esto funciona con el su también.

Debe hacerse como usuario con privilegios de root.

0 votos

¿Es una característica específica de zsh? Bash sugiere sólo archivos en openSUSE.

0 votos

Probado en Debian (Squeeze) en bash. No creo que nadie apoye oficialmente esto, pero es un atajo.

0 votos

Actualización: Esto ya no funciona en El Capitán. Probablemente se haya arreglado por razones de seguridad.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: