04. Gestión de usuarios y permisos en Ubuntu Server: guía completa

Gestionar usuarios, grupos y permisos es una de las tareas fundamentales para los administradores de Ubuntu Server. Tanto si configuras un entorno multiusuario como si proteges tu servidor, es esencial comprender cómo crear, modificar y gestionar cuentas de usuario, grupos y permisos. Esta guía ofrece un análisis en profundidad de la gestión de usuarios y permisos, con ejemplos reales, salidas de comandos y buenas prácticas.


Artículo anterior:

01. Introducción a Ubuntu Server – SysOSX: AI & Cloud

02. Cómo configurar tu primer servidor Ubuntu: guía para principiantes – SysOSX: AI & Cloud

03. Dominar la línea de comandos de Linux para Ubuntu Server




Introducción

Ubuntu Server es una plataforma potente para alojar aplicaciones, gestionar servicios y habilitar entornos multiusuario. Al dominar la gestión de usuarios y permisos, puedes proteger tu servidor, controlar el acceso de forma eficaz y evitar acciones no autorizadas. Esta guía cubrirá todo, desde la creación básica de cuentas de usuario hasta la configuración avanzada de permisos, con ejemplos detallados.


Crear y gestionar cuentas de usuario

Crear un usuario

Para crear una cuenta de usuario en Ubuntu Server, usa el comando adduser. Este comando es interactivo y te pedirá información adicional sobre el usuario.

Comando de ejemplo:

sudo adduser john

Salida de ejemplo:

Adding user `john' ...
Adding new group `john' (1001) ...
Adding new user `john' (1001) with group `john' ...
Creating home directory `/home/john' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for john
Enter the new value, or press ENTER for the default
        Full Name []: John Doe
        Room Number []: 101
        Work Phone []: 555-1234
        Home Phone []: 555-5678
        Other []:
Is the information correct? [Y/n] Y

Esto crea un usuario llamado john con un directorio personal en /home/john y le asigna un ID de usuario (UID) único.


Modificar un usuario

El comando usermod te permite modificar cuentas de usuario. Por ejemplo, puedes cambiar el directorio personal, el shell o la pertenencia a grupos de un usuario.

Cambiar el directorio personal:

sudo usermod -d /home/new_john john
sudo mv /home/john /home/new_john

Bloquear o desbloquear una cuenta de usuario:

  • Bloquea la cuenta: sudo passwd -l john
  • Desbloquea la cuenta: sudo passwd -u john

Salida de ejemplo (bloqueo de cuenta):

passwd: password expiry information changed.


Eliminar un usuario

Para eliminar un usuario, usa el comando deluser. También puedes eliminar su directorio personal y los archivos asociados.

Comando de ejemplo:

sudo deluser --remove-home john

Salida de ejemplo:

Looking for files to backup/remove ...
Removing files ...
Removing user `john' ...
Warning: group `john' has no more members.
Done.


Gestionar grupos

Los grupos son una forma de organizar a los usuarios y asignar permisos colectivos. Cada usuario puede pertenecer a varios grupos.

Crear y gestionar grupos

Para crear un grupo nuevo, usa el comando addgroup.

Comando de ejemplo:

sudo addgroup developers

Salida de ejemplo:

Adding group `developers' (GID 1002) ...
Done.

Para eliminar un grupo:

sudo delgroup developers

Añadir usuarios a grupos

Para añadir un usuario a un grupo, usa el comando usermod con la opción -aG.

Comando de ejemplo:

sudo usermod -aG developers john

Verificar la pertenencia a grupos:

groups john

Salida de ejemplo:

john : john developers

Esto muestra que john pertenece a los grupos john y developers.


Comprender los permisos de archivos y directorios

Los permisos de archivos de Linux son cruciales para controlar el acceso a archivos y directorios. Los permisos se definen para tres categorías: Propietario, Grupo, y Otros.

Tipos de permisos

Cada categoría tiene tres tipos de permisos:

  • Lectura (r): permite ver el contenido de los archivos o listar el contenido de los directorios.
  • Escritura (w): permite modificar el contenido de los archivos o crear/eliminar archivos en un directorio.
  • Ejecución (x): permite ejecutar archivos ejecutables o acceder a directorios.

Ejemplo:

Usa ls -l para ver los permisos de archivo:

ls -l /home/john

Salida de ejemplo:

-rw-r--r-- 1 john john 4096 Mar 21 14:00 file.txt

  • rw-: el propietario (john) tiene permisos de lectura y escritura.
  • r--: el grupo (john) tiene permisos de solo lectura.
  • r--: otros tienen permisos de solo lectura.

Cambiar permisos

Usa el comando chmod para modificar los permisos.

Comandos de ejemplo:

  • Concede permiso de ejecución al propietario: chmod u+x file.txt
  • Quita el permiso de escritura para otros: chmod o-w file.txt

Usar valores numéricos:

Los permisos también se pueden establecer con valores numéricos:

chmod 755 file.txt: permisos completos para el propietario, lectura/ejecución para el grupo y otros.


Comprender los permisos numéricos (755, 777, 744)

Los permisos de Linux se pueden representar numéricamente, donde cada dígito corresponde a un nivel de permiso específico:

Estructura de los permisos numéricos:

Cada permiso numérico consta de tres dígitos:

  • Primer dígito: permisos para el propietario.
  • Segundo dígito: permisos para el grupo.
  • Tercer dígito: permisos para otros.

