Práctica 2 — Comandos Básicos
Ejercicio 2.1 — Análisis de logs del servidor web
Sección titulada “Ejercicio 2.1 — Análisis de logs del servidor web"Contexto
Sección titulada “Contexto"Un servidor web guarda un registro de todas las peticiones que recibe. Tu misión es analizar ese log con herramientas de terminal para extraer información útil: qué IPs se conectan más, cuántos errores hay, etc.
Setup — ejecutar una sola vez
Sección titulada “Setup — ejecutar una sola vez"# Crea los directorios de trabajomkdir -p ~/practica2/logs ~/practica2/backup
# Descarga un log real de un servidor nginx (~50.000 líneas)wget -q \ "https://raw.githubusercontent.com/elastic/examples/master/Common%20Data%20Formats/nginx_logs/nginx_logs" \ -O ~/practica2/logs/access.log
# Comprueba que se descargó correctamentewc -l ~/practica2/logs/access.logDeberías ver un número cercano a 51.462 líneas. Si ves 0 o un error, el servidor de GitHub puede estar caído — espera unos minutos y vuelve a intentarlo.
¿Cómo es el log?
Sección titulada “¿Cómo es el log?"Cada línea tiene este formato:
216.46.173.126 - - [04/Jan/2015:05:13:42 +0000] "GET /blog/ HTTP/1.1" 200 9459 "-" "Mozilla/5.0"Los campos son: IP - - [fecha] "MÉTODO /ruta HTTP/versión" CÓDIGO bytes "referer" "agente"
Tarea 1 — Contar IPs únicas
Sección titulada “Tarea 1 — Contar IPs únicas"¿Cuántas IPs diferentes han accedido al servidor?
awk '{print $1}' ~/practica2/logs/access.log | sort -u | wc -lawk '{print $1}' extrae el primer campo (la IP).
sort -u ordena y elimina duplicados.
wc -l cuenta las líneas resultantes.
Anota el resultado.
Tarea 2 — Top 10 IPs más activas
Sección titulada “Tarea 2 — Top 10 IPs más activas"¿Quién ha hecho más peticiones?
awk '{print $1}' ~/practica2/logs/access.log | sort | uniq -c | sort -rn | head -10uniq -c cuenta las repeticiones de cada IP.
sort -rn ordena numéricamente en orden descendente.
Guarda el resultado en un archivo:
awk '{print $1}' ~/practica2/logs/access.log | sort | uniq -c | sort -rn | head -10 \ > ~/practica2/backup/top10_ips.txt
cat ~/practica2/backup/top10_ips.txtTarea 3 — Contar errores 404
Sección titulada “Tarea 3 — Contar errores 404"Los errores 404 significan que el cliente pidió una página que no existe:
grep ' 404 ' ~/practica2/logs/access.log | wc -lAnota cuántos hay.
Tarea 4 — Ver qué rutas dan más 404
Sección titulada “Tarea 4 — Ver qué rutas dan más 404"grep ' 404 ' ~/practica2/logs/access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10$7 es el campo de la ruta (el URL).
Tarea 5 — Comprimir el log para archivar
Sección titulada “Tarea 5 — Comprimir el log para archivar"tar -czvf ~/practica2/backup/access.log.tar.gz ~/practica2/logs/access.log
# Verifica que el archivo existe y su tamañols -lh ~/practica2/backup/Un log de 10 MB comprimido suele reducirse a 1-2 MB. Comprueba la diferencia.
Ejercicio 2.2 — Permisos y estructura de archivos
Sección titulada “Ejercicio 2.2 — Permisos y estructura de archivos"Contexto
Sección titulada “Contexto"Vas a crear la estructura de directorios de un proyecto web compartido entre dos desarrolladores. Cada directorio tiene requisitos de acceso diferentes.
Setup — ejecutar una sola vez
Sección titulada “Setup — ejecutar una sola vez"# Crea los usuarios (si ya existen, el error es inofensivo)sudo useradd -m alicesudo useradd -m bob
# Establece contraseñas simples para las pruebasecho "alice:linux123" | sudo chpasswdecho "bob:linux123" | sudo chpasswd
# Crea la estructura de directorios del proyectosudo mkdir -p /var/www/proyecto/{public,private,logs}
# Crea el grupo del equipo de desarrollosudo groupadd webdevs 2>/dev/null || echo "El grupo ya existe"
# Verifica el estado inicial (permisos por defecto)ls -la /var/www/proyecto/Objetivo de permisos
Sección titulada “Objetivo de permisos"| Directorio | Propietario | Grupo | Permisos | ¿SGID? | ¿Por qué? |
|---|---|---|---|---|---|
public/ | root | webdevs | 775 | ✅ Sí | El equipo puede leer y escribir; los archivos nuevos heredan el grupo |
private/ | root | root | 700 | ❌ No | Solo root puede entrar |
logs/ | root | webdevs | 754 | ❌ No | El equipo solo puede leer los logs, no escribirlos |
Tarea 1 — Añadir alice y bob al grupo
Sección titulada “Tarea 1 — Añadir alice y bob al grupo"sudo usermod -aG webdevs alicesudo usermod -aG webdevs bob
# Verifica que están en el grupogetent group webdevsDeberías ver algo como: webdevs:x:1002:alice,bob
Tarea 2 — Asignar propietarios y permisos
Sección titulada “Tarea 2 — Asignar propietarios y permisos"# public: propietario root, grupo webdevs, permisos 775sudo chown root:webdevs /var/www/proyecto/publicsudo chmod 775 /var/www/proyecto/public
# private: solo rootsudo chmod 700 /var/www/proyecto/private
# logs: grupo puede leer pero no escribirsudo chown root:webdevs /var/www/proyecto/logssudo chmod 754 /var/www/proyecto/logsTarea 3 — Activar el bit SGID en public/
Sección titulada “Tarea 3 — Activar el bit SGID en public/"El bit SGID (Set Group ID) hace que cualquier archivo creado dentro de public/ herede automáticamente el grupo webdevs, aunque lo cree un usuario diferente:
sudo chmod g+s /var/www/proyecto/public
# Verifica: debe aparecer una 's' en los permisos del grupols -la /var/www/proyecto/El resultado de ls -la para public/ debe ser: drwxrwsr-x root webdevs
La s en la posición del bit de ejecución del grupo confirma que el SGID está activo.
Tarea 4 — Verificar que los permisos funcionan
Sección titulada “Tarea 4 — Verificar que los permisos funcionan"# Prueba que alice puede escribir en publicsudo -u alice touch /var/www/proyecto/public/prueba-alice.txtls -la /var/www/proyecto/public/# El grupo del archivo debe ser 'webdevs', no 'alice'
# Prueba que alice NO puede escribir en privatesudo -u alice touch /var/www/proyecto/private/intento.txt# Debe dar: Permission denied
# Prueba que alice puede leer logs pero no escribirsudo -u alice ls /var/www/proyecto/logs/ # Debe funcionarsudo -u alice touch /var/www/proyecto/logs/a.txt # Debe fallar📤 Bloque de entrega
Sección titulada “📤 Bloque de entrega"Ejecuta esto y lleva la salida al profesor:
echo "=== ENTREGA PRÁCTICA 2 ===" && \echo "" && \echo "--- 2.1: Top 10 IPs ---" && \cat ~/practica2/backup/top10_ips.txt && \echo "" && \echo "--- 2.1: Errores 404 ---" && \grep ' 404 ' ~/practica2/logs/access.log | wc -l && \echo "" && \echo "--- 2.1: Archivo comprimido ---" && \ls -lh ~/practica2/backup/access.log.tar.gz && \echo "" && \echo "--- 2.2: Permisos del proyecto ---" && \ls -la /var/www/proyecto/ && \echo "" && \echo "--- 2.2: Grupos de alice y bob ---" && \groups alice && groups bob