Cerramos el Módulo 4 con una lista de deudas, y esta lección salda la primera y la más incómoda: svc-tramontana existe «por arte de magia» y el grupo tramontana no existe en absoluto. Has estado escribiendo chown svc-tramontana:tramontana sobre ficheros cuyo grupo nadie había creado nunca. Eso hoy se acaba. Vas a ver qué es de verdad una identidad en Linux —un número, no un nombre—, qué ficheros son la fuente de la verdad y qué contiene cada campo, cómo se crean cuentas de persona y cuentas de servicio (que no se parecen en nada), y por qué el error más caro de todo el módulo cabe en una letra que falta: usermod -G en lugar de usermod -aG.
Contenido
- El modelo de identidad: UID, GID y grupos suplementarios
- Los cuatro ficheros de la verdad, campo a campo
- Tipos de cuenta y el rango de UID de
/etc/login.defs - Crear usuarios:
useradd,addusery/etc/skel - Contraseñas: fijar, bloquear y el significado de
!y* - Modificar y borrar cuentas, y los ficheros huérfanos
- Caducidad de cuentas con
chage - Grupos: crear, modificar y por qué hay que reabrir sesión
- Cuentas de servicio: por qué la app nunca corre como root
- Auditoría: quién es quién y quién ha entrado
- Caso Tramontana: saldar la deuda del módulo anterior
- El modelo de identidad: UID, GID y grupos suplementarios
El kernel no sabe qué es operador. El kernel solo maneja números:
- UID (User ID): identifica al usuario. El propietario de un fichero es un número guardado en el inodo, no una cadena.
- GID (Group ID): identifica un grupo. Cada usuario tiene un grupo primario (el que hereda un fichero nuevo que crea) y cero o más grupos suplementarios.
Los nombres solo existen para nuestra comodidad, y la traducción número→nombre la hace la librería del sistema leyendo /etc/passwd y /etc/group. Por eso, si borras un usuario, ls -l empieza a mostrar números crudos: el fichero conserva el UID 1003 aunque ya nadie se llame así.
Léelo así: operador es el 1000, su grupo primario es operador (1000) y pertenece además a adm y sudo como suplementarios. Esa distinción importa:
El primario se define en el campo 4 de /etc/passwd y es el que se asigna a los ficheros que el usuario crea; los suplementarios se definen en el campo 4 de /etc/group y solo amplían el acceso. El grupo efectivo de un proceso puede cambiarse en caliente con newgrp o sg.
En Ubuntu, por defecto cada usuario recibe un grupo propio con su mismo nombre (esquema UPG, User Private Group). No es capricho: permite trabajar con umask 002 sin exponer los ficheros a media máquina, porque «el grupo» es solo tú.
- Los cuatro ficheros de la verdad, campo a campo
/etc/passwd — quién existe
Siete campos separados por :. Es legible por todo el mundo (644) porque cualquier proceso necesita traducir UID a nombre para un simple ls -l.
$ grep -E '^(root|operador|svc-tramontana):' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operador:x:1000:1000:Operador Tramontana,,,:/home/operador:/bin/bash
svc-tramontana:x:997:1002:Servicio Tramontana Reservas:/opt/tramontana:/usr/sbin/nologin| # | Campo | Ejemplo | Notas |
|---|---|---|---|
| 1 | Nombre de login | operador |
Único; en minúsculas por convención |
| 2 | Contraseña | x |
La x significa «está en /etc/shadow» |
| 3 | UID | 1000 |
Lo que de verdad importa |
| 4 | GID primario | 1000 |
Apunta a /etc/group |
| 5 | GECOS | Operador Tramontana,,, |
Nombre real, despacho, teléfonos; lo edita chfn |
| 6 y 7 | Home y shell | /home/operador, /bin/bash |
El home puede no existir en cuentas de sistema; /usr/sbin/nologin para quien no debe entrar |
/etc/shadow — el secreto
Nueve campos. Permisos 640, propiedad root:shadow: legible por root y por el grupo shadow, invisible para el resto. Ahí está el hash, y un hash legible por cualquiera es un hash que alguien acabará rompiendo con una GPU.
$ sudo grep -E '^(operador|svc-tramontana):' /etc/shadow
operador:$y$j9T$Qk3rP0mZ7uY2xB1c$Fq8sT...ZR1:20310:0:90:7:14::
svc-tramontana:!:20310:0:99999:7:::| # | Campo | Valor del ejemplo | Significado |
|---|---|---|---|
| 1 | Usuario | operador |
Enlaza con passwd |
| 2 | Hash | $y$j9T$... |
Ver abajo |
| 3 | Último cambio | 20310 |
Días desde 1970-01-01 |
| 4 y 5 | Mínimo y máximo | 0 / 90 |
Días antes de poder cambiarla y días de validez |
| 6 y 7 | Aviso e inactividad | 7 / 14 |
Aviso previo y gracia tras caducar antes de inhabilitar |
| 8 y 9 | Caducidad de cuenta y reservado | (vacíos) | Fecha absoluta en días desde 1970; el 9 no se usa |
El hash tiene formato $id$parámetros$sal$hash. En Ubuntu 24.04 el algoritmo por defecto es yescrypt ($y$), que sustituyó a SHA-512 ($6$) por ser resistente a ataques con GPU y ASIC gracias a su coste en memoria:
| Prefijo | Algoritmo | Estado |
|---|---|---|
$y$ |
yescrypt | Por defecto en Ubuntu 24.04 |
$6$ |
SHA-512 | Aún válido; heredado |
! o !$y$... |
Cuenta bloqueada | El hash puede seguir debajo |
* |
Sin contraseña utilizable | Típico de cuentas de sistema |
| (vacío) | Sin contraseña: entra quien sea | Peligro real, corrígelo ya |
/etc/group y /etc/gshadow
$ getent group tramontana adm sudo
tramontana:x:1002:operador,luis,svc-tramontana
adm:x:4:syslog,operador
sudo:x:27:operadorCuatro campos: nombre, contraseña (x), GID y lista de miembros suplementarios. Ojo: quien tenga ese grupo como primario no aparece en esa lista. /etc/gshadow (640, root:shadow) guarda la contraseña del grupo —una rareza que casi nadie usa— y los administradores del grupo, que pueden añadir miembros con gpasswd sin ser root.
- Tipos de cuenta y el rango de UID de
/etc/login.defs
/etc/login.defs| Tipo | UID | Ejemplos | Rasgos |
|---|---|---|---|
| Superusuario | 0 | root |
Salta toda comprobación de permisos |
| Sistema / servicio | 1–999 | daemon, syslog, svc-tramontana (997) |
Sin login, sin caducidad, creadas con -r |
| Persona | ≥ 1000 | operador (1000), luis (1001) |
Home, shell, contraseña, caducidad |
nobody |
65534 | nobody |
Identidad mínima para procesos sin privilegio |
Quien decide esos rangos es /etc/login.defs:
$ grep -E '^(UID_MIN|UID_MAX|SYS_UID_MIN|SYS_UID_MAX|ENCRYPT_METHOD|UMASK|PASS_MAX_DAYS)' /etc/login.defs
PASS_MAX_DAYS 99999
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 100
SYS_UID_MAX 999
ENCRYPT_METHOD YESCRYPT
UMASK 022Lo importante: UID 0 es root no por el nombre, sino por el número. Si creas una segunda cuenta con UID 0, tienes dos roots y ninguna auditoría que los distinga en el inodo. Nunca lo hagas.
- Crear usuarios:
useradd, adduser y /etc/skel
useradd, adduser y /etc/skeluseradd es la herramienta de bajo nivel de la suite shadow: hace exactamente lo que le pides, ni una cosa más. Sus opciones clave:
| Opción | Efecto |
|---|---|
-m |
Crea el home y copia /etc/skel (sin ella, no hay home) |
-d RUTA |
Home distinto del predeterminado |
-s SHELL |
Shell de login |
-u UID |
UID concreto |
-g GRUPO |
Grupo primario |
-G g1,g2 |
Grupos suplementarios |
-c "TEXTO" |
Campo GECOS; -N evita crear el grupo propio |
-r |
Cuenta de sistema: UID del rango bajo, sin caducidad, sin home salvo -m |
$ sudo useradd -m -s /bin/bash -c "Luis Ferrer,Desarrollo,,," luis
$ sudo passwd luis
Nueva contraseña:
Vuelva a escribir la nueva contraseña:
passwd: contraseña actualizada correctamenteadduser es un script en Perl de Debian que envuelve a useradd y hace lo que un humano espera: elige el UID libre, crea el home con permisos correctos, crea el grupo propio, copia /etc/skel, pregunta la contraseña y rellena el GECOS de forma interactiva. Comparación honesta:
| Aspecto | useradd |
adduser |
|---|---|---|
| Portabilidad | Universal en Linux | Solo Debian/Ubuntu |
| Interactivo | No | Sí (ideal a mano) |
| Home | Solo con -m |
Siempre |
| Contraseña | Aparte, con passwd |
La pide |
| Scripts | Sí, esta es la buena | Requiere --disabled-password y cuidado |
Regla práctica: a mano, adduser; en un script, useradd, porque su comportamiento no depende de un fichero de configuración distribuido.
/etc/skel (que en Ubuntu contiene .bashrc, .profile y .bash_logout) es la plantilla del home: todo lo que hay dentro se copia al crear la cuenta con -m. Es el sitio para imponer un .bashrc corporativo o el prompt rojo de producción del Módulo 3.
- Contraseñas: fijar, bloquear y el significado de
! y *
! y *passwd # la propia: pide la actual antes de cambiarla
sudo passwd luis # root cambia la de cualquiera sin saber la anterior
echo 'luis:UnaClaveLargaYUnica' | sudo chpasswd # en lote, no interactivo
sudo passwd -e luis # forzar cambio en el próximo acceso (= chage -d 0)Bloquear y desbloquear:
sudo passwd -l luis # antepone '!' al hash
sudo passwd -S luis # -> luis L 2026-08-18 0 99999 7 -1
sudo passwd -u luis # quita el '!' y restaura el hash originalLa L de passwd -S es «locked»; P sería contraseña utilizable y NP sin contraseña, que es una emergencia.
| Contenido del campo 2 | Significado | ¿Se puede volver atrás? |
|---|---|---|
$y$... |
Contraseña válida | — |
!$y$... |
Bloqueada: el hash está intacto debajo | Sí, passwd -u |
! |
Bloqueada y sin hash que restaurar | No, hay que fijar una nueva |
* |
Nunca tuvo contraseña; login por contraseña imposible | No aplica |
| (vacío) | Entra sin escribir nada | Corrígelo inmediatamente |
usermod -L hace lo mismo que passwd -l sobre el hash. La diferencia práctica no está entre ellos, sino en lo que ninguno de los dos hace: bloquear la contraseña no impide entrar por clave SSH, ni mata las sesiones abiertas. Para una baja de personal de verdad hace falta la combinación completa:
sudo usermod -L -e 1 -s /usr/sbin/nologin luis # bloquea, caduca la cuenta y quita el shell
sudo pkill -u luis # cierra lo que tuviera abierto-e 1 fija la caducidad al 2 de enero de 1970: la cuenta queda expirada y PAM rechaza el acceso venga por donde venga.
- Modificar y borrar cuentas, y los ficheros huérfanos
usermod cambia lo que ya existe. Y aquí está el error clásico del módulo:
# MAL: sustituye TODOS los grupos suplementarios por 'tramontana'
sudo usermod -G tramontana operador
# BIEN: añade sin tocar los que ya tenía
sudo usermod -aG tramontana operadorSin la -a (append), operador sale de sudo y de adm en el mismo instante. Si además la sesión root estaba cerrada, acabas de perder la administración de la máquina y toca arrancar en modo de recuperación. Comprueba siempre antes y después con id.
Otros usos habituales:
sudo usermod -c "Luis Ferrer,Desarrollo,,," luis # GECOS
sudo usermod -l lferrer luis # renombrar login (no mueve el home)
sudo usermod -d /home/lferrer -m lferrer # mover el home con su contenidoBorrar:
sudo userdel luis # borra la cuenta, conserva el home
sudo userdel -r luis # borra también el home y el buzón de correouserdel -r no encuentra lo que el usuario dejó fuera de su home: un fichero en /srv, un cron, un temporal. Esos ficheros quedan con un UID sin nombre y, peor aún, el siguiente usuario que reciba ese UID heredará su propiedad. Auditoría obligatoria antes de reasignar:
$ sudo find / -xdev \( -nouser -o -nogroup \) 2>/dev/null
$ sudo find /srv /opt /var -xdev -uid 1001 2>/dev/null
/srv/tramontana/backups/temporales/informe-luis.csvAviso de cumplimiento. Las altas y bajas de personal no son una tarea técnica aislada: en un entorno real deben seguir un procedimiento aprobado (quién autoriza, en qué plazo se revoca el acceso, qué se hace con los ficheros del empleado, que pueden contener datos personales de huéspedes). Documenta cada alta y cada baja con fecha y autorizante, y que el responsable de seguridad o de cumplimiento (RGPD) valide el procedimiento antes de aplicarlo.
- Caducidad de cuentas con
chage
chagechage maneja los campos 3 a 8 de /etc/shadow sin que tengas que contar días desde 1970.
$ sudo chage -l operador
Último cambio de contraseña : ago 18, 2026
La contraseña caduca : nov 16, 2026
Contraseña inactiva : nov 30, 2026
La cuenta caduca : nunca
Número de días máximo entre cambio de contraseña : 90| Opción | Efecto |
|---|---|
-M 90 |
Validez máxima de la contraseña |
-m 1 |
Mínimo entre cambios (evita rotarla cinco veces para volver a la misma) |
-W 7 |
Días de aviso |
-I 14 |
Días de gracia tras caducar |
-E 2026-12-31 |
Fecha de caducidad de la cuenta (contratos temporales) |
-d 0 |
Fuerza el cambio en el próximo inicio de sesión |
La política de contraseñas de verdad —longitud mínima, complejidad, diccionario, historial— no vive aquí: la impone PAM con pam_pwquality, y es materia de 06-06. chage solo pone los plazos.
- Grupos: crear, modificar y por qué hay que reabrir sesión
sudo groupadd -g 1002 tramontana # GID explícito, reproducible entre máquinas
sudo groupmod -n tramontana-app tramontana # renombrar
sudo groupdel grupo-viejo # falla si es primario de alguien
sudo gpasswd -a luis tramontana # añadir un miembro
sudo gpasswd -d luis tramontana # quitarlo
sudo gpasswd -A operador tramontana # 'operador' puede administrar el grupo sin ser rootgpasswd -a y usermod -aG hacen lo mismo; gpasswd tiene la ventaja de no admitir el error de la -a olvidada, porque su sintaxis siempre es aditiva.
Y ahora el detalle que hace perder tardes enteras: añadir a alguien a un grupo no afecta a sus sesiones abiertas.
$ sudo usermod -aG tramontana operador
$ id operador # la base de datos: ya sale 1002(tramontana)
$ id # TU sesión: todavía no sale
uid=1000(operador) gid=1000(operador) grupos=1000(operador),4(adm),27(sudo)La razón es que los grupos suplementarios se fijan en el momento del login, quedan grabados en las credenciales del proceso y se heredan a los hijos. Ningún fichero de configuración va a cambiar un proceso que ya está corriendo. Las salidas:
newgrp tramontana # abre un subshell con el grupo nuevo (solución de emergencia)
exec su - "$USER" # relogin limpio en el sitioLo correcto es cerrar la sesión y volver a entrar. Y lo mismo vale para los servicios: si cambias los grupos de svc-tramontana, hay que reiniciar el servicio, no basta con recargar.
- Cuentas de servicio: por qué la app nunca corre como root
Una aplicación expuesta en el puerto 8080 es la puerta de entrada más probable a tu servidor. Si corre como root, cualquier fallo de ejecución remota es game over: la máquina entera. Si corre como svc-tramontana, el atacante hereda una identidad que no puede leer /etc/shadow, no puede escribir en /etc, no puede instalar nada y no puede leer los ficheros de otros usuarios.
Lo que distingue a una cuenta de servicio:
- UID de sistema (
-r, por debajo de 1000) y sin caducidad: una cuenta de servicio que caduca tumba el servicio a las 3 de la madrugada. - Sin shell de login:
/usr/sbin/nologin(imprime un mensaje y sale con error) o/bin/false. - Sin contraseña utilizable (
!o*enshadow) y sin home propio: normalmente apunta al directorio de la aplicación.
- Auditoría: quién es quién y quién ha entrado
| Comando | Responde a |
|---|---|
id [usuario] |
UID, GID y grupos según la base de datos |
groups [usuario] |
Solo los nombres de grupo |
getent passwd luis |
Consulta todas las fuentes (/etc/passwd, LDAP…), no solo el fichero |
getent group tramontana |
Lo mismo para grupos |
who / w |
Quién está conectado ahora; w añade carga y qué ejecuta |
last -n 5 |
Historial de accesos (lee /var/log/wtmp) |
lastlog |
Último acceso de cada cuenta; delata cuentas muertas |
$ w | tail -2
operador pts/0 10.0.2.1 09:02 0.00s 0.09s 0.01s w
luis pts/1 10.0.2.1 08:47 12:03 0.04s 0.04s -bashgetent es siempre preferible a grep /etc/passwd: el día que la empresa añada un directorio corporativo, grep mentirá y getent seguirá diciendo la verdad.
- Caso Tramontana: saldar la deuda del módulo anterior
Estado de partida en srv-tramontana: operador (1000) y luis (1001) existen; svc-tramontana y el grupo tramontana no, aunque medio módulo hablaba de ellos. Lo arreglamos en orden, y con copia previa de los ficheros de identidad tal como manda la convención del curso.
sudo cp -a /etc/passwd /etc/passwd.bak-$(date +%F) # copia previa, como siempre
sudo cp -a /etc/group /etc/group.bak-$(date +%F)
# 1) El grupo compartido, con GID fijo para que coincida en todas las máquinas
sudo groupadd -g 1002 tramontana
# 2) La cuenta de servicio: sistema, sin shell, sin home propio, sin contraseña
sudo useradd -r -u 997 -g tramontana \
-d /opt/tramontana -M \
-s /usr/sbin/nologin \
-c "Servicio Tramontana Reservas" svc-tramontana
# 3) Las personas que trabajan con la aplicación entran en el grupo
sudo usermod -aG tramontana operador
sudo usermod -aG tramontana luis-M impide crear el home: /opt/tramontana ya existe y no queremos que useradd le vuelque /etc/skel encima. Verificamos antes de tocar nada más:
$ getent passwd svc-tramontana && getent group tramontana
svc-tramontana:x:997:1002:Servicio Tramontana Reservas:/opt/tramontana:/usr/sbin/nologin
tramontana:x:1002:operador,luisAhora la propiedad de los directorios, que hasta hoy era una promesa:
sudo chown -R svc-tramontana:tramontana /opt/tramontana
sudo chown -R operador:tramontana /srv/tramontana/backups
sudo chmod -R u=rwX,g=rX,o= /opt/tramontana
sudo chmod -R u=rwX,g=rwX,o= /srv/tramontana/backups
sudo chmod 2770 /opt/tramontana/shared/uploads
ls -ld /opt/tramontana /opt/tramontana/app /srv/tramontana/backupsdrwxr-x--- 5 svc-tramontana tramontana 4096 ago 18 09:20 /opt/tramontana lrwxrwxrwx 1 svc-tramontana tramontana 22 ago 12 18:02 /opt/tramontana/app -> releases/3.2.1 drwxrwx--- 5 operador tramontana 4096 ago 18 04:20 /srv/tramontana/backups
Fíjate en el o=: nadie fuera del grupo ve nada, aplicando la convención de «grupo compartido en vez de permisos a otros». Ese 2 de 2770 en uploads es el bit SGID, que hace que todo lo que se cree dentro pertenezca al grupo tramontana sin depender de quién lo cree; lo desmenuzamos en la lección siguiente.
Y la documentación, que es parte del trabajo:
sudo tee -a /opt/tramontana/HISTORIAL >/dev/null <<'FIN'
2026-08-18 Formalización de identidades (operador)
- groupadd -g 1002 tramontana ; useradd -r -u 997 ... svc-tramontana
- operador y luis añadidos a 'tramontana' (requiere reabrir sesión)
- chown svc-tramontana:tramontana /opt/tramontana ; operador:tramontana en backups
FINErrores Comunes y Consejos
usermod -Gsin-a. El error más caro de la lección: sustituye la lista entera y puede sacarte desudo. Antes de tocar grupos, guarda la salida deid usuario; después, compárala.- Esperar que un grupo nuevo funcione en la sesión actual. No pasará.
id usuarioconsulta la base de datos,ida secas consulta tu sesión. Cierra y abre sesión, y reinicia los servicios afectados. - Editar
/etc/passwdo/etc/shadowconnano. Usavipwyvipw -s(yvigrpara los grupos): bloquean el fichero y validan la sintaxis al salir. Unshadowcorrupto es un servidor donde no entra nadie. - Crear la cuenta de servicio con shell. Si
svc-tramontanatiene/bin/bash, cualquier vía que consiga ejecutar como él consigue una shell interactiva.nologinno es cosmética. - Confundir bloquear con deshabilitar.
passwd -lno impide el acceso por clave SSH. Para una baja:usermod -L -e 1 -s /usr/sbin/nologinypkill -u. Y no reutilices el UID de una cuenta borrada sin auditar antes confind -uid. - Consejo: fija los UID y GID de servicio (997, 1002) explícitamente y anótalos. El día que restaures una copia en otra máquina, los números tienen que coincidir o los permisos se descolocarán en bloque.
Ejercicios
- Alta completa de un becario. Crea la cuenta
becarioconuseradd: home propio, shell Bash, GECOS «Becario Operaciones», miembro suplementario detramontana, contraseña que deba cambiar en el primer acceso y caducidad de la cuenta el 31 de diciembre de 2026. Verifica todo sin abrir sesión con ella. - Diagnóstico de un desastre. Alguien ha ejecutado
sudo usermod -G tramontana operador. Describe el síntoma exacto que veráoperadoren su siguiente inicio de sesión, cómo lo confirmarías y cómo lo reparas si ya no tienessudo. - Auditoría de cuentas. Escribe un comando que liste, a partir de
/etc/passwd, únicamente las cuentas de persona (UID ≥ 1000, excluyendonobody) con su shell, y otro que detecte cuentas con contraseña vacía en/etc/shadow.
Soluciones
1.
sudo useradd -m -s /bin/bash -G tramontana -c "Becario Operaciones,,," becario
echo 'becario:Provisional.2026!' | sudo chpasswd
sudo chage -d 0 -E 2026-12-31 becario # -d 0 fuerza cambio; -E caduca la cuenta$ id becario
uid=1004(becario) gid=1004(becario) grupos=1004(becario),1002(tramontana)
$ sudo chage -l becario | grep cuenta
La cuenta caduca : dic 31, 2026Aquí -G sin -a es correcto, porque la cuenta se está creando y no hay grupos previos que perder. La -a solo importa en usermod.
2. El síntoma: operador inicia sesión con normalidad, pero cualquier sudo responde operador is not in the sudoers file. This incident will be reported., y además pierde el acceso de lectura a los logs que le daba adm. Confirmación:
Faltan 4(adm) y 27(sudo). Reparación con privilegios: sudo usermod -aG adm,sudo operador y reabrir sesión. Sin sudo y sin otra cuenta administradora, no hay atajo desde dentro: hay que reiniciar la VM, editar la entrada de GRUB para arrancar con init=/bin/bash, remontar la raíz con mount -o remount,rw / y ejecutar usermod -aG adm,sudo operador. Ese procedimiento de recuperación se ve a fondo en 07-01; que exista es precisamente la razón de que el acceso físico o a la consola de la VM sea, en sí mismo, acceso de administrador.
3.
$ awk -F: '$3 >= 1000 && $3 != 65534 { printf "%-10s uid=%-6s %s\n", $1, $3, $7 }' /etc/passwd
operador uid=1000 /bin/bash
luis uid=1001 /bin/bash
becario uid=1004 /bin/bashSilencio en la salida significa que no hay ninguna, que es exactamente lo que quieres ver: la convención de «silencio si todo va bien» aplicada a una auditoría.
Conclusión
Ya no queda magia en las identidades de srv-tramontana. Sabes que un usuario es un número; lees los nueve campos de /etc/shadow, reconoces un hash $y$ de yescrypt y distingues !, * y el campo vacío; separas cuentas de sistema de cuentas de persona por el rango de UID de /etc/login.defs; creas cuentas con useradd en scripts y con adduser a mano, sabiendo qué aporta /etc/skel; fijas plazos con chage y dejas la política de contraseñas para 06-06; y has interiorizado que usermod -G sin -a es una forma rápida de perder la máquina y que un grupo nuevo no existe hasta que se reabre la sesión.
Y, sobre todo, has saldado la deuda: el grupo tramontana (gid 1002) existe, svc-tramontana (uid 997) es una cuenta de sistema real sin shell ni contraseña, operador y luis están en el grupo, /opt/tramontana y /srv/tramontana/backups tienen dueño y el cambio está anotado en el HISTORIAL.
Falta la otra mitad de la ecuación. Tienes identidades, pero sudo sigue siendo una palabra mágica que escribes sin saber quién decide qué te permite hacer, y los bits raros que viste de refilón en 02-07 —esa s en lugar de la x— siguen sin explicación, aunque acabas de usar uno al poner 2770 en uploads. En la lección siguiente, sudo y Permisos Especiales, se acaban las dos cosas: escribirás una regla de sudoers que permita a operador reiniciar y desplegar la aplicación sin ser root, entenderás SUID, SGID y el sticky bit de verdad, sustituirás un SUID por capabilities para que la app pueda escuchar en el puerto 80, y darás a Luis acceso a los logs con una ACL sin meterlo en el grupo adm.
Curso de Linux: De Principiante a Administrador de Sistemas
Módulo 1: Introducción a Linux
- ¿Qué es Linux?
- Historia de Linux
- Distribuciones de Linux
- Instalando Linux
- Primer Contacto con el Sistema
- Estructura del Sistema de Archivos de Linux
Módulo 2: Comandos Básicos de Linux
- Introducción a la Línea de Comandos
- Obtener Ayuda y Documentación del Sistema
- Navegando el Sistema de Archivos
- Operaciones con Archivos y Directorios
- Visualización y Edición de Archivos
- Enlaces Duros y Simbólicos
- Permisos y Propiedad de Archivos
Módulo 3: Habilidades Avanzadas en la Línea de Comandos
- El Entorno del Shell: Variables, Alias e Historial
- Uso de Comodines y Expresiones Regulares
- Búsqueda de Archivos y Contenido: find, locate y grep
- Tuberías y Redirección
- Procesamiento de Texto: cut, sort, uniq, sed y awk
- Gestión de Procesos
- Programación de Tareas con Cron
- Comandos de Redes
Módulo 4: Scripting en Shell
- Introducción al Scripting en Shell
- Variables y Tipos de Datos
- Entrada, Salida y Argumentos de un Script
- Estructuras de Control
- Funciones y Librerías
- Depuración y Manejo de Errores
- Scripts de Producción: Buenas Prácticas
Módulo 5: Administración del Sistema
- Gestión de Usuarios y Grupos
- sudo y Permisos Especiales
- Gestión de Paquetes
- Gestión de Discos
- systemd y la Gestión de Servicios
- Registros del Sistema: journald y syslog
- Monitoreo del Sistema y Optimización del Rendimiento
- Respaldo y Restauración
Módulo 6: Redes y Seguridad
- Configuración de Redes
- SSH y Acceso Remoto
- Firewall y Seguridad Perimetral
- Sistemas de Detección de Intrusos
- Gestión de Secretos y Certificados TLS
- Asegurando Sistemas Linux
Módulo 7: Temas Avanzados
- El Proceso de Arranque y la Recuperación del Sistema
- Diagnóstico Avanzado: strace, perf y eBPF
- Optimización del Kernel de Linux
- Virtualización con Linux
- Contenedores de Linux y Docker
- Automatización con Ansible
- Alta Disponibilidad y Balanceo de Carga
