Categoría: Linux

  • 2.1 – Usuarios, permisos y el impostor legal sudo

    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.

  • 2.2 – Por qué root no es tu amigo (pero lo necesitas a veces)

    2.2 – Por qué root no es tu amigo (pero lo necesitas a veces)

    ¿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.

    Hay varias formas de obtener una sesión como superusuario. Cada una tiene su sabor.

    Entrar como root con su -

    Este es el método clásico.

    su -

    Te pedirá la contraseña del usuario root.
    Si root está deshabilitado (como en Ubuntu), no funcionará.

    El - significa “cargar el entorno completo de root” (ruta, variables, etc.), no solo cambiar el usuario.


    Entrar como root usando sudo

    Esto solo funciona si tu usuario pertenece al grupo sudo.

    sudo su -

    Aquí la contraseña que pide es la tuya, no la del root.
    Es una forma de entrar en modo administrador sin conocer la clave maestra.


    Abrir directamente una shell como root

    sudo -i

    Es prácticamente equivalente a su -, pero usando el poder de sudo.

    ¿Por qué es mala idea usar root todo el tiempo?

    Root no tiene frenos

    Un usuario normal puede romper su sesión.
    Root puede romper el sistema entero, el arranque, o borrar discos completos sin pestañear.

    [!NOTE]
    ==Ejemplo peligroso: ==
    rm -rf /
    ESTO BOORARA TODO

    Un usuario normal no puede ejecutarlo sobre el sistema.
    Root sí. No pregunta. No duda. No se arrepiente.


    Root no te protege de tus despistes

    Un error tipográfico en root es como enviar un misil por escribir mal una coma.

    Esto pasa más de lo que parece:

    ==**Ejemplo peligroso: **==
    ==mv /home/alumno /home/alumno_backup mv /home/alumno_backup /==
    ESTO DAÑARA EL SISTEMA

    y adiós estructura de carpetas.


    Root no queda registrado igual que sudo

    Cuando usas root directamente:

    • No queda claro qué usuario real hizo qué.
    • No hay auditoría detallada
    • En una clase o empresa, dificulta saber quién tocó qué.

    Cuando usas sudo:

    /var/log/auth.log

    registra cada comando ejecutado.


    Root abre puertas a ataques

    Si un script, un archivo o un comando malicioso se ejecuta como root, ya está dentro de la fortaleza con una llave maestra.
    Malo para servidores. Malo para usuarios.


    5. Root ignora restricciones útiles

    No hay:

    • cuotas
    • límites de procesos
    • límites de memoria
    • restricciones de permisos

    Root puede saturar el sistema sin querer.


    Root fomenta malos hábitos

    Cosas que acaban pasando cuando se usa root “porque es más rápido”:

    • Instalar paquetes sin pensar.
    • Editar archivos del sistema sin copia de seguridad.
    • Romper autenticación, red o fstab
    • Crear permisos demasiado amplios.

    [!NOTA]
    En una frase, se traduce en:
    “Profe, mi VM no arranca y no sé por qué…”

  • 2.3 – Tipos de permisos en Linux

    2.3 – Tipos de permisos en Linux

    Los permisos en Linux son el sistema nervioso de la seguridad.
    Sin ellos, cualquiera podría abrir, leer o destruir cualquier archivo.

    Esta lección explica:

    • qué permisos existen
    • cómo se representan
    • qué significan
    • cómo afectan a la ejecución de programas
    • cómo se relacionan con usuarios y grupos
    • y los permisos especiales que muchos desconocen (SUID, SGID, sticky bit)

    Los tres actores del sistema de permisos

    Cada archivo y carpeta tiene tres “capas” de permisos:

    1. Usuario (u) → el dueño del archivo
    2. Grupo (g) → usuarios que comparten un grupo
    3. Otros (o) → todos los demás

    Ejemplo del comando ls -l:

    Desglose:

    • - → tipo de archivo
    • rwx → permisos del usuario
    • r-x → permisos del grupo
    • --- → permisos de otros

    Tipos de permisos básicos

    Permiso de lectura — r

    • En archivos → permite leer su contenido
    • En directorios → permite listar los nombres de los archivos

    Símbolo: r
    Valor numérico: 4


    Permiso de escritura — w

    • En archivos → permite modificar el contenido
    • En directorios → permite crear, borrar o renombrar archivos dentro

    Símbolo: w
    Valor numérico: 2


    Permiso de ejecución — x

    • En archivos → permite ejecutarlo como un programa o script
    • En directorios → permite entrar (cd) dentro del directorio

    Símbolo: x
    Valor numérico: 1


    Cómo funcionan los permisos numéricos (modo octal)

    Cada permiso suma:

    • r = 4
    • w = 2
    • x = 1

    Por lo que si lo combinamos.

    OctalBinarioPermiso
    0000
    1001–x
    2010-w-
    3011-wx
    4100r–
    5101r-x
    6110rw-
    7111rwx

    De tal modo que:

    Ejemplo clásico: chmod 755 archivo

    TipoOctalBinarioPermiso
    Usuario7111rwx
    Grupo5101r-x
    Otros5101r-x

    Desglose:

    • Usuario → 7 → rwx
    • Grupo → 5 → r-x
    • Otros → 5 → r-x

    Ejemplos útiles:

    chmod 777 archivo # todos pueden todo
    chmod 644 archivo # dueño rw, grupo r, otros r
    chmod 700 clave.txt # solo el dueño puede acceder

    Permisos simbólicos (modo con letras)

    Muy útil para cambiar permisos parcialmente.

    Dar ejecución al usuario:

    chmod u+x script.sh

    Quitar escritura al grupo:

    chmod g-w notas.txt

    Dar permisos a todos:

    chmod a+rx carpeta

    Añadir permisos al dueño y quitarlos al resto:

    chmod u+rw,go-rwx secreto.txt

    Cómo funcionan los permisos en directorios

    Aquí tienes la regla simple:

    Lectura (r)

    Te deja ver la lista de archivos dentro del directorio.

    Escritura (w)

    Te deja crear, borrar o renombrar archivos dentro del directorio.

    Ejecución (x)

    Te deja entrar al directorio (cd) y acceder a archivos cuyo nombre conozcas.

    Frase clave:

    Sin “x”, no puedes entrar; sin “r”, no puedes ver lo que hay; sin “w”, no puedes cambiar nada.

    mkdir carpeta
    chmod 000 carpeta

    Resultado: ni root salvo usando sudo puede entrar.

  • 2.4 – CHOWN, CHMOD, CHGRP — LAS TRES LLAVES DEL REINO

    2.4 – CHOWN, CHMOD, CHGRP — LAS TRES LLAVES DEL REINO

    En Linux, cada archivo tiene un dueño (usuario), un grupo, y un conjunto de permisos.
    Modificar todo eso es fácil… demasiado fácil si usas root sin cabeza.

    Vamos a verlos uno por uno.


    1. chown → Cambiar el dueño del archivo

    La sintaxis es:

    chown usuario archivo

    Ejemplo simple:

    sudo chown juan /var/www/html/index.html

    Ahora Juan es el dueño de ese archivo.

    Si quieres cambiar usuario y grupo:

    sudo chown juan:profesores documento.txt

    Cambiar solo el grupo:

    sudo chown :profesores documento.txt

    Cambiar de forma recursiva (carpeta entera):

    sudo chown -R juan:juangroup /home/juan

    chown es “Change Owner”: cambia quién manda sobre el archivo.

    2. chgrp → Cambiar solo el grupo

    Es más específico que chown:

    sudo chgrp alumnos proyecto.txt

    La idea es sencilla:
    Cuando tienes un archivo, pueden mandar sobre él:

    • tú como usuario
    • o cualquiera de tu grupo asociado

    chgrp te deja decidir ese segundo nivel.


    3. chmod → Cambiar los permisos

    Aquí empieza el festival de números y letras. Tus alumnos suelen entenderlo mejor si usas una metáfora de puertas.

    Cada archivo tiene permisos divididos en tres bloques:

    u g o
    user group others

    Y cada uno tiene:

    • r → read (leer)
    • w → write (escribir)
    • x → execute (ejecutar)

    Dos formas de usar chmod:

    A) Modo numérico (octal)

    Es el clásico:

    chmod 755 archivo

    Por qué 7, 5 y 5?
    Porque cada permiso suma:

    • r = 4
    • w = 2
    • x = 1

    Ejemplos:

    • 7 = rwx (4+2+1)
    • 6 = rw- (4+2)
    • 5 = r-x (4+1)
    • 4 = r– (4)

    Ejemplos prácticos:

    Permiso para que usuario pueda todo, grupo y otros solo leer:

    chmod 744 informe.txt

    Permiso de ejecución para usuario y grupo:

    chmod 770 script.sh

    Modo más típico para scripts:

    chmod 755 script.sh

    B) Modo simbólico (con letras)

    Más legible:

    Dar ejecución al usuario:

    chmod u+x script.sh

    Quitar escritura a otros:

    chmod o-w archivo.txt

    Dar permisos de lectura y escritura al grupo:

    chmod g+rw proyecto

    Ejemplo 1: carpeta compartida para un grupo

    sudo mkdir /compartido
    sudo chgrp alumnos /compartido
    sudo chmod 770 /compartido

    Todo el grupo “alumnos” puede usarla.


    Ejemplo 2: permitir que un usuario edite su web

    sudo chown -R juan:www-data /var/www/juan
    sudo chmod -R 750 /var/www/juan

    Explicación para los estudiantes:

    • Juan puede leer/escribir.
    • El servidor (www-data) puede leer.
    • Nadie más puede entrar.

    Ejemplo 3: archivo ejecutable para todos

    chmod a+x programa.sh

    a significa all (todos los usuarios).


    Ejemplo 4: bloquear totalmente un archivo

    chmod 000 documento.txt

    Solo root podrá tocarlo.

    ¿Cómo enlazar esto con la lección de root?

    Un usuario normal solo puede cambiar permisos y dueños de lo que le pertenece.
    Root puede cambiar todo, lo que lo convierte en una herramienta poderosa… o en un desastre en manos torpes.

    sudo chown root:root /home/alumno1
    sudo chmod 700 /home/alumno1

    Acabas de expulsar a alumno1 de su propia casa.
    Es un experimento divertido para enseñar responsabilidad… o para que entiendan por qué root no es una buena costumbre.

    Resumen

    • chown → cambia el dueño del archivo y su grupo
    • chgrp → cambia solo el grupo
    • chmod → cambia los permisos (r, w, x) en user/group/others
    • root puede cambiarlo todo
    • usuarios normales solo pueden cambiar sus propios archivos
  • 2.5 – Práctica guiada: “La estación orbital Andrómeda”

    2.5 – Práctica guiada: “La estación orbital Andrómeda”

    La estación espacial Andrómeda necesita organizar a su tripulación.
    Hay tres equipos principales:

    • pilotos
    • ingenieros
    • cientificos

    Cada miembro de la tripulación tendrá acceso solo a determinadas carpetas según su grupo.
    Además, el comandante de la estación deberá poder reorganizar la tripulación, cambiar usuarios de grupo y ajustar propietarios y permisos de archivos.

    Tu misión será convertirte en el administrador del sistema de la estación.


    1. Objetivos de la práctica

    Al finalizar esta práctica, el alumno será capaz de:

    • crear usuarios en Ubuntu,
    • crear grupos de usuarios,
    • añadir usuarios a grupos,
    • cambiar un usuario de grupo,
    • comprobar a qué grupos pertenece un usuario,
    • crear carpetas para distintos equipos,
    • asignar propietario y grupo a carpetas y archivos,
    • modificar permisos con chmod,
    • utilizar chown para cambiar propietario y grupo,
    • verificar que los permisos funcionan correctamente.

    2. Qué vas a aprender

    En Linux, cada archivo y carpeta tiene asociado:

    • un propietario,
    • un grupo,
    • unos permisos.

    Los permisos se pueden definir para:

    • u → usuario propietario,
    • g → grupo,
    • o → otros usuarios.

    Y los permisos básicos son:

    • r → lectura,
    • w → escritura,
    • x → ejecución o acceso.

    3. Preparación inicial

    Antes de empezar, abre una terminal y asegúrate de trabajar con un usuario con permisos de administración.

    Puedes comprobarlo con:

    whoami

    Y probar que tienes permisos de sudo con:

    sudo -v

    4. Crear los grupos de la estación

    Vamos a crear los tres grupos principales de la tripulación.

    sudo groupadd pilotos
    sudo groupadd ingenieros
    sudo groupadd cientificos

    Comprobar que los grupos existen

    getent group pilotos
    getent group ingenieros
    getent group cientificos

    Esto mostrará información del grupo si se ha creado correctamente.


    5. Crear los usuarios de la tripulación

    Ahora vamos a crear varios usuarios.

    Equipo de pilotos

    sudo useradd -m -s /bin/bash luke
    sudo useradd -m -s /bin/bash leia

    Equipo de ingenieros

    sudo useradd -m -s /bin/bash data
    sudo useradd -m -s /bin/bash scotty

    Equipo de científicos

    sudo useradd -m -s /bin/bash ripley
    sudo useradd -m -s /bin/bash spock

    Explicación

    • useradd crea el usuario.
    • -m crea su carpeta personal en /home.
    • -s /bin/bash asigna Bash como shell.

    6. Asignar contraseña a los usuarios

    Para que estos usuarios puedan iniciar sesión, asígnales una contraseña.

    sudo passwd luke
    sudo passwd leia
    sudo passwd data
    sudo passwd scotty
    sudo passwd ripley
    sudo passwd spock

    Puedes usar una contraseña sencilla solo para la práctica, por ejemplo:

    Clave123*

    7. Añadir usuarios a sus grupos

    Ahora asignamos cada usuario a su equipo.

    sudo usermod -aG pilotos luke
    sudo usermod -aG pilotos leia
    
    sudo usermod -aG ingenieros data
    sudo usermod -aG ingenieros scotty
    
    sudo usermod -aG cientificos ripley
    sudo usermod -aG cientificos spock

    Explicación importante

    • usermod modifica un usuario.
    • -aG añade el usuario a uno o varios grupos sin borrar los grupos anteriores.

    8. Comprobar a qué grupos pertenece cada usuario

    Usa alguno de estos comandos:

    groups luke
    groups leia
    groups data
    groups scotty
    groups ripley
    groups spock

    O también:

    id luke
    id data
    id spock

    Esto permite ver:

    • el UID del usuario,
    • el GID principal,
    • los grupos a los que pertenece.

    9. Crear la estructura de carpetas de la estación

    Vamos a crear una zona común de trabajo para la estación.

    sudo mkdir -p /srv/andromeda/pilotos
    sudo mkdir -p /srv/andromeda/ingenieros
    sudo mkdir -p /srv/andromeda/cientificos
    sudo mkdir -p /srv/andromeda/comun

    Verificar la estructura creada

    ls -l /srv
    ls -l /srv/andromeda

    10. Asignar propietario y grupo a las carpetas

    Ahora vamos a asociar cada carpeta con su grupo correspondiente.

    sudo chown root:pilotos /srv/andromeda/pilotos
    sudo chown root:ingenieros /srv/andromeda/ingenieros
    sudo chown root:cientificos /srv/andromeda/cientificos
    sudo chown root:root /srv/andromeda/comun

    Explicación

    Con chown puedes cambiar:

    • el propietario,
    • el grupo,
    • o ambos.

    En este caso:

    • el propietario será root,
    • el grupo será el del equipo correspondiente.

    La sintaxis es:

    sudo chown propietario:grupo ruta

    NOTA: El Comando chgrp

    El comando chgrp se utiliza en Linux para cambiar el grupo asociado a un archivo o carpeta.

    Mientras que chown puede cambiar el propietario y también el grupo, chgrp está pensado específicamente para modificar solo el grupo.

    chgrp grupo archivo_o_carpeta

    sudo chgrp pilotos /srv/andromeda/ruta_estelar.txt

    Con este comando, el archivo ruta_estelar.txt pasará a pertenecer al grupo pilotos.


    ¿Para qué sirve?

    chgrp es útil cuando:

    • queremos que varios usuarios de un mismo grupo puedan acceder a un archivo,
    • no necesitamos cambiar el propietario,
    • queremos reorganizar permisos por grupos de trabajo.

    En una práctica como la de la estación orbital, puede servir para decidir qué equipo debe compartir un documento sin cambiar quién es su dueño.


    Diferencia entre chown y chgrp

    • chown cambia el propietario y, si se quiere, también el grupo.
    • chgrp cambia solo el grupo.


    Por ejemplo:

    sudo chown luke:pilotos archivo.txt

    cambia propietario y grupo.


    En cambio:

    sudo chgrp pilotos archivo.txt

    solo cambia el grupo, manteniendo el mismo propietario.

    11. Asignar permisos a las carpetas

    Queremos que cada grupo pueda entrar en su carpeta, leer y escribir en ella, pero que otros no puedan acceder.

    sudo chmod 770 /srv/andromeda/pilotos
    sudo chmod 770 /srv/andromeda/ingenieros
    sudo chmod 770 /srv/andromeda/cientificos
    sudo chmod 777 /srv/andromeda/comun

    Explicación de los permisos

    770

    • propietario: rwx
    • grupo: rwx
    • otros: ---

    777

    • propietario: rwx
    • grupo: rwx
    • otros: rwx

    La carpeta comun será accesible para todos, mientras que las otras estarán restringidas.


    12. Comprobar los permisos

    ls -ld /srv/andromeda/pilotos
    ls -ld /srv/andromeda/ingenieros
    ls -ld /srv/andromeda/cientificos
    ls -ld /srv/andromeda/comun

    Fíjate en algo como esto:

    drwxrwx--- 2 root pilotos ...

    Eso significa:

    • d → es una carpeta,
    • rwx → permisos del propietario,
    • rwx → permisos del grupo,
    • --- → permisos del resto.

    13. Probar acceso con distintos usuarios

    Ahora toca comprobar si realmente funciona.

    Entrar como un usuario concreto

    Puedes cambiar de usuario con:

    su - luke

    O, si prefieres, ejecutar comandos como otro usuario:

    sudo -u luke ls /srv/andromeda/pilotos
    sudo -u luke ls /srv/andromeda/ingenieros

    Qué debería ocurrir

    • luke sí debería poder entrar en /srv/andromeda/pilotos
    • luke no debería poder entrar en /srv/andromeda/ingenieros

    Prueba varios casos:

    sudo -u luke ls /srv/andromeda/pilotos
    sudo -u luke ls /srv/andromeda/ingenieros
    sudo -u data ls /srv/andromeda/ingenieros
    sudo -u ripley ls /srv/andromeda/cientificos
    sudo -u spock ls /srv/andromeda/pilotos
    ¿Que hace? sudo -u luke ls
    Ejecuta el comando ls como si lo estuviera lanzando el usuario luke. 
    -u luke Le dice a sudo que el comando no se ejecute como tu usuario actual, sino como el usuario luke.

    14. Crear archivos dentro de las carpetas

    Vamos a crear documentos de misión dentro de cada zona.

    sudo touch /srv/andromeda/pilotos/ruta_estelar.txt
    sudo touch /srv/andromeda/ingenieros/reactor.txt
    sudo touch /srv/andromeda/cientificos/informe_biologico.txt
    sudo touch /srv/andromeda/comun/avisos_generales.txt

    Añadimos contenido:


    
    echo "Ruta secreta al sector Omega" | sudo tee /srv/andromeda/pilotos/ruta_estelar.txt
    
    echo "Estado del reactor principal" | sudo tee /srv/andromeda/ingenieros/reactor.txt
    
    echo "Análisis de muestras alienígenas" | sudo tee /srv/andromeda/cientificos/informe_biologico.txt
    
    echo "Reunión general a las 18:00" | sudo tee /srv/andromeda/comun/avisos_generales.txt
    ¿Que hace tee?

    sirve para escribir un texto dentro de un archivo con permisos de administrador.
    El comando tee recoge lo que le llega por la entrada estándar y lo:

    • muestra por pantalla,
    • y además lo guarda en un archivo.

    Como va precedido de sudo, tee se ejecuta con permisos de administrador, por lo que puede escribir en una ruta protegida.

    Saber más

    15. Cambiar propietario de un archivo con chown

    Ahora vamos a usar chown de forma más clara sobre archivos.

    Por ejemplo, el archivo del reactor lo va a gestionar el ingeniero data.

    sudo chown data:ingenieros /srv/andromeda/ingenieros/reactor.txt

    Y el informe biológico será gestionado por spock.

    sudo chown spock:cientificos /srv/andromeda/cientificos/informe_biologico.txt

    Verificar el cambio

    ls -l /srv/andromeda/ingenieros/reactor.txt
    ls -l /srv/andromeda/cientificos/informe_biologico.txt

    16. Cambiar solo el grupo de un archivo

    También puedes cambiar únicamente el grupo.

    Por ejemplo:

    sudo chown :pilotos /srv/andromeda/comun/avisos_generales.txt

    Eso cambia solo el grupo, manteniendo el propietario actual.

    Compruébalo:

    ls -l /srv/andromeda/comun/avisos_generales.txt

    17. Dar permisos concretos a los archivos

    Vamos a ajustar permisos para que:

    • el propietario pueda leer y escribir,
    • el grupo pueda leer,
    • otros no puedan acceder.
    sudo chmod 640 /srv/andromeda/ingenieros/reactor.txt
    sudo chmod 640 /srv/andromeda/cientificos/informe_biologico.txt
    sudo chmod 664 /srv/andromeda/comun/avisos_generales.txt

    Interpretación

    640

    • propietario: lectura y escritura
    • grupo: lectura
    • otros: sin permisos

    664

    • propietario: lectura y escritura
    • grupo: lectura y escritura
    • otros: lectura

    18. Cambiar un usuario de grupo

    Ahora viene una situación de la historia.

    La comandante decide que leia deja el equipo de pilotos y pasa al equipo de ingenieros.

    Primero la añadimos al nuevo grupo:

    sudo usermod -aG ingenieros leia

    Comprobamos sus grupos:

    groups leia

    Ahora leia pertenece a dos grupos: pilotos e ingenieros.

    Quitarla del grupo de pilotos

    Para hacerlo de forma clara en Ubuntu:

    sudo gpasswd -d leia pilotos

    Volvemos a comprobar:

    groups leia

    Ahora debería quedar solo en ingenieros además de su grupo principal.


    19. Crear un nuevo usuario y asignarlo a un grupo

    La estación recibe a un nuevo tripulante: neo.

    sudo useradd -m -s /bin/bash neo
    sudo passwd neo
    sudo usermod -aG cientificos neo

    Comprobar:

    groups neo

    20. Probar qué puede hacer cada usuario

    Haz pruebas reales con comandos como estos:

    sudo -u data cat /srv/andromeda/ingenieros/reactor.txt
    sudo -u luke cat /srv/andromeda/ingenieros/reactor.txt
    sudo -u spock cat /srv/andromeda/cientificos/informe_biologico.txt
    sudo -u leia touch /srv/andromeda/ingenieros/prueba_leia.txt
    sudo -u neo touch /srv/andromeda/cientificos/muestra_01.txt

    Qué observar

    • Un usuario del grupo correcto debería poder trabajar dentro de su carpeta.
    • Un usuario de otro grupo debería recibir un error de permisos.
    • Los archivos deben respetar los permisos establecidos.

    21. Ver propietarios y permisos de toda la estación

    Para revisar toda la estructura:

    ls -lR /srv/andromeda

    Esto te mostrará:

    • carpetas,
    • archivos,
    • propietarios,
    • grupos,
    • permisos.

    22. Recuerda

    Diferencia entre propietario y grupo

    • El propietario es normalmente el usuario dueño del archivo.
    • El grupo permite que varios usuarios compartan acceso a archivos y carpetas.

    Diferencia entre chown y chmod

    • chown cambia el propietario o grupo.
    • chmod cambia los permisos.

    Comandos clave

    Crear grupo

    sudo groupadd nombre_grupo

    Crear usuario

    sudo useradd -m -s /bin/bash nombre_usuario

    Asignar contraseña

    sudo passwd nombre_usuario

    Añadir usuario a grupo

    sudo usermod -aG grupo usuario

    Ver grupos de un usuario

    groups usuario

    Quitar usuario de un grupo

    sudo gpasswd -d usuario grupo

    Cambiar propietario y grupo

    sudo chown propietario:grupo archivo_o_carpeta

    Cambiar permisos

    sudo chmod permisos archivo_o_carpeta

    23. Actividad

    Ahora que ya sabes manejar usuarios y permisos, realiza estas tareas:

    Tarea 1

    Crea un nuevo grupo llamado:

    seguridad

    Tarea 2

    Crea dos usuarios nuevos:

    • trinity
    • morpheo

    Tarea 3

    Añade ambos al grupo seguridad.

    Tarea 4

    Crea la carpeta:

    /srv/andromeda/seguridad

    Tarea 5

    Haz que:

    • el propietario sea root,
    • el grupo sea seguridad,
    • los permisos sean 770.

    Tarea 6

    Crea dentro un archivo llamado:

    protocolo_defensa.txt

    Tarea 7

    Haz que el archivo pertenezca a trinity:seguridad.

    Tarea 8

    Pon permisos 640 al archivo.

    Tarea 9

    Comprueba que:

    • trinity puede leerlo,
    • morpheo puede leerlo,
    • luke no puede acceder.

    25. Planteate las siguientes preguntas.

    1. ¿Qué diferencia hay entre un usuario y un grupo?
    2. ¿Qué hace el comando chown?
    3. ¿Qué hace el comando chmod?
    4. ¿Qué significa el permiso 770?
    5. ¿Qué significa el permiso 640?
    6. ¿Cómo se comprueba a qué grupos pertenece un usuario?
    7. ¿Qué comando se usa para eliminar a un usuario de un grupo?
    8. ¿Por qué es útil trabajar con grupos en lugar de dar permisos usuario por usuario?

    La estación orbital Andrómeda ya está organizada.
    Cada tripulante pertenece a su equipo, cada carpeta está protegida y los documentos sensibles solo son accesibles por el personal autorizado.
    Has completado con éxito tu primera misión como administrador de sistemas espaciales.


    Tabla de comandos y opciones principales

    ComandoOpción / sintaxisExplicación
    groupaddgroupadd nombre_grupoCrea un grupo nuevo en el sistema.
    useradduseradd nombre_usuarioCrea un usuario.
    useradd-mCrea automáticamente la carpeta personal del usuario en /home.
    useradd-s /bin/bashAsigna la shell Bash al usuario.
    passwdpasswd nombre_usuarioEstablece o cambia la contraseña de un usuario.
    usermodusermod usuarioModifica la configuración de un usuario existente.
    usermod-aG grupo usuarioAñade el usuario a un grupo secundario sin quitarlo de los demás.
    groupsgroups usuarioMuestra los grupos a los que pertenece un usuario.
    idid usuarioMuestra UID, GID y grupos del usuario.
    mkdirmkdir carpetaCrea una carpeta.
    mkdir-pCrea la ruta completa aunque haya varios niveles de carpetas.
    touchtouch archivoCrea un archivo vacío si no existe.
    lslsLista archivos y carpetas.
    ls-lMuestra la lista en formato largo, con permisos, propietario, grupo, tamaño, etc.
    ls-dMuestra información de la carpeta en sí, no de su contenido.
    ls-RLista el contenido de forma recursiva, incluyendo subcarpetas.
    chownchown propietario archivoCambia el propietario de un archivo o carpeta.
    chownchown propietario:grupo archivoCambia propietario y grupo a la vez.
    chownchown :grupo archivoCambia solo el grupo del archivo o carpeta.
    chown-RAplica el cambio de propietario/grupo de forma recursiva.
    chmodchmod permisos archivoCambia los permisos de un archivo o carpeta.
    chmod770Propietario y grupo con todos los permisos; otros sin acceso.
    chmod750Propietario con todos los permisos; grupo puede leer y entrar; otros sin acceso.
    chmod640Propietario puede leer y escribir; grupo solo leer; otros sin acceso.
    chmod664Propietario y grupo pueden leer y escribir; otros solo leer.
    chmod777Todos pueden leer, escribir y ejecutar/entrar.
    chmod-RCambia permisos de forma recursiva.
    gpasswdgpasswd -d usuario grupoElimina un usuario de un grupo.
    susu - usuarioCambia a otro usuario cargando su entorno.
    sudosudo comandoEjecuta un comando con privilegios de administrador.
    sudosudo -u usuario comandoEjecuta un comando como otro usuario.
    getentgetent group nombre_grupoConsulta información de un grupo en la base de datos del sistema.
    whoamiwhoamiMuestra el usuario actual.
    teetee archivoEscribe en un archivo a partir de la entrada estándar. Muy útil junto con echo.
    catcat archivoMuestra el contenido de un archivo.

    Tabla permisos numéricos

    ValorSignificado
    7rwx = lectura, escritura y ejecución
    6rw- = lectura y escritura
    5r-x = lectura y ejecución
    4r-- = solo lectura
    3-wx = escritura y ejecución
    2-w- = solo escritura
    1--x = solo ejecución
    0--- = sin permisos

    Cómo leer un permiso como 770

    PosiciónValorSignificado
    Propietario7rwx
    Grupo7rwx
    Otros0---

    Ejemplos rápidos

    ObjetivoComando
    Crear gruposudo groupadd pilotos
    Crear usuario con home y bashsudo useradd -m -s /bin/bash luke
    Añadir usuario a gruposudo usermod -aG pilotos luke
    Ver grupos de un usuariogroups luke
    Cambiar propietario y gruposudo chown data:ingenieros archivo.txt
    Cambiar solo gruposudo chown :cientificos archivo.txt
    Dar permisos al propietario y gruposudo chmod 770 carpeta
    Quitar a un usuario de un gruposudo gpasswd -d leia pilotos

  • 2.6 – Usuarios y Huellas Digitales en Linux

    2.6 – Usuarios y Huellas Digitales en Linux

    whoami

    El equivalente digital de mirarse al espejo.
    Muestra el usuario efectivo que está ejecutando el comando.
    Perfecto para explicar la diferencia entre:

    • usuario real (el que inicia sesión),
    • usuario efectivo (el que el sistema usa para permisos, especialmente tras un sudo).

    id

    Un pequeño radiotelescopio hacia tu identidad numérica.
    Muestra:

    • UID (identificador del usuario)
    • GID (grupo principal)
    • grupos secundarios
      Es una forma directa de ver permisos y roles dentro del sistema. Ideal para ejercicios de administración y forense.

    who / w / users

    El “quién está ahora mismo en la nave”.
    Sirve para ver sesiones activas y cómo han entrado:

    • tty
    • pts (sesiones remotas)
    • SSH
    • tiempo conectado

    • En ciberseguridad es una herramienta rápida para detectar conexiones sospechosas.

    env

    El baúl entero de variables de entorno.
    Aquí viven cosas como:

    • $USER
    • $HOME
    • $SHELL
    • $PATH

      Además permite explicar a los alumnos por qué una aplicación “sabe” dónde buscar binarios o dónde está su carpeta de configuración.

    echo $USER

    Una forma simple de leer la variable que indica el nombre del usuario que ha iniciado sesión.
    Comparar whoami vs $USER es didáctico:
    $USER → quien inició sesión
    whoami → usuario efectivo (útil para mostrar cómo sudo cambia el contexto)


    echo $HOME

    Viene genial para scripts o explicaciones sobre la organización del sistema.
    Muestra la ruta al directorio personal, que siempre es sagrado en Linux.


    echo $SHELL

    Permite enseñar la diferencia entre bash, zsh, fish…
    Ideal para que entiendan por qué su terminal “se comporta raro” tras instalar algo.


    hostname

    La identidad pública del sistema en la red.
    Junto con hostname -I, sirve para explicar la distinción entre:

    • identidad del equipo,
    • interfaces,
    • direcciones IP que usa para comunicarse.

    logname

    La versión más purista de “quién inició esta sesión”, incluso si has hecho un su o un sudo.
    Muy útil en prácticas de forense porque te permite reconstruir acciones de usuarios.


    tty

    Muestra el dispositivo de terminal actual.
    En remoto se verá algo como /dev/pts/1.
    Perfecto para entender:

    • sesiones locales,
    • sesiones remotas,
    • multiplexación de terminales.

    ps aux | grep $USER

    Una puerta a ver “qué está ejecutando realmente tu identidad”.
    A los alumnos les ayuda a comprender procesos, permisos, señales y contextos.


    finger (si lo instalas)

    Pinta un pequeño perfil del usuario:

    • shell
    • home
    • nombre real

      Antiguo pero didáctico como pocas cosas.

    Actividad: “¿Quién eres en esta máquina?” – Identidad y sesiones en Linux

    Imagina que el sistema es una estación espacial. Cada alumno entra por una compuerta distinta, a veces cambia de traje (sudo), y el objetivo es reconstruir quién hizo qué.


    Todo ocurre en un Ubuntu normal.


    FASE 1 — Identidad básica

    Ejecuta:

    
    
    
    
    
    whoami
    echo $USER
    id
    logname
    

    Descubrir que el sistema te reconoce por varias “capas”.

    Explicación:

    • whoami → usuario efectivo.
    • $USER → usuario que inició sesión.
    • id → UID, GID, grupos.
    • logname → el user original aunque hayan hecho su.

    Pequeño reto:
    Pídeles que intenten entender por qué sudo whoami devuelve root,
    pero echo $USER sigue mostrando su usuario normal.


    FASE 2 — Dónde están realmente

    Ejecutar

    
    
    
    
    
    pwd
    echo $HOME
    echo $SHELL
    tty
    

    Esto muestra:

    • dónde están,
    • cuál es su shell,
    • qué terminal están usando (local, SSH, pts…).

    Ejercicio: Compartir un terminal local (tty1) con una sesión SSH


    FASE 3 — Quién más está en la nave

    Ahora miramos el estado de la estación:

    
    
    
    
    
    who
    w
    users
    hostname
    hostname -I
    

    Objetivo: identificar todas las sesiones activas.
    Puedes entrar desde otra máquina para ver “un intruso”.

    Mini-misión:
    Que usen who para averiguar:

    • quién está conectado,
    • desde qué terminal,
    • desde qué IP si es SSH,
    • desde cuándo.

    Esto introduce sin ruido en análisis forense real.


    FASE 4 — Cambio de identidad

    
    
    
    
    
    sudo -i
    whoami
    echo $USER
    id
    logname
    tty
    

    Aquí ocurre la magia:

    • whoami → root
    • $USER → su usuario original
    • logname → quien realmente abrió la sesión
    • tty → la misma porque no abren una nueva


    FASE 5 — Ver qué hace cada identidad

    En otra terminal, que ejecuten:

    
    
    
    
    
    ps aux | grep $USER
    ps aux | grep root
    

    Fijate que root suele llevar servicios, demonios, etc.

    FASE 6 — Prueba forense

    Prueba a ejecutar con un usuario un comando secreto en su sesión, por ejemplo:

    
    
    
    
    
    mkdir /tmp/estacion-alpha
    echo "Hola profe" > /tmp/mensaje.txt
    touch ~/algo_raro
    

    Luego cambia de usuario :

    “Reconstruid qué usuarios han hecho qué”

    Utilizando:

    
    
    
    
    
    ls -l /tmp
    ls -l /home/*
    who
    logname
    id username
    

    La identidad del sistema queda impregnada en permisos, UID, GID, sesiones y ficheros creados.


    Hackeo benévolo

    Se hace SSH desde otro equipo con:

    
    
    
    
    
    ssh usuario@IP
    

    Luego ejecuta:

    
    
    
    
    
    who
    w
    tty
    hostname -I
    

    Los demás deben encontrar:

    • quién ha entrado
    • desde qué IP
    • en qué terminal
    • cuánto tiempo lleva conectado
      Esta parte siempre les encanta porque parece CSI, pero sin dramatismos digitales.

  • 2.7 – [Reto] Matrix: Controlar el sistema

    2.7 – [Reto] Matrix: Controlar el sistema

    En este pequeño universo, tu Linux hace de Máquina Central, un nodo que controla el flujo de información entre los humanos libres y las máquinas. Los alumnos son “operadores”, encargados de levantar accesos, crear identidades falsas, aislar directorios y conceder privilegios solo a quienes “existen dentro del sistema”.

    El sistema está dividido en dos mundos:

    La Superficie (usuarios sin privilegios)

    El Backdoor (usuarios con acceso sudo)

    La misión avanza en fases, y cada fase tiene su sentido dentro del lore.


    FASE 1 — Generación de identidades (crear usuarios)

    La Resistencia necesita identidades nuevas para infiltrarse en Matrix.

    Cada alumno debe crear:

    • 3 usuarios sin privilegios:
      • trinity
      • apoc
      • switch
    • 1 usuario operador con privilegios sudo:
      • neo

    “neo” deberá ser añadido al grupo sudoers.

    Instrucciones sugeridas (los alumnos deben descubrir qué significan las opciones):

    sudo adduser trinity
    sudo adduser apoc
    sudo adduser switch
    sudo adduser neo
    sudo usermod -aG sudo neo
    
    

    Justificación narrativa:

    Neo es “El Elegido”, así que puede alterar las reglas del sistema.

    Los demás son “agentes infiltrados” con permisos normales.


    FASE 2 — Crear grupos: Escuadrones de la Resistencia

    La Resistencia funciona por células. Necesitamos 2 grupos:

    • zion → humanos libres
    • matrix → identidades falsas dentro del sistema

    Asignación:

    • trinity y neo deben estar en zion
    • apoc y switch deben estar en matrix

    El operador (neo) pertenece a los dos mundos, así que debe estar en ambos grupos.

    sudo groupadd zion
    sudo groupadd matrix
    
    sudo usermod -aG zion neo
    sudo usermod -aG zion trinity
    
    sudo usermod -aG matrix neo
    sudo usermod -aG matrix apoc
    sudo usermod -aG matrix switch
    
    

    Neo vive en el umbral entre los mundos. Sus permisos lo reflejan.


    FASE 3 — Estructura de directorios: Los Distritos de Matrix

    Se pide crear:

    1. /mission-data

    Carpeta para las operaciones de la Resistencia, acceso exclusivo al grupo zion.

    No debe ser visible para los usuarios del grupo matrix.

    2. /simulacion

    Carpeta donde residirán archivos falsos del “mundo simulado”.

    Acceso libre para el grupo matrix, pero solo lectura para zion (ellos no deben ensuciarse demasiado con la ilusión).

    3. /backdoor

    Carpeta secreta, accesible solo por neo. El resto debe recibir un “Acceso denegado”.

    Comandos sugeridos:

    sudo mkdir /mission-data
    sudo mkdir /simulacion
    sudo mkdir /backdoor
    
    # mission-data (solo zion)
    sudo chown :zion /mission-data
    sudo chmod 770 /mission-data
    
    # simulacion (matrix rwx / zion r-x)
    sudo chown :matrix /simulacion
    sudo chmod 775 /simulacion
    
    # backdoor (solo neo)
    sudo chown neo:neo /backdoor
    sudo chmod 700 /backdoor
    
    

    La carpeta backdoor representa la puerta por la que Neo accede al código subyacente de Matrix.


    FASE 4 — Pruebas de acceso: El Oráculo y los obstáculos

    1. Entrar con cada usuario y comprobar qué carpetas ven.
    2. Crear un archivo dentro de /mission-data con usuarios que NO son del grupo → debe fallar.
    3. Intentar listar /backdoor con un usuario que no sea neo → debe fallar.
    4. Que /simulacion permita escribir a matrix, pero no a zion.

    Esto entrena:

    – su comprensión de permisos

    – su uso de su, ls -l, id, touch, mkdir, groups, etc.


    FASE 5 — Mini misión final: Neutralizar al Agente Smith

    smith → representa al Agente Smith

    Este usuario NO debe pertenecer a ningún grupo de la resistencia ni a matrix.

    Debe tener una carpeta personal sin permisos para nadie más:

    sudo adduser smith
    sudo chmod 700 /home/smith
    
    

    Debes demostrar que smith no puede interactuar con las carpetas del sistema (mission-data, simulacion, backdoor) y explicar por qué, usando ls -ld, permisos y grupos.

  • 2.8 –  [Reto] Matrix: Huellas en el Código

    2.8 – [Reto] Matrix: Huellas en el Código

    La Resistencia ha detectado alteraciones en el sistema.

    Alguien ha entrado sin permiso. El sistema (Linux) registra todas las trazas, pero necesitan operadores capacitados para reconstruir lo ocurrido.

    El alumno se convierte en Analista de Zion, encargado de rastrear la actividad de los usuarios creados en el Reto 1: neo, trinity, apoc, switch, smith.

    El objetivo:

    Descubrir quién ha accedido, cuándo, desde dónde, qué ha tocado, y si ha conseguido privilegios dentro de Matrix.


    FASE 1 — La lluvia de código (logs en tiempo real)

    Orden del Oráculo: observar el flujo del sistema en directo.

    1. Ver los mensajes del sistema en tiempo real: sudo journalctl -f
    2. Cambiar entre usuarios mientras journalctl está abierto (por ejemplo, su - trinity, luego exit).
    3. Detectar en el log: • el evento de autenticación • si el login se ha permitido o ha fallado

    Resultado esperado: reconocer entradas como “session opened”, “session closed”, fallos PAM, etc.

    :

    Cada login es una “vibración en el código de Matrix”, y journalctl es la pantalla donde llueve el código verde.


    FASE 2 — El rastro de entrada y salida

    Aquí usamos last, who, w.

    1. ¿Quién está conectado ahora mismo?

    who
    w
    
    

    2. ¿Qué usuarios han entrado en el sistema en los últimos días?

    last
    
    

    3. ¿Se detectan accesos fallidos?

    (En Distros Debian/Ubuntu)

    sudo zgrep -i "failed" /var/log/auth.log*
    
    

    Preguntas tipo misión:

    • ¿Trinity accedió ayer?
    • ¿Apoc intentó entrar varias veces y falló?
    • ¿Neo ha usado sudo recientemente?
    • ¿Smith existe en los logs aunque no debería moverse por el sistema?

    FASE 3 — Sudo: quién ha manipulado Matrix

    sudo journalctl -u sudo
    
    

    o en Ubuntu también:

    sudo grep 'COMMAND=' /var/log/auth.log
    
    

    Descubrir si “Neo ha modificado normas de la simulación” o si “Smith ha intentado elevarse”.

    Tareas:

    1. Ver qué comandos se han ejecutado con sudo.
    2. Identificar el usuario que los ejecutó.
    3. Detectar intentos de sudo fallidos.

    Bonus para rizar el rizo:

    sudo journalctl | grep sudo
    
    

    FASE 4 — Huellas en el historial: El Código dejado atrás

    Revisar qué comandos ha ejecutado cada usuario.

    Para ello, entrar como cada uno:

    sudo su - trinity
    history
    
    

    o inspeccionar los archivos:

    • ~/.bash_history

    ~/.zsh_history (si procede)

    Preguntas narrativas:

    • ¿Quién creó un archivo dentro de /simulacion fuera de su hora de trabajo?
    • ¿Quién intentó entrar a /backdoor aunque no tenía permisos?
    • ¿Qué usuario ejecutó comandos sospechosos como sudo su?
    • ¿Acaso Smith intentó copiar algo desde mission-data?

    FASE 5 — Localizar la intrusión: reconstrucción forense

    “Durante la noche, uno de los usuarios ha intentado manipular el código de Matrix.

    El sistema registró 3 accesos fallidos, un uso indebido de sudo y una entrada en /simulacion fuera del horario.” (Realiza con un usuario las acciones para mantener la ficción)

    Tu misión es:

    1. Localizar esos eventos.
    2. Determinar qué usuario lo hizo.
    3. Extraer las líneas exactas de log donde ocurrió.
    4. Preparar un informe breve tipo forense: • usuario implicado • hora • evento • interpretación técnica

    Aquí se cruzan:

    • journalctl
    • auth.log
    • last
    • history
    • permisos
  • Pildora – Instalación de programa desde un repositorio.

    Pildora – Instalación de programa desde un repositorio.

    Los alumnos deben instalar y ejecutar FossFLOW en un servidor Ubuntu, probar sus funcionalidades básicas y generar un README.md propio documentando todo el proceso.

    Requisitos del sistema

    El servidor debe tener:

    • Ubuntu 20.04, 22.04 o superior
    • Acceso por terminal
    • Git
    • Node.js + npm
    • (Opcional) Docker + Docker Compose
    • Navegador local o túnel SSH para acceder al servicio web

    1. Actualizar el servidor

    sudo apt update && sudo apt upgrade -y


    2. Instalar Git

    sudo apt install git -y

    3. Instalar Node.js LTS y npm

    Recomendado usar NodeSource:

    curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt install -y nodejs

    Verificar:

    node -v npm -v

    4. Clonar el repositorio FossFLOW

    git clone https://github.com/stan-smith/FossFLOW.git cd FossFLOW

    5. Instalar dependencias del proyecto

    npm install

    6. Construir el proyecto

    npm run build:lib

    7. Ejecutar la aplicación

    La versión de desarrollo suele ser:

    npm run dev

    El servidor quedará escuchando en:

    http://localhost:3000

    En su PC local: IN

    ssh -L 3000:localhost:3000 usuario@IP_DEL_SERVIDOR

    Luego abrir en su navegador local:

    http://localhost:3000

    8. Probar la aplicación

    Cada alumno debe:

    • Crear un diagrama isométrico.
    • Añadir varios elementos.
    • Guardar o exportar el proyecto.
    • Importarlo nuevamente para verificar funcionamiento.

    9. Crear un README.md propio

    README.md

    Debe contener:

    1. Descripción del proyecto
    2. Requisitos del servidor Ubuntu
    3. Instrucciones de instalación paso a paso
    4. Comandos utilizados
    5. Cómo se ejecuta (modo dev o Docker)
    6. Cómo acceder desde el navegador
    7. Problemas encontrados y soluciones
    8. Captura de la prueba realizada (o explicar cómo la realizó)
    9. Conclusiones finales
  • Pildora – Crear Imagen de Disco

    Pildora – Crear Imagen de Disco

    1. Descargar Clonezilla (la ISO correcta)

    Ve a la página oficial:

    https://a.fsdn.com/con/app/proj/clonezilla/screenshots/ocs-08-restoredisk.png/max/max/1?utm_source=chatgpt.com
    https://a.fsdn.com/con/app/proj/clonezilla/screenshots/ocs-01-bootmenu.png/max/max/1?utm_source=chatgpt.com

    Descarga Clonezilla Live (no la Server).
    La versión más típica es:

    • CPU: amd64 (si tu PC es moderno)
    • Tipo: ISO

    Ejemplo del archivo: clonezilla-live-3.x.x-amd64.iso


    2. Crear el USB en Windows (método fácil: Rufus)

    https://rufus.ie/pics/screenshot1_en.png?utm_source=chatgpt.com
    https://linuxiac.com/wp-content/uploads/2025/03/bootable-linux-ubs-on-linux-10.jpg?utm_source=chatgpt.com

    1. Descarga Rufus: https://rufus.ie
    2. Inserta el USB (mínimo 1–2 GB).
    3. En Rufus:
      • Device: tu USB
      • Boot selection: selecciona la ISO de Clonezilla
      • Partition scheme: MBR (compatibilidad máxima)
      • Target system: BIOS o UEFI
      • Deja el resto por defecto
    4. Pulsa Start
    5. Si pregunta por “ISO mode” o “DD mode”, elige ISO mode.

    Eso deja un USB arrancable sin dolor.



    3. Arrancar el PC desde el USB

    Reinicia y entra al menú de arranque (suele ser F12, F10, ESC, DEL según la placa). Elige el pendrive y verás el menú de Clonezilla.


    ¿Dónde guarda Clonezilla la imagen?

    Cuando arrancas Clonezilla y eliges device-image, te pregunta:

    Where to save the image?

    Y aquí seleccionas el “repositorio de imágenes” (la carpeta donde lo guardará).
    Estos son los cuatro destinos típicos:


    1. Otro USB o disco duro externo (la opción más usada)

    Esto es lo más cómodo:

    • Arrancas con el pendrive de Clonezilla
    • Conectas un segundo USB o un disco externo
    • Clonezilla lo detecta
    • Seleccionas una carpeta dentro de ese disco y ¡listo!

    Clonezilla creará algo como:

    /nombre_de_la_imagen/
    ├── blkdev.list
    ├── disk
    ├── parts
    ├── sda-mbr
    └── sda1.dd.img.gz
    

    La carpeta entera es la copia.