La administración de usuarios en Linux es una tarea de mucha relevancia. La existencia de un sistema Linux mal administrador a este nivel, puede suponer un agujero importante de seguridad.

Por esta razón es importante, tener una visión clara al respecto de la administración de usuarios el linux.

Nociones básicas de Grupos y Usuarios

En Linux, existen usuarios y grupos de usuarios. Los usuarios y grupos se identifican a través de un número identificador único.

IDENTIFICADORFUNCIÓN
UID o User IDNúmero exclusivo de identificación del usuario
GID o Group IDNúmero exclusivo de identificación del grupo de usuarios

Un usuario debe de pertenecer siempre a un grupo principal a parte de a otros grupos secundarios. Por ello, como ya veremos más adelante, Linux puede crear un grupo de usuarios solo para ese usuario en el momento de la creación del mismo.

Tipos de usuarios en Linux

Podemos categorizar, sin crear doctrina de ello, los usuarios por tres tipos diferentes en función de su finalidad:

  • Usuario Root
  • Usuarios de sistema
  • Usuarios normales

El usuario root

Es el usuario que se establece nada más instalar el sistema y el que queda definido como administrador del mismo. Es el Gran Señor Feudal del Castillo. Puedes verlo mencionado en diferentes tutoriales o artículos como superuser, root user, adminuser o administrador.

Sus principales características son:

  • Su UID es 0.
  • Tiene acceso total a todos los archivos y directorios del sistema por independientemente de la definición de permisos que tengan definidos.
  • Controla todo el sistema. Puede controlar a los demás usuarios, parar y arrancar servicios, instalar, eliminar o actualizar aplicaciones del sistema o inclusive actualizar el propio kernel del sistema.

Usuarios de sistema

Son usuarios cuya función ejecutar diferentes aspectos del sistema y se crean en el momentos de la instalación del SO o del servicio correspondiente.

  • Su UID suele estar comprendido entre 1 y 999.
  • No tienen privilegios de root. Solo tienen los permisos necesarios para atender a las tareas que tienen asignadas.
  • No pueden iniciar sesión en el sistema como un usuario normal.
  • No tienen contraseña definida.

Usuarios linux convencionales

Son los usuarios que hacen uso del sistema y sus funcionalidades y cuando estos son creados, se les inicializa con una serie de características:

  • Disponen de un área personal dentro del sistema que se localiza normalmente en /home
  • El área personal es personalizable por el usuario.
  • En la actualidad, en versiones como Debian 9 se les asigna un UID a partir de 1000.

Asignación de UID y GID para usuarios linux

La definición de los UID y GID del sistema, se pueden controlar desde el archivo login.defs.

root@monitor > /# cat /etc/login.defs
#
# Min/max values for automatic uid selection in useradd
#
UID_MIN                  1000
UID_MAX                 60000
# System accounts
#SYS_UID_MIN              100
#SYS_UID_MAX              999
#
# Min/max values for automatic gid selection in groupadd
#
GID_MIN                  1000
GID_MAX                 60000
# System accounts
#SYS_GID_MIN              100
#SYS_GID_MAX              999

Ficheros de gestión de usuarios linux

La gestión de usuarios en linux se centraliza en fundamentalmente en tres ficheros distintos:

  • /etc/passwd – Definición de usuarios
  • /etc/shadow – Protección de contraseñas y propiedades de login
  • /etc/group – Definición de grupos secundarios de los usuarios

Fichero /etc/passwd

El fichero passwd, es el fichero de sistema ubicado en /etc/passwd y contiene toda la información de la definición del usuario dentro del sistema, excepto su contraseña.

El fichero /etc/passwd puede ser leído por todo el mundo y solo escrito por root. De esta forma se protegen las contraseñas del usuario. Es posible desactivar la protección de contraseñas mediante este fichero, y que se almacenen cifradas en el archivo /etc/passwd pero no responde a ninguna lógica de seguridad.

Si realizamos un cat de este fichero, veremos algo parecido a lo siguiente:

root@monitor > /# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
_apt:x:104:65534::/nonexistent:/bin/false
messagebus:x:105:109::/var/run/dbus:/bin/false
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
usuario:x:1000:1000:Usuario,,,:/home/usuario:/bin/bash

Lo primero que podemos observar, es que el fichero es de texto plano y dentro de cada linea se almacenan campos separados por «:».

CampoFunción
1Definición del nombre del usuario
2Contraseña del usuario. En caso de contener solo una «x» es que la contraseña se gestiona encriptada desde el fichero /etc/shadow. Es una forma de protección ya que este fichero puede ser leído por los demás usuarios
3User ID
4Group ID
5Nombre completo del usuario y otros datos generales
6Directorio personal de trabajo
7Shell de sistema asignada al usuario. Más adelante puedes ver los tipos de shell linux

Fichero /etc/shadow

Este fichero es similar a /etc/passwd. Entre sus principales características, está que solo puede ser leído por root, tal y como se ve en la definición de permisos.

root@monitor > etc# ls -lh | grep shadow
-rw-r----- 1 root shadow  934 mar 11 17:00 shadow

En su interior encontraremos un formato similar a esto:

