Para configurar y administrar el sistema de permisos, el administrador necesita una lista de todos los usuarios. Hay comandos para crear usuarios, eliminar usuarios, pero es una tarea crítica enumerar todos los usuarios en el sistema Linux. También es bastante necesario por motivos de seguridad asegurarse de que tiene la cantidad correcta de usuarios y que no se olvidó de eliminar algunos.
Aquí en LinuxAPT, como parte de nuestros Servicios de Administración de Servidores, ayudamos regularmente a nuestros Clientes a realizar consultas relacionadas con el Sistema Linux.
En este contexto, veremos cómo listar usuarios en sistemas Linux.
¿Cómo listar todos los usuarios usando el archivo /etc/passwd?
La información del usuario se almacena en el archivo /etc/passwd. Contiene una línea con nombre de usuario para cada cuenta de usuario en el sistema. Puede usar el comando less o cat para ver el contenido del archivo:
$ cat /etc/passwd
En el resultado, verá que cada línea tiene siete campos delimitados por dos puntos que contienen la siguiente información:
- Nombre de usuario.
- Contraseña cifrada donde x significa que la contraseña se guarda en el archivo etc/shadow.
- UID (ID de usuario).
- GID (ID de grupo de usuario).
- Nombre completo del usuario.
- Directorio $HOME del usuario.
- Ruta de shell de inicio de sesión.
Si desea enumerar solo el nombre de usuario, puede usar los comandos awk o cut para imprimir solo el nombre de usuario:
awk -F: '{ print $1}' /etc/passwd
cut -d: -f1 /etc/passwd
La salida será la siguiente:
Output
root
daemon
bin
sys
sync
games
man
lp
news
uucp
proxy
www-data
...
...
geoclue
gdm
gnome-initial-setup
sshd
¿Cómo listar a todos los usuarios usando el comando getent?
El comando Getent leerá las entradas de las bases de datos. Enumerará a los usuarios de la base de datos LDAP y del archivo /etc/passwd.
Para obtener una lista de todos los usuarios de Linux, escriba el siguiente comando:
$ getent passwd
La salida será la misma que el contenido del archivo /etc/passwd. También puede usar awk o cut para imprimir solo el nombre de usuario:
getent passwd | awk -F: '{ print $1}'
getent passwd | cut -d: -f1
¿Cómo comprobar si existe un usuario en el sistema Linux?
Ahora sabemos cómo obtener la lista de usuarios. Pero, ¿qué sucede si desea verificar si existe un usuario en el sistema actual o no? Puede verificar usando el comando grep y sin usar el comando grep.
Por ejemplo, queremos verificar que el usuario de linuxapt exista o no, entonces debe emitir el siguiente comando:
$ getent passwd | grep linuxapt
$ getent passwd linuxapt
Output
linuxapt:x:1001:1001:,,,:/home/linuxapt:/bin/bash
Si el usuario existe en el sistema, imprimirá los detalles de ese usuario; de lo contrario, no imprimirá nada.
Si desea que exista un número total de usuarios en su sistema, puede obtenerlo:
$ getent passwd | wc -l
Devolverá el número de usuarios como el siguiente resultado:
Output
47
¿Cómo diferenciar el sistema y los usuarios normales?
Los usuarios del sistema se crean cuando instala el sistema operativo o actualiza nuevos paquetes. Ya no hay diferencia entre los usuarios del sistema y los usuarios normales.
Los usuarios normales son los usuarios creados por el root u otro usuario con privilegios sudo. Por lo general, un usuario normal tiene un shell de inicio de sesión real y un directorio de inicio.
Cada usuario tiene un UID (ID de usuario), ya sea un usuario del sistema o un usuario normal. Cuando un usuario normal agrega un usuario usando el comando adduser. Se agregará el usuario y el UID se asignará automáticamente con la referencia de UID_MIN y UID_MAX del archivo /etc/login.defs.
Puede verificar UID_MIN y UID_MAX con el siguiente comando:
$ grep -E '^UID_MIN|^UID_MAX' /etc/login.defs
Mostrará la salida de la siguiente manera:
Output
UID_MIN 1000
UID_MAX 60000
Del resultado anterior, podemos ver que todos los usuarios normales deben tener una identificación única entre 1000 y 60000.
Ahora emitiremos un comando para obtener una lista de usuarios normales cuya identificación única esté entre 1000 y 60000.
$ getent passwd {1000..60000}
Output
linuxapt:x:1000:1000:LinuxAPT,,,:/home/linuxapt:/bin/bash
demouser:x:1001:1001:,,,:/home/demouser:/bin/bash
Para imprimir solo los nombres de usuario, escriba el siguiente comando:
$ eval getent passwd {$(awk '/^UID_MIN/ {print $2}' /etc/login.defs)..$(awk '/^UID_MAX/ {print $2}' /etc/login.defs)} | cut -d: -f1
Output
linuxapt
demouser
¿Cómo obtener la lista de grupos en Linux?
Puede listar todos los grupos en Linux usando el siguiente comando:
$ getent group
Puede obtener una lista de todos los grupos con un usuario específico usando el siguiente comando:
$ getent group | grep linuxapt