Categoría: Sistemas

  • UFW- Securizando  servicios de servidor WEB

    UFW- Securizando servicios de servidor WEB

    Configuración del Firewall en linux UFW

    Mediante el comando ufw podemos configurar el firewall de Linux de forma sencilla. Lo primero que debemos de hacer es ver si esta activo o no.

    sudo ufw status

    Esto nos mostrará la lista de puertos, o en su defecto si esta inactivo. El hecho de estar inactivo supone que tenemos todos los puertos abiertos, lo que es una seria vulnerabilidad.
    ![[Snag_5bd2428.png]]
    Para activarlo, escribimos:

    sudo ufw enable

    NOTA: Debemos tener en cuenta que si estamos conectados vía SSH por el puerto 22, al activar el firewall puede ser que nos expulse, si anteriormente no hemos abierto el puerto.

    Ahora podemos poner, sudo ufw status y nos retornara la configuración actual.

    ![[Snag_5c08db1.png]]
    En este caso, vemos que ya tenemos varios puertos abiertos dado que hemos instalado diferentes servicios.

    Lista de puertos comunes.
    Algunos de los puertos más importantes de los sistemas Linux suelen estar activados por defecto, aunque en algunos casos esto no se da. Hay que tener en cuenta que mantener SSH en el puerto 22 es considerado un riesgo a nivel de seguridad, por lo que se recomienda cambiarlo.

    | Puertos comunes |

    21 > FTP
    22 > SSH
    23 > SFTP
    25 > SMTP
    43 > WHOIS
    53 > Nameservers (sistema DNS)
    80 > HTTP (servidor web, ya sea Apache, Nginx u otro)
    110 > Protocolo POP utilizado para mail.
    111 > rpcbind
    143 > Protocolo IMAP utilizado para mail.
    443 > HTTP seguro (utilizado por certificados SSL a nivel web, https://)
    953 > rndc
    993 > IMAP bajo SSL
    995 > Protocolo POP con SSL
     
    2082 > Panel cPanel
    2083 > cPanel con SSL
    2086 > Panel WHM
    2087 > WHM con SSL
    2095 > Webmail
    2096 > Webmail con SSL
     
    3306 > MySQL
    4643 > Virtuosso
    9999 > Urchin
     
    Panel Plesk > 8443
    Panel DirectAdmin > 2222
    Panel Webmin > 10000 |
    Veamos ahora como abrir o cerrar los puertos según las necesidades de cada servidor.

    Una forma sencilla es indicar directamente el nombre del servicio utilizando la opción de allow.

    sudo ufw allow ssh

    Sin embargo, podemos escribir la regla equivalente especificando el puerto en vez del nombre del servicio. Por ejemplo, este comando funciona como el anterior:

    sudo ufw allow 22

    Si deseamos ver algo mas de información del estado de los puertos, podemos poner

    sudo ufw status verbose

    Otra opción si deseamos habilitar varios puertos que estan consecutivos, podemos indicar el rango.

    sudo ufw allow 6000:6007 /tcp
    sudo ufw allow 6000:6007 /udp

    Esto abriría los puertos del 6000 al 6007

    Cerrar puertos.

    Si deseamos cerrar un puerto que tengamos abierto, podemos cerrarlo con.

    sudo ufw deny 80 

    Esto cerraría el puerto 80 de http evitando conexiones al servidor.

    Habilitar o cerrar puertos con orígenes definidos.

    En ocasiones para mayor seguridad queremos abrir los puertos, pero solo para acceder desde una dirección ip concreta, esto lo realizaremos añadiendo la opción from

      sudo ufw allow from 03.0.113.4

    De este modo solo daremos acceso al equipo con la ip designada. Aunque lo mas común es determinar el o los puertos concretos que queremos que pueda acceder.

     Por ejemplo, si desea permitir que 203.0.113.4 se conecte al puerto 22 (SSH), utilice este comando:

    sudo ufw allow from 203.0.113.4 to any port 22

    Por último si estamos en una infraestructura con diferentes subredes, podemos determinar cual de ellas pueden acceder o no. Por ejemplo una subred para un departamento de una empresa en concreto.

    sudo ufw allow from 203.0.113.0/24

    o si queremos especificar el puerto

    sudo ufw allow from 203.0.113.0/24 to any port 22

    Por numero de regla

    Si utiliza el número de regla para eliminar reglas de firewall, lo primero que le convendrá hacer es obtener una lista de reglas de firewall. El comando “UFW status” tiene una opción para mostrar números junto a cada regla, como se muestra aquí:

    sudo ufw status numbered
    Numbered Output:Status: active
    
         To                         Action      From
         --                         ------      ----
    [ 1] 22                         ALLOW IN    15.15.15.0/24
    [ 2] 80                         ALLOW IN    Anywhere

    Si queremos eliminar la regla 2, que permite las conexiones del puerto 80 (HTTP), podemos especificarlo en un comando “UFW delete”

    sudo ufw delete 2

    Otra forma es hacerlo sin numerar poniendo directamente el servicio a borrar o el numero de puerto. Por ejemplo: desea eliminar la regla allow http, podría escribir lo siguiente:

    sudo ufw delete allow http

    También podría especificar la regla mediante allow 80 en vez de hacerlo por nombre de servicio:

    sudo ufw delete allow 80

    Otros comandos útiles pueden ser:

    Si decide que no desea utilizar UFW, puede desactivarlo con este comando:

    sudo ufw disable

    Si ya configuró reglas de UFW y decide que desea empezar de nuevo, puede utilizar el comando “reset”:

    sudo ufw reset
  • .htaccess EN APACHE (Control, Seguridad y SEO)

    .htaccess EN APACHE (Control, Seguridad y SEO)

    El objetivo de esta práctica es aprender a utilizar archivos .htaccess en un servidor Apache para configurar:

    • Autenticación
    • Gestión de errores
    • Redirecciones
    • Reescritura de URLs
    • Cabeceras de seguridad
    • Control de indexación en buscadores
    • Ocultación y restricción de carpetas
    • Optimización mediante caché y compresión

    Se realizará de forma práctica para observar los efectos directamente.


    Requisitos

    • Apache instalado y funcionando
    • Permisos para editar archivos en /var/www/html/ o carpeta equivalente

    Parte 1: Activación de .htaccess en Apache

    1. Editar el VirtualHost y localizar:
    <Directory /var/www/html>
       AllowOverride None
       Require all granted
    </Directory>
    
    1. Cambiar None por All:
    AllowOverride All
    
    1. Reiniciar Apache:
    sudo systemctl restart apache2
    
    1. Crear un archivo /var/www/html/.htaccess con este contenido:
    AddDefaultCharset UTF-8
    

    Si no hay errores, el .htaccess está funcionando.

    Para editar el VirtualHost típico en Ubuntu/Debian:

    1. Abrir el archivo de sitio por defecto:
    sudo nano /etc/apache2/sites-available/000-default.conf
    
    1. Buscar un bloque <VirtualHost *:80> que contiene algo como:
    <VirtualHost *:80>
        DocumentRoot /var/www/html
        ...
        <Directory /var/www/html>
            Options Indexes FollowSymLinks
            AllowOverride None
            Require all granted
        </Directory>
    </VirtualHost>
    
    1. Aquí vive la línea “AllowOverride” que decide si .htaccess es un ciudadano con derechos o un fantasma ignorado. Cambiar AllowOverride None por AllowOverride All.
    2. Guardar, cerrar y reiniciar Apache:
    sudo systemctl restart apache2
    

    Parte 2: Autenticación Básica con .htaccess

    1. Crear una carpeta /var/www/html/admin/ con un index.html.
    2. Crear /var/www/html/.htpasswd generando un usuario:
    htpasswd -c /var/www/html/.htpasswd admin
    
    1. Crear /var/www/html/admin/.htaccess:
    AuthType Basic
    AuthName "Zona restringida"
    AuthUserFile /var/www/html/.htpasswd
    Require valid-user
    

    Entrar a http://servidor/admin y probar el acceso.

    htpasswd

    htpasswd es una pequeña herramienta de Apache que fabrica archivos de credenciales para la autenticación HTTP básica. Básica significa sin florituras: usuario/contraseña codificados en Base64 y enviados en cabecera; útil para poner una puerta rápida delante de una carpeta, una página de administración o un endpoint casero.

    Funciona generando un fichero (normalmente .htpasswd) con uno o varios usuarios y sus contraseñas hash. Este fichero luego lo consumes desde .htaccess o desde la configuración del VirtualHost.

    1. Abres la terminal en tu servidor.
    2. Ejecutas:
    htpasswd -c /ruta/al/fichero/.htpasswd nombreusuario
    

    El -c crea el fichero. Si ya existe y quieres añadir otro usuario, lo omites:

    htpasswd /ruta/al/fichero/.htpasswd otro_usuario
    

    Al ejecutar, te pedirá contraseña y te la meterá en el fichero con hash. El algoritmo por defecto suele ser bcrypt/MD5 APR según versión; lo importante es que nunca guarda contraseñas en claro.

    Un .htpasswd típico se ve así:

    juan:$apr1$9tDRSv/.v8BxP1kF/Np7A.
    maria:$apr1$OQy4dRxr$2aCdBORded8HNoo.t2GxU.
    

    Luego en .htaccess pones la compuerta:

    AuthType Basic
    AuthName "Zona restringida"
    AuthUserFile /ruta/al/fichero/.htpasswd
    Require valid-user
    

    El navegador, al entrar en esa carpeta, lanzará un cuadro de login del siglo pasado (que sigue cumpliendo su función). En HTTPS está bien para control de acceso simple; en HTTP es como mandar postales sin sobre.

    Parte 3: Gestión de Errores Personalizados

    1. Crear 404.html y 403.html en la raíz.
    2. Añadir en /var/www/html/.htaccess:
    ErrorDocument 404 /404.html
    ErrorDocument 403 /403.html
    
    1. Probar introduciendo una URL inexistente.

    Parte 4: Cabeceras de Seguridad

    Añadir en /var/www/html/.htaccess:

    Header set X-Frame-Options "DENY"
    Header set X-Content-Type-Options "nosniff"
    Header set X-XSS-Protection "1; mode=block"
    Header set Referrer-Policy "no-referrer-when-downgrade"
    Header set Permissions-Policy "geolocation=()"
    

    Explicación breve:

    • X-Frame-Options: DENY Esta prohíbe que tu página se cargue dentro de un <iframe> de otra página. ¿Para qué sirve? Para evitar el clickjacking, un truco donde otra web maliciosa mete la tuya en un iframe invisible y coloca botones encima, de manera que el usuario cree estar haciendo una cosa y está pulsando otra. Con DENY, el navegador dice “no me meto en iframes de nadie” y así se acaba el truco de magia.
    • X-Content-Type-Options: nosniff Los navegadores suelen ser listillos: si reciben un archivo con un tipo incorrecto, intentan adivinarlo (“sniffing MIME”). Eso abre una puerta curiosa: si subes un .png que en realidad es JavaScript con una cabecera errónea, algunos navegadores podrían intentar ejecutarlo. Con nosniff el navegador promete no “oler” el tipo y usar sólo lo declarado. Evita ciertos vectores de XSS y descarga ejecutable camuflada.
    • X-XSS-Protection: 1; mode=block Esto es un modo antiguo del filtro anti-XSS integrado en algunos navegadores. Le indica al navegador que si detecta un ataque de Cross-Site Scripting reflejado, bloquee la carga de la página en vez de intentar sanearla. Hoy en día está un poco de capa caída (Chrome lo retiró en favor de Content-Security-Policy) pero en entornos legacy todavía es un salvavidas aceptable.
    • Referrer-Policy: no-referrer-when-downgrade Cada vez que pulsas un enlace, el navegador suele enviar una cabecera Referer (sin la segunda “r”, por herencia histórica) indicando desde qué página vienes. Esa miguita de pan puede revelar urls privadas, parámetros de sesión o rutas internas. no-referrer-when-downgrade ordena no enviar el Referer cuando pasas de HTTPS a HTTP (es decir, no “degradar” seguridad). Existen políticas más estrictas (strict-origin, no-referrer, etc.), pero esta ya reduce filtraciones triviales.
    • Permissions-Policy: geolocation=() Aquí entramos en una política moderna que controla APIs del navegador. Es como darle a tu web un panel de permisos: cámara, micrófono, geolocalización, sensores… geolocation=() significa “no concedo geolocalización a nadie, ni siquiera a mí”. Puedes ser más granular, por ejemplo geolocation=(self) permitiría sólo a tu propio dominio. Eso reduce el “exceso de curiosidad” del navegador y de scripts de terceros.
    • El resumen conceptual es que no protegen tu código del mal, sino que recortan la superficie de comportamiento del navegador, reduciendo trucos clásicos: iframes invisibles, tipos MIME engañosos, ejecución de scripts inesperados y filtración de metadatos. Es parecido a darle menos herramientas a un niño travieso: no podrá arreglar un coche, pero tampoco desmontar la casa.

    Más allá de estas cabeceras existen otras piezas más finas como Content-Security-Policy (CSP), que es una gramática entera para decir “qué scripts, imágenes, estilos y conexiones están permitidos”. CSP convierte el navegador en una especie de sandbox configurable, y ahí es donde el mundo del XSS moderno se vuelve deporte olímpico.

    Parte 5: Redirecciones HTTP

    1. Redirección permanente (301):
    Redirect 301 /viejo.html /nuevo.html
    
    1. Temporal (302):
    Redirect 302 /promo /promo-2026
    

    Recomendación: usar 301 solo cuando sea definitivo.

    Cuando haces una redirección 302 (Found / Moved Temporarily) estás diciendo dos cosas:

    — Primero: “el recurso sigue existiendo en la URL original, pero por ahora estoy sirviendo desde otra URL”.

    — Segundo: “no actualices tus mapas, no caches esto como definitivo”.

    Consecuencias prácticas:

    1. Los navegadores no la memorizan como algo fijo.
      No guardan en disco que la URL ha cambiado. Si mañana quitas la redirección, el navegador volverá a pedir la original sin pelearse contigo. Es como poner un cartel de “pasen por la puerta lateral mientras pintamos la principal”.
    2. Los buscadores no transfieren ‘peso’ SEO.
      A diferencia de un 301, Google y compañía no asumen que la URL nueva es la buena. Mantienen la original en sus índices. Es la forma de decirles: “no reorganices tu mapa, solo estoy haciendo obras”.
    3. No cambia los enlaces de terceros.
      Si un usuario sigue un enlace desde otra web, la redirección lo mueve, pero esa web no actualizará su enlace, porque no hay garantía de permanencia.
    4. Sirve para pruebas y mantenimiento.
      Si estás desplegando un nuevo diseño, probando un AB testing o moviendo tráfico durante un rato, una 302 te da una especie de reversibilidad instantánea.

    En contraste, un 301 (Moved Permanently) es como una mudanza registrada en el ayuntamiento: los navegadores pueden cachearla, los buscadores actualizan índices y pasan “autoridad” a la nueva URL, y los cambios tardan más en revertirse porque todos asumen que era definitivo.

    Lo temporal no cambia la cartografía del navegador ni del buscador, solo redirige el tráfico en tiempo real. Es útil cuando estás probando algo, cuando tienes dudas o cuando quieres mantener la puerta original como referencia verdadera. Luego, cuando estés seguro de la mudanza, ya haces el 301 y los mapas del mundo cambian de sitio.

    Parte 6: Reescritura de URLs con mod_rewrite

    La reescritura de URLs permite transformar una URL solicitada por el navegador en otra diferente de forma interna, sin que el usuario lo note. Se utiliza para crear URLs más limpias, eliminar extensiones (.php, .html) o implementar un patrón MVC (Front Controller).


    6.1 Activación del módulo

    Activar el módulo responsable de la reescritura:

    sudo a2enmod rewrite
    sudo systemctl restart apache2
    

    Sin este módulo, las reglas de reescritura no funcionarán.


    6.2 Requisito en el VirtualHost

    Dentro del VirtualHost debe estar permitido el uso de .htaccess. En el bloque <Directory> debe existir:

    AllowOverride All
    

    Si estuviera en None, Apache ignorará las reglas del .htaccess.


    6.3 Ejemplo simple: eliminar extensión

    Crear un archivo hola.html en el DocumentRoot (/var/www/html/).

    Crear o editar el .htaccess en el mismo directorio con:

    RewriteEngine On
    RewriteRule ^hola$ hola.html [L]
    

    • RewriteEngine On → activa el motor de reescritura
    • RewriteRule ^hola$ hola.html → si se solicita /hola, entregar hola.html
    • [L] → indica que esta es la última regla si coincide

    Prueba

    Acceder en el navegador:

    http://servidor/hola
    

    Aunque el archivo real sea hola.html, el navegador verá una URL sin extensión.


    6.4 Ejemplo avanzado: patrón MVC (Front Controller)

    Este patrón es común en frameworks y sitios dinámicos. La idea es que todas las peticiones que no sean archivos ni carpetas reales se envían a index.php.

    6.4.1 Código

    En el .htaccess del DocumentRoot:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.+)$ index.php?route=$1 [L,QSA]
    

    6.4.2 Explicación de las condiciones

    • RewriteCond %{REQUEST_FILENAME} !-f
      → si lo solicitado no es un archivo físico
    • RewriteCond %{REQUEST_FILENAME} !-d
      → si lo solicitado no es un directorio

    6.4.3 Explicación de la regla

    • ^(.+)$ → coincide con cualquier ruta solicitada
    • index.php?route=$1 → envía la ruta al script index.php mediante el parámetro route
    • [L,QSA]:
      • L → última regla si coincide
      • QSA → preserva parámetros existentes (?id=3 etc.)

    6.5 Demostración práctica

    Crear un archivo index.php con:

    <?php
    echo "Ruta solicitada: " . ($_GET['route'] ?? 'ninguna');
    ?>
    

    Acceder desde el navegador a distintas rutas:

    http://servidor/productos
    http://servidor/usuarios/editar/7
    http://servidor/pepito
    

    Salida esperada:

    Ruta solicitada: productos
    Ruta solicitada: usuarios/editar/7
    Ruta solicitada: pepito
    

    Esto confirma que index.php captura todas las rutas y puede decidir qué controlador o vista cargar.


    6.6 Caso especial: archivos reales

    Si se accede a:

    /style.css
    /logo.png
    /index.php
    

    o cualquier recurso físico, NO pasa por la reescritura porque las condiciones lo impiden:

    RewriteCond %{REQUEST_FILENAME} !-f   → archivo físico
    RewriteCond %{REQUEST_FILENAME} !-d   → directorio físico
    

    De esta forma no se rompe el funcionamiento del sitio.


    6.7 Uso habitual en aplicaciones web

    Este sistema se utiliza para:

    • URLs amigables para SEO
    • Frameworks PHP (Laravel, Symfony, CodeIgniter)
    • Paneles de administración
    • APIs REST
    • Front Controllers (único punto de entrada)

    En lugar de:

    index.php?route=usuarios/listar
    

    se obtiene:

    /usuarios/listar
    

    más limpio y apto para buscadores.

    La reescritura de URLs no cambia el archivo real que se ejecuta, solo traduce internamente la ruta.
    El usuario ve una URL limpia y el servidor recibe una ruta estructurada para procesar.

    Parte 7: Control del Listado de Directorios

    Para evitar que se muestren archivos:

    Options -Indexes
    

    Crear una carpeta sin index.html y comprobar el resultado.


    Parte 8: Forzar HTTPS

    Añadir:

    RewriteEngine On
    RewriteCond %{HTTPS} !=on
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
    

    Requiere certificado SSL configurado.


    Parte 9: Cacheo y Compresión

    Cache de archivos (si mod_expires activado):

    <IfModule mod_expires.c>
       ExpiresActive On
       ExpiresByType image/jpeg "access plus 30 days"
       ExpiresByType text/css "access plus 7 days"
       ExpiresByType application/javascript "access plus 7 days"
    </IfModule>
    

    Compresión (si mod_deflate activado):

    SetOutputFilter DEFLATE
    

    Cuando decíamos “cache de archivos (si mod_expires activado)” nos referíamos a una función del servidor web Apache diseñada para decirle al navegador cuánto tiempo puede guardar ciertos archivos sin volver a descargarlos.

    En castellano llano:

    La caché es la costumbre del navegador de guardar copias locales de cosas que ya descargó (como imágenes, CSS o JavaScript) para no pedirlas de nuevo al servidor cada vez que visitas la página. Si ya tienes el logo en tu disco, ¿para qué volver a bajarlo?

    El módulo mod_expires es una parte de Apache que permite controlar cuánto dura esa copia local, poniendo un “fecha de caducidad” en las respuestas.

    Si lo activas y configurás reglas como:

    ExpiresByType image/png "access plus 30 days"
    

    Estás diciendo: “los archivos PNG pueden vivir 30 días en la caché del navegador”.

    ¿Resultado práctico? La primera visita carga todo desde el servidor, las siguientes cargan desde disco; la web vuela y el servidor descansa.

    Esencialmente, es un acuerdo temporal entre servidor y navegador, parecido a:

    – Servidor: “Este archivo apenas cambia, guárdalo un mes”.
    – Navegador: “Perfecto, no te molesto hasta que pase ese mes”.

    En el ecosistema web, la caché es una de las razones por las que las páginas parecen “instantáneas” después de la primera visita, y una forma elegante de reducir gasto de CPU, ancho de banda y tiempo de espera. Sin caché, cada visita sería como entrar por primera vez en un supermercado cada día: todo el mundo preguntando todo el rato dónde están los pasillos.

    Parte 10: Interacción con Buscadores (SEO y Indexación)

    robots.txt

    Crear en raíz del sitio:

    User-agent: *
    Disallow: /admin/
    Disallow: /backup/
    

    Nota: los bots maliciosos pueden ignorarlo.

    Evitar indexación con HTTP (X-Robots-Tag)

    En .htaccess:

    Header set X-Robots-Tag "noindex, nofollow"
    

    Usos habituales:

    • PDFs
    • Paneles internos
    • Carpetas privadas

    Bloquear bots por User-Agent

    Ejemplo:

    RewriteEngine On
    RewriteCond %{HTTP_USER_AGENT} googlebot [NC]
    RewriteRule ^ - [R=403]
    

    Parte 11: Ocultación y Restricción de Carpetas

    Impedir acceso web a una carpeta:

    Dentro de la carpeta crear .htaccess:

    Require all denied
    

    O por archivo:

    <FilesMatch "\.(sql|bak|zip|tar)$">
       Require all denied
    </FilesMatch>
    

    Restringir por IP:

    Require ip 192.168.1.0/24
    

    Evitar ejecución de PHP en carpetas de subida:

    <FilesMatch "\.(php|phtml)$">
       Require all denied
    </FilesMatch>
    

    Muy útil en uploads/ o storage/.


    Con .htaccess es posible:

    • Restringir acceso
    • Personalizar errores
    • Crear URLs amigables
    • Controlar bot y rastreadores
    • Proteger información sensible
    • Forzar HTTPS
    • Mejorar SEO
    • Mejorar rendimiento

    Advertencia para producción:

    • .htaccess se evalúa en cada petición
    • Incrementa carga del servidor
    • En grandes entornos se recomienda configurar desde VirtualHost

  • ¿Qué hace systemctl?

    ¿Qué hace systemctl?

    Un servicio es un proceso de fondo (daemon) que se ejecuta sin cliente directo: servidor web, base de datos, cupón/leche… cosas que viven en silencio.

    systemd organiza los servicios como units (unidades). Una unit puede ser:

    • service → servicios
    • timer → programadores sustitutos del cron
    • mount → puntos de montaje
    • socket → servicios socket-activados
    • y más fauna, pero hoy nos interesa el zoológico *.service.

    ¿Qué hace systemctl?

    systemctl permite:

    • Iniciar/detener un servicio.
    • Habilitarlo o deshabilitarlo en arranque.
    • Ver logs y estado.
    • Ver dependencias.

    Su sintaxis general:

    systemctl <acción> <unidad>

    Ejemplo:

    systemctl start apache2.service

    Ver servicios instalados

    Esto ayuda a explorar el sistema:

    Servicios activos ahora mismo:

    
    
    
    
    
    systemctl list-units --type=service --state=running
    

    Todos los servicios cargados (activos + inactivos):

    
    
    
    
    
    systemctl list-units --type=service
    

    Servicios instalados en el sistema (cargados y no cargados):

    
    
    
    
    
    systemctl list-unit-files --type=service
    

    Estado de un servicio

    Es la acción más frecuente.

    
    
    
    
    
    systemctl status apache2.service
    

    Muestra:

    • PID
    • Logs recientes
    • “Loaded” (si está instalado)
    • “Active” (si está corriendo)

    La magia aquí es que systemd integra parte del journal, así que ya da contexto.


    Iniciar / Detener / Reiniciar

    Aquí es donde la clase empieza a levantar humo.

    Iniciar servicio:

    
    
    
    
    
    sudo systemctl start apache2.service
    

    Detener:

    
    
    
    
    
    sudo systemctl stop apache2.service
    

    Reiniciar de forma limpia:

    
    
    
    
    
    sudo systemctl restart apache2.service
    

    Recargar configuración sin detener el servicio (si lo soporta, como Nginx):

    
    
    
    
    
    sudo systemctl reload nginx.service
    

    Para puristas: restart tira y relanza, reload solo recarga configuración.


    Habilitar en el arranque

    Esto conecta systemd con los “targets” (equivalentes modernos de runlevels).

    Habilitar:

    
    
    
    
    
    sudo systemctl enable apache2.service
    

    Deshabilitar:

    
    
    
    
    
    sudo systemctl disable apache2.service
    

    Comprobar si está habilitado:

    
    
    
    
    
    systemctl is-enabled apache2.service
    

    Esto crea o elimina enlaces simbólicos en /etc/systemd/system/.


    Ver logs de un servicio

    journalctl es el diario íntimo del sistema. Útil para debugging y para descubrir que olvidaste escapar ese símbolo en la config de Postfix.

    Logs recientes del servicio:

    
    
    
    
    
    journalctl -u apache2.service
    

    Logs en tiempo real (“modo Matrix”):

    
    
    
    
    
    journalctl -u apache2.service -f
    

    Logs de hoy con timestamps:

    
    
    
    
    
    journalctl -u apache2.service --since today
    

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