2.1 – Usuarios, permisos y el impostor legal sudo

Un sistema operativo multiusuario es como un edificio donde vive mucha gente. Cada persona tiene su habitación y sus cosas. Sin permisos, cualquiera podría:

  • Abrirse la nevera de otro.
  • Pagar las facturas del vecino (aunque le convenga).
  • Borrar carpetas del sistema “sin querer”.

Linux nació para compartir la casa de forma civilizada.

[La regla de oro]
El usuario normal puede romper su habitación; el superusuario puede romper el edificio entero.

¿Qué es el superusuario (root)?

Root es ese administrador que tiene todas las llaves, incluidas las que abren las puertas del sistema. Puede instalar programas, cambiar configuraciones, borrar sistemas de archivos y mirar cualquier carpeta.


¿Qué es sudo realmente?

“Substitute User DO” (o “superuser do”).
Traducción humana: Haz esto como si yo fuera el administrador.

Sudo no da poderes mágicos. Solo te presta el disfraz de root por unos segundos, si el sistema confía en ti, según lo que aparezca en el archivo /etc/sudoers.

Además:

  • Sudo pide contraseña porque necesita asegurarse de que eres tú.
  • Guarda un registro de lo que haces (auditoría)
  • Puede limitar qué comandos exactos puede usar cada usuario.

Ese toque de control es lo que hace que sudo sea más seguro que loguearse directamente como root.


Explicación práctica del archivo /etc/sudoers

En el documento sudoers podemos dar permisos para utilizar todos los comando o algunos en concreto.

usuario maquina=(usuario_objetivo) comandos

Ejemplo clásico:

antonio ALL=(ALL:ALL) ALL

Traducción informal: Antonio puede usar sudo para hacer cualquier cosa, desde cualquier sitio, como cualquier usuario.

Significado de ALL=(ALL:ALL) ALL

Piensa en cada ALL como una variable diferente en una cadena de permisos.
El archivo /etc/sudoers sigue esta estructura general:

usuario hosts = (usuarios_objetivo : grupos_objetivo) comandos

Primer ALL → Dónde puede usar sudo

ALL =

Esto significa:

“Desde cualquier máquina o terminal donde este usuario inicie sesión”.

En aulas, servidores, SSH, local… no importa.
Significa sin restricciones por host.


(ALL:ALL) → Quién puede llegar a ser

Este es el trozo más interesante.

(ALL:ALL) Se divide en dos partes:

==Primer ALL (antes de los dos puntos)==

Es la lista de usuarios objetivo.

Traducción:

“Puede usar sudo para convertirse en cualquier usuario del sistema.”

No solo root: también www-data, postgres, backup, etc.

Por ejemplo:

sudo -u postgres psql

==Segundo ALL (tras los dos puntos)==

Es la lista de grupos objetivo.

Significa:

“Puede ejecutar comandos como miembro de cualquier grupo.”

No siempre se usa, pero cuando está, implica libertad total en cómo sudo crea el entorno del comando.

En resumen:

Tiene permiso para ejecutar comandos como cualquier usuario y cualquier grupo.


Último ALL → Qué comandos puede ejecutar

... ALL

Es la lista de comandos permitidos con sudo.

Este último ALL significa:

“Puede ejecutar cualquier comando con sudo.”

Incluyendo:

  • Administración del sistema
  • Manipulación de archivos críticos
  • Instalación de paquetes
  • Gestión de usuarios
  • Servicios
  • Montaje/desmontaje
  • Cambios en red
  • Etc.

[!NOTA]
Es la carta blanca total.—

En distros como Ubuntu, pertenecer al grupo sudo ya te da superpoderes. Puedes inspeccionar el grupo así:





getent group sudo

O, de forma artesanal:





cat /etc/group | grep sudo

También puedes pedirle al sistema: “Oye, ¿quién puede ejecutar sudo?” con:





sudo -l -U nombre_de_usuario

Esto te dice exactamente qué puede hacer ese usuario con sudo.