Cada dígito se calcula según los siguientes valores:

  • 4: lectura (r)
  • 2: escritura (w)
  • 1: ejecución (x)

La suma de estos valores determina el nivel de permiso para cada categoría.

Permisos numéricos comunes:

  1. 777: permisos completos para todos (lectura, escritura, ejecución).
    • Propietario: rwx
    • Grupo: rwx
    • Otros: rwx
    • Caso de uso: rara vez se usa por razones de seguridad, pero puede aplicarse a directorios temporales como /tmp.
  2. 755: permisos completos para el propietario, permisos de lectura y ejecución para el grupo y otros.
    • Propietario: rwx
    • Grupo: r-x
    • Otros: r-x
    • Caso de uso: habitual para archivos ejecutables o directorios.
  3. 744: permisos completos para el propietario, solo lectura para el grupo y otros.
    • Propietario: rwx
    • Grupo: r--
    • Otros: r--
    • Caso de uso: habitual para archivos privados.

Ejemplo:

Para establecer los permisos de un script en 755:

chmod 755 script.sh

Salida de ejemplo:

-rwxr-xr-x 1 john john 4096 Mar 21 14:00 script.sh

Gestión de la propiedad

Cambia la propiedad con el comando chown.

Comando de ejemplo:

sudo chown john:developers file.txt

Esto establece el propietario en john y el grupo en developers.

Salida de ejemplo:

-rw-r--r-- 1 john developers 4096 Mar 21 14:00 file.txt


Usar Sudo para la escalada de privilegios

El comando sudo permite a los usuarios ejecutar comandos con privilegios elevados. Para conceder acceso sudo a un usuario, añádelo al grupo sudo.

Comando de ejemplo:

sudo usermod -aG sudo john

Verificar el acceso Sudo:

sudo -l -U john

Salida de ejemplo:

User john may run the following commands on this host:
    (ALL : ALL) ALL

Buenas prácticas para proteger las cuentas de usuario

  • Aplica políticas de contraseñas seguras:
    Usa passwd para establecer la caducidad de la contraseña: sudo passwd -e john
  • Limita el acceso Sudo:
    Concede privilegios sudo solo a usuarios de confianza.
  • Desactiva el inicio de sesión como root:
    Edita el archivo de configuración de SSH:
sudo nano /etc/ssh/sshd_config 

Establece:

PermitRootLogin no
  • Usa claves SSH para la autenticación:
    Sustituye el inicio de sesión con contraseña por claves SSH.
  • Supervisa la actividad de los usuarios:
    Usa last o who para rastrear la actividad de inicio de sesión:
last

Explicación de la salida

uadmin   pts/1   192.168.255.48   Fri Mar 21 13:55   still logged in
uadmin   pts/0   192.168.255.48   Fri Mar 21 13:54   still logged in
uadmin   pts/1   192.168.255.48   Fri Mar 21 01:49 - 08:19  (06:29)
uadmin   pts/0   192.168.255.48   Fri Mar 21 00:53 - 08:19  (07:26)
reboot   system boot   6.8.0-1021-azure   Fri Mar 21 00:22   still running


Análisis línea por línea

Inicio de sesión de usuario: uadmin pts/1 192.168.255.48 Fri Mar 21 13:55 still logged in

  • uadmin: el nombre de usuario del usuario que inició sesión.
  • pts/1: la sesión de pseudoterminal usada para el inicio de sesión. Los pseudoterminales (pts) son terminales virtuales, que normalmente se crean cuando los usuarios inician sesión mediante SSH.
  • 192.168.255.48: la dirección IP de la máquina remota desde la que se conectó el usuario.
  • Fri Mar 21 13:55: la fecha y la hora en que el usuario inició sesión.
  • still logged in: indica que el usuario está actualmente conectado y activo.
ColumnaSignificado
Nombre de usuarioNombre del usuario o evento (uadmin, reboot).
TerminalSesión de pseudoterminal (pts/X) o evento del sistema (system boot).
Host remoto/IPDirección IP o nombre de host de la máquina remota que inicia la conexión.
Fecha/hora de inicio de sesiónFecha y hora en que comenzó el inicio de sesión o el evento.
Hora de cierre de sesiónFecha y hora en que terminó la sesión (si corresponde).
DuraciónTiempo total que duró la sesión (si corresponde).
Estado de la sesiónEstado actual de la sesión (still logged in, still running).

Comandos adicionales para obtener información

  • Mostrar los usuarios conectados actualmente: who
  • Salida de ejemplo:
uadmin pts/1 2023-03-21 13:55 (192.168.255.48) 
uadmin pts/0 2023-03-21 13:54 (192.168.255.48)
  • Comprobar el tiempo de actividad del sistema: uptime
  • Salida de ejemplo:
14:15:32 up 13:53, 2 users, load average: 0.10, 0.12, 0.15

Conclusión

Gestionar usuarios, grupos y permisos es una habilidad fundamental para los administradores de Ubuntu Server. Al dominar estas tareas, puedes proteger tu servidor, evitar el acceso no autorizado y mejorar la eficiencia operativa.


Próximo tutorial: Conceptos básicos de redes para Ubuntu Server

En el próximo tutorial, cubriremos  los conceptos básicos de redes para Ubuntu Server, incluida la configuración de interfaces de red, la asignación de IP estáticas, la resolución de problemas de conectividad de red y el uso de netplan de Ubuntu para tareas de red. Mantente atento para obtener información práctica que optimice la configuración de red de tu servidor.