Cómo comprobar los usuarios de un sistema Linux
![]()
En la administración de sistemas Linux es importante conocer qué usuarios existen en un servidor, qué permisos tienen y cuáles de ellos pueden iniciar sesión. Una revisión periódica de las cuentas permite detectar usuarios que ya no deberían existir, cuentas de servicio mal configuradas o accesos que no estaban previstos.
Linux almacena la información básica de las cuentas locales principalmente en /etc/passwd, mientras que la información relacionada con las contraseñas se encuentra en /etc/shadow.
A continuación veremos los principales comandos para comprobar los usuarios de un sistema Linux.
1. Listar todos los usuarios
La forma más sencilla de consultar las cuentas existentes es utilizar:
cat /etc/passwdCada línea corresponde a un usuario y está formada por varios campos separados por :.
Por ejemplo:
root:x:0:0:root:/root:/bin/bash
user:x:1001:1001:Usuario:/home/user:/bin/bashLos campos son:
- Nombre de usuario.
- Contraseña, actualmente representada normalmente por
x. - UID (User ID).
- GID (Group ID).
- Descripción o información del usuario.
- Directorio personal.
- Shell de inicio de sesión.
También podemos utilizar:
cut -d: -f1 /etc/passwdpara mostrar únicamente los nombres de usuario.
2. Consultar un usuario concreto
Para comprobar si existe una determinada cuenta podemos utilizar:
id usuarioPor ejemplo:
id userLa salida puede mostrar información como:
uid=1001(user) gid=1001(user) groups=1001(user),27(sudo)Esto permite conocer rápidamente el UID, el grupo principal y los grupos adicionales del usuario.
Otra opción es:
getent passwd usergetent es especialmente útil en sistemas que utilizan fuentes externas de autenticación, como LDAP, además de las cuentas locales.
3. Diferenciar usuarios normales y cuentas del sistema
No todas las cuentas que aparecen en /etc/passwd corresponden a personas.
Linux utiliza numerosas cuentas para ejecutar servicios y procesos, por ejemplo:
www-data
mysql
postgres
nginx
sshd
systemd-networkUna forma habitual de identificar usuarios humanos es buscar cuentas con UID a partir del rango utilizado para usuarios normales.
Por ejemplo:
awk -F: '$3 >= 1000 {print $1, $3, $6, $7}' /etc/passwdEsto muestra:
- usuario
- UID
- directorio personal
- shell
Sin embargo, el valor de 1000 no debe considerarse una regla universal. El rango de UID utilizado para usuarios normales depende de la distribución y de su configuración.
Por eso, para una auditoría completa es recomendable comprobar también la configuración de /etc/login.defs.
grep -E '^(UID_MIN|UID_MAX)' /etc/login.defs4. Comprobar qué usuarios pueden iniciar sesión
Una cuenta puede existir en el sistema sin tener permitido iniciar una sesión interactiva.
Para detectar las cuentas que utilizan shells habituales:
grep -E '/(bash|sh|zsh|fish)$' /etc/passwdTambién es importante identificar las cuentas cuyo shell es:
/usr/sbin/nologino:
/bin/falseEstas configuraciones suelen utilizarse para impedir el acceso interactivo a cuentas de servicio.
Podemos localizar estas cuentas con:
grep -E '/(nologin|false)$' /etc/passwdNo obstante, no debemos asumir automáticamente que una cuenta con /bin/bash representa a una persona. Una cuenta de servicio también puede estar configurada con un shell válido.
5. Comprobar si una cuenta está bloqueada
Podemos consultar el estado de una cuenta mediante:
passwd -S usuarioPor ejemplo:
passwd -S userLa salida permite determinar si la contraseña de la cuenta está activa o bloqueada.
Otra herramienta especialmente útil es:
chage -l usuarioPor ejemplo:
sudo chage -l userEste comando muestra información relacionada con la contraseña, como:
- última modificación de la contraseña;
- fecha de expiración;
- periodo máximo de validez;
- periodo mínimo;
- periodo de aviso;
- fechas relacionadas con la expiración de la cuenta.
6. Revisar las cuentas con privilegios administrativos
Una de las comprobaciones más importantes consiste en identificar qué usuarios tienen capacidad para ejecutar comandos con privilegios elevados.
Podemos consultar los miembros del grupo sudo:
getent group sudoEn algunas distribuciones, el grupo utilizado es wheel:
getent group wheelTambién podemos comprobar directamente los grupos de un usuario:
groups usuarioo:
id usuarioAdemás, hay que revisar la configuración de sudo, especialmente:
/etc/sudoersy:
/etc/sudoers.d/Para comprobar la configuración efectiva de sudo es recomendable utilizar:
sudo -l -U usuarioEsto permite conocer qué comandos puede ejecutar un usuario mediante sudo.
7. Buscar usuarios con UID 0
El UID 0 corresponde a root.
Por seguridad, conviene comprobar qué cuentas tienen este UID:
awk -F: '$3 == 0 {print $1}' /etc/passwdEn una configuración convencional debería aparecer:
rootSi aparecen otras cuentas con UID 0, deben investigarse cuidadosamente, ya que disponen esencialmente de los mismos privilegios que root.
8. Comprobar usuarios conectados actualmente
Para saber qué usuarios tienen sesiones abiertas podemos utilizar:
whoOtra opción es:
ww proporciona información adicional, incluyendo desde dónde está conectado el usuario y qué proceso está ejecutando.
También podemos utilizar:
usersque muestra de forma resumida los usuarios que tienen una sesión abierta.
Para obtener información sobre sesiones gestionadas por systemd:
loginctl list-sessionsY para consultar los detalles de una sesión concreta:
loginctl session-status ID9. Revisar los últimos accesos
Linux mantiene información sobre los accesos realizados al sistema.
El comando:
lastpermite consultar los últimos inicios de sesión registrados.
Por ejemplo:
last -20muestra las últimas 20 entradas.
También podemos comprobar los últimos accesos de un usuario concreto:
last usuarioPara consultar intentos de autenticación fallidos, dependiendo de la distribución y configuración de logging, pueden utilizarse:
lastbo revisar los registros de autenticación.
En sistemas basados en Debian/Ubuntu suele ser especialmente relevante:
/var/log/auth.logMientras que en sistemas como RHEL, Rocky Linux o AlmaLinux puede encontrarse información equivalente en:
/var/log/secure10. Buscar cuentas sin contraseña
Una comprobación importante durante una auditoría consiste en detectar cuentas que puedan tener una contraseña vacía.
Una primera revisión puede hacerse sobre /etc/shadow:
sudo awk -F: '$2 == "" {print $1}' /etc/shadowSi el comando devuelve algún usuario, conviene investigar inmediatamente esa cuenta.
Hay que tener en cuenta que /etc/shadow contiene información sensible y debe protegerse adecuadamente. Normalmente sólo root y procesos con los permisos correspondientes pueden acceder a su contenido.
11. Revisar los directorios personales
Los usuarios normales suelen tener un directorio personal bajo /home.
Podemos comprobarlos mediante:
ls -la /homeTambién podemos buscar los directorios personales definidos en /etc/passwd:
awk -F: '$6 ~ /^\/home\// {print $1, $6}' /etc/passwdEsto resulta útil para detectar cuentas que aparentemente son usuarios normales pero que no tienen un directorio personal coherente con la configuración del sistema.
12. Comprobar grupos de un usuario
Los grupos determinan buena parte de los permisos que puede tener una cuenta.
Para consultar los grupos de un usuario:
id usuarioo:
groups usuarioPor ejemplo:
id userEs especialmente importante prestar atención a grupos con privilegios elevados, como:
sudo
wheel
adm
docker
libvirtEl significado exacto de cada grupo depende de la distribución y de los servicios instalados.
Por ejemplo, pertenecer al grupo docker puede proporcionar capacidades muy elevadas sobre el sistema, por lo que no debe considerarse un grupo administrativo "menor".
13. Comprobar usuarios del sistema con un pequeño informe
Para realizar una revisión rápida podemos utilizar:
awk -F: '{printf "%-20s UID=%-6s HOME=%-25s SHELL=%s\n",$1,$3,$6,$7}' /etc/passwdEsto genera una salida similar a:
root UID=0 HOME=/root SHELL=/bin/bash
www-data UID=33 HOME=/var/www SHELL=/usr/sbin/nologin
user UID=1001 HOME=/home/user SHELL=/bin/bashDe esta forma resulta mucho más sencillo revisar visualmente las cuentas existentes.
14. Qué deberíamos buscar durante una auditoría
Cuando revisamos los usuarios de un servidor Linux, no basta con comprobar cuántas cuentas existen. Es recomendable buscar especialmente:
- usuarios que ya no deberían existir;
- cuentas desconocidas;
- usuarios con UID 0 distintos de
root; - cuentas con privilegios
sudoowheelque no deberían tenerlos; - usuarios con shells interactivos innecesarios;
- cuentas de servicio con configuraciones incorrectas;
- contraseñas o cuentas sin una política de expiración adecuada;
- accesos recientes de usuarios que ya no deberían utilizar el servidor;
- sesiones activas inesperadas;
- pertenencia a grupos con privilegios elevados;
- cuentas creadas recientemente sin una justificación conocida.
15. Comandos básicos para una revisión rápida
Una revisión inicial puede realizarse con los siguientes comandos:
# Listar usuarios
cut -d: -f1 /etc/passwd
# Información de un usuario
id usuario
# Información de contraseña
sudo chage -l usuario
# Usuarios con UID 0
awk -F: '$3 == 0 {print $1}' /etc/passwd
# Usuarios con shells interactivos
grep -E '/(bash|sh|zsh|fish)$' /etc/passwd
# Usuarios actualmente conectados
who
# Últimos accesos
last -20
# Sesiones actuales
loginctl list-sessions
# Grupos administrativos
getent group sudo
getent group wheelConclusión
Comprobar los usuarios de Linux es una tarea fundamental dentro de la administración y auditoría de cualquier servidor. La revisión no debería limitarse a ejecutar cat /etc/passwd, sino que debería incluir también los UID, grupos, privilegios, shells, estado de las cuentas y registros de acceso.
Una revisión periódica permite identificar cuentas innecesarias, privilegios excesivos y posibles accesos no autorizados antes de que se conviertan en un problema de seguridad.
Para una auditoría completa, además de las cuentas locales, conviene comprobar si el servidor utiliza mecanismos externos de autenticación como LDAP, Active Directory, Kerberos u otros proveedores de identidad, ya que en esos casos getent passwd e id pueden proporcionar una visión más completa que consultar únicamente /etc/passwd.