root@monitor > etc# cat shadow
root:$6$gSjIrkzP$h0.xMJJF6rRn4.n4RTA/Yx9.VsfubvBx.iWjMcHlzDtf1.UnthwMxQ3m3/4HS6x.DLk1:17966:0:99999:7:::
daemon:*:17966:0:99999:7:::
bin:*:17966:0:99999:7:::
sys:*:17966:0:99999:7:::
sync:*:17966:0:99999:7:::
games:*:17966:0:99999:7:::
man:*:17966:0:99999:7:::
lp:*:17966:0:99999:7:::
mail:*:17966:0:99999:7:::
news:*:17966:0:99999:7:::
uucp:*:17966:0:99999:7:::
proxy:*:17966:0:99999:7:::
www-data:*:17966:0:99999:7:::
backup:*:17966:0:99999:7:::
list:*:17966:0:99999:7:::
irc:*:17966:0:99999:7:::
gnats:*:17966:0:99999:7:::
nobody:*:17966:0:99999:7:::
systemd-timesync:*:17966:0:99999:7:::
systemd-network:*:17966:0:99999:7:::
systemd-resolve:*:17966:0:99999:7:::
systemd-bus-proxy:*:17966:0:99999:7:::
_apt:*:17966:0:99999:7:::
messagebus:*:17966:0:99999:7:::
sshd:*:17966:0:99999:7:::
usuario:$6$wLnlN4vm$ukxh3Y9SCLh8YV05aVrkmP.gQtfSM3hyZdvjz3Dox2IvTkWMwV/5zJ.FMMQrPJ833j5O4Nni/:17966:0:99999:7:::

Los campos que aparecen en este fichero también están en texto plano y separados por «:».

CampoFunción
1 Nombre del usuario
2Contraseña cifrada del usuario.
3Días desde el último cambio de contraseña
4Número de días que deben de transcurrir sin poder cambiar la contraseña
5Número de días para forzar el cambio de contraseña
6Plazo de días de notificación de cambio forzado de contraseña al usuario
7Plazo de gracia de validez de la contraseña en caso de no ser cambiada
8Fecha de caducidad de la cuenta
9

Fichero /etc/group

Este fichero tiene el mismo formato que los anteriores y contiene los grupos a los que pertenece un usuario.

CampoFunción
1Nombre del usuario
2Contraseña cifrada del grupo en caso de estar definida
3Group ID
4Grupos adicionales a los que pertenece el usuario
root@monitor > etc# cat group
usuario:x:1000:contabilidad,formacion

Desactivar la protección extendida de contraseñas en Linux

Si consideras necesario desactivar la protección de shadow sobre el sistema y almacenar las contraseñas cifradas en passwd, solo tienes que utilizar los siguientes comandos:

COMANDOFUNCIÓN
pwconvDesactiva la protección de shadow y elimina el fichero. Las contraseñas pasan a /etc/passwd
pwunconvHabilita la protección de shadow y vuelve a crear el fichero /etc/shadow

Tipos de shell en Linux

La Shell del sistema, es el interfaz del usuario con el sistema operativo mediante el cual, el usuario puede acceder a los servicios del mismo y relacionarse con ellos a través de los comandos del sistema.

Como hemos observado en la sección que describe el formato del fichero /etc/passwd, el contenido del último campo, contiene la shell o interprete de comandos de la que puede hacer uso cada usuario por defecto.

En el fichero podemos ver tres tipos de shell aunque hay muchas más:

  • /bin/sh
  • /usr/sbin/nologin
  • /bin/false
  • /bin/bash

Estos interpretes de comandos se pueden encontrar en las rutas que se especifican y aportan diferentes funcionalidades al usuario.

root@monitor > bin# ls -lh | grep sh
-rwxr-xr-x 1 root root 1,1M may 15  2017 bash
-rwxr-xr-x 1 root root 115K ene 24  2017 dash
lrwxrwxrwx 1 root root    4 may 15  2017 rbash -> bash
lrwxrwxrwx 1 root root    4 ene 24  2017 sh -> dash
lrwxrwxrwx 1 root root    4 mar 11 16:54 sh.distrib -> dash
root@monitor > bin#
root@monitor > bin# ls -lh | grep false
-rwxr-xr-x 1 root root  31K feb 22  2017 false
root@monitor > bin#
root@monitor > bin# cd /usr/sbin
root@monitor > sbin# ls -lh | grep login
-rwxr-xr-x 1 root root 6,0K may 17  2017 nologin

Las diferentes funcionalidades de cada shell son complejas por lo que en esta entrada no vamos a entrar a fondo en este tema.

Cambiar de shell en linux

Es posible que un usuario quiera cambiar de shell durante la sesión establecida con el sistema tras haber completado el proceso de login. No obstante es necesario saber cuales son las shell válidas dentro del sistema para realizar este cambio.

Fichero /etc/shells

La información sobre las shells válidas dentro del sistema para poder cambiar por el usuario están en el fichero /etc/shells que tendrá un contenido similar a este:

root@monitor > sbin# cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

Comandos para cambiar de shell

Para cambiar la shell usaremos el comando chsh Teniendo en cuenta también los comandos y configuraciones:

  • chshq Cambia el shell del login de usuario
  • chfn Cambia el nombre de usuario y su información
  • passwd Cambia la contraseña del usuario
  • login.defs Configuración shadow sw usuarios