En resumen privilegiado:
— Usuarios declarados en /etc/sudoers
— Usuarios declarados en /etc/sudoers.d/*
— Usuarios que pertenecen al grupo sudo (o wheel, según la distro)

Crear usuarios sin poderes especiales

Comandos básicos:

Crear usuario

sudo adduser juan

El sistema pedirá contraseña y datos opcionales.
Por defecto, juan no tiene poderes administrativos.

Ver su grupo

id juan

Verán que no pertenece al grupo sudo.

Cambiar a ese usuario

su juan

Ahora puedes intentar un comando de administrador:

sudo apt update

Te dirá que juan no está en el archivo sudoers.

Esa frase es el equivalente a “no tienes la llave del edificio”.


Crear un usuario con permisos de sudo

Hay dos formas:

A) Añadirlo al grupo sudo

sudo usermod -aG sudo juan

Ahora juan puede usar sudo después de cerrar sesión y volver a entrar.

B) Darle permisos específicos (ideal para clase avanzada)

Editar con el editor seguro:

sudo visudo

Y añadir algo como:

juan ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl restart apache2

Ahora juan solo puede actualizar paquetes y reiniciar Apache.
Esto crea un usuario “Hawkeye”: no tiene superpoderes totales, pero sí un par de flechas especiales.

Comandos clave

  • Crear usuario: sudo adduser nombre
  • Cambiar su grupo: sudo usermod -aG sudo nombre
  • Cambiar de usuario: su - nombre
  • Editar permisos: sudo visudo
  • Ver grupos: id nombre

Archivos importantes

  • /etc/passwd → lista de usuarios.
  • /etc/group → lista de grupos.
  • /etc/sudoers → permisos privilegiados.
  • /var/log/auth.log → historial de uso de sudo.

Comandos para la creación de usuarios y grupos

1. Crear usuario con adduser

adduser es amigable, pregunta cosas, rellena la casa del usuario y pone alfombra.

Ejemplos:

Crear usuario normal

sudo adduser mario

Crear usuario y saltarse las preguntas (solo contraseña):

sudo adduser --disabled-password mario

Después puedes activar contraseña con:

sudo passwd mario

Crear usuario sin carpeta home. Esto es útil para cuentas de servicio.

sudo adduser --no-create-home servidorweb

Crear usuario en un grupo específico

sudo adduser juana profesores


2. Crear usuario con useradd (el técnico)

useradd es seco, directo… y totalmente predecible, ideal para scripts y prácticas avanzadas.

Crear usuario con home y shell

sudo useradd -m -s /bin/bash ana

Crear usuario sin home

sudo useradd -M bot

Crear usuario con grupo primario específico

sudo useradd -g profesores laura

Crear usuario con grupos adicionales

sudo useradd -G sudo,devops carlos

Crear usuario con fecha de caducidad

Esto es genial para usuarios temporales.

sudo useradd -m -e 2025-12-31 invitado

Puedes ver la caducidad con:

sudo chage -l invitado

Crear usuario con comentario

sudo useradd -m -c "Laura Martínez" laura


GESTIÓN DE CONTRASEÑAS

La herramienta clave aquí es passwd.

Cambiar o poner contraseña a un usuario

sudo passwd juan

Desactivar la contraseña (no puede iniciar sesión)

sudo passwd -l juan

Activar contraseña bloqueada

sudo passwd -u juan

Forzar cambio de contraseña al siguiente inicio

Esto es ideal para alumnos nuevos:

sudo passwd -e juan

Establecer políticas de contraseñas

Con chage puedes ajustar tiempos.

Ejemplos:

Caducidad de contraseña a 90 días

sudo chage -M 90 juan

Periodo mínimo entre cambios: 1 día

sudo chage -m 1 juan

Avisar 7 días antes de caducar

sudo chage -W 7 juan

Bloquear cuenta si no usa su cuenta en X días

sudo chage -I 30 juan


GESTIÓN DE GRUPOS

Crear grupo

sudo groupadd profesores

Añadir usuario a grupo

sudo usermod -aG profesores juan

Sacar usuario de un grupo

Para ver grupos primero:

groups juan

Eliminarlo del grupo:

sudo gpasswd -d juan profesores


MODIFICAR USUARIOS YA EXISTENTES

Cambiar su shell

sudo usermod -s /bin/bash mario

Cambiar su home (se mueve manualmente)

sudo usermod -d /home/nuevo_mario mario

Cambiar nombre del usuario

sudo usermod -l nuevo_nombre viejo_nombre

Cambiar el UID o GID

(para nivel pro)

sudo usermod -u 1500 mario sudo usermod -g staff mario


Ver en qué grupos está un usuario

El método rápido, casi intuitivo:





groups nombreusuario

Te devuelve todos los grupos a los que pertenece, con una lista directa, estilo:





nombreusuario : grupo1 grupo2 grupo3

Si quieres la versión más formal:





id nombreusuario

Te muestra UID, GID y todos los grupos extra.

Y si estás logueado como ese usuario, basta con:





groups

Ver qué usuarios pertenecen a un grupo

Esta es la operación inversa: mirar dentro del grupo para ver la lista de miembros.

Forma clara:





getent group nombredelgrupo

Salida típica:





profesores:x:1003:antonio,juan,marta

También puedes mirar el archivo clásico:





cat /etc/group | grep nombredelgrupo

Y si el grupo tiene muchos miembros, puedes hacerlo más legible:





getent group nombredelgrupo | tr ':' '\n'

El detalle curioso: grupos primarios vs secundarios

Cada usuario tiene:

  • un grupo primario (su GID principal)
  • varios grupos secundarios

id te los marca con claridad:





id alumna1

Salida:





uid=1001(alumna1) gid=1001(alumna1) groups=1001(alumna1),1002(sudo),1003(profesores)

Cómo ver si un usuario tiene permisos indirectos en un grupo

Linux no tiene una orden directa tipo “¿quién tiene permisos en esta carpeta vía grupo?”, pero con la trilogía:

  1. ver el grupo dueño de la carpeta
  2. ver los permisos
  3. listar los usuarios del grupo

Ya puedes reconstruir la escena del crimen digital.

Ejemplo:





ls -ld carpeta

Resultado:





drwxrwx--- 2 root profesores 4096 ...

Luego:





getent group profesores

Obtienes la lista real de personas con acceso.