Saltar al contenido principal

Capítulo 9.1 - Aseguramiento de Permisos

Objetivos de Aprendizaje​

Al finalizar este capítulo, usted será capaz de:

  • Aplicar el principio de menor privilegio
  • Asegurar los permisos de archivos
  • Comprender los riesgos de permisos amplios
  • Auditar los permisos del sistema
  • Corregir permisos incorrectos

Principio de Menor Privilegio​

Concepto​

Otorgar solo los permisos necesarios, nada más.

Ventajas:

  • Reducción de la superficie de ataque
  • Limitación de daños
  • Cumplimiento de seguridad

Permisos Seguros​

Archivos Normales​

# Archivos de configuración
chmod 644 fichier.conf # rw-r--r--
chmod 600 fichier.conf # rw------- (privado)

# Scripts ejecutables
chmod 755 script.sh # rwxr-xr-x
chmod 700 script.sh # rwx------ (privado)

# Archivos sensibles
chmod 600 .ssh/id_rsa # Clave privada
chmod 644 .ssh/id_rsa.pub # Clave pública
chmod 700 .ssh/ # Directorio SSH

Directorios​

# Directorios normales
chmod 755 repertoire/ # rwxr-xr-x

# Directorios privados
chmod 700 repertoire/ # rwx------

# Directorios compartidos
chmod 775 shared/ # rwxrwxr-x
chmod 1777 /tmp # Sticky bit

Permisos Peligrosos​

A Evitar​

# 777 - Todos los permisos (¡PELIGROSO!)
chmod 777 fichier # ¡EVITAR!

# SUID/SGID innecesarios
chmod u+s script.sh # Verificar necesidad

# Directorios world-writable
chmod 777 repertoire/ # ¡EVITAR!

Detectar​

# Archivos con permisos amplios
find /home -type f -perm -o+w
find / -type f -perm 777 2>/dev/null

# Directorios world-writable
find / -type d -perm -o+w ! -path "/proc/*" 2>/dev/null

# Archivos SUID/SGID
find / -type f -perm /4000 2>/dev/null # SUID
find / -type f -perm /2000 2>/dev/null # SGID

Aseguramiento SSH​

Permisos Correctos​

# Directorio .ssh
chmod 700 ~/.ssh

# Claves privadas
chmod 600 ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_ed25519

# Claves públicas
chmod 644 ~/.ssh/id_rsa.pub
chmod 644 ~/.ssh/authorized_keys

# Config
chmod 600 ~/.ssh/config

Verificación​

# Script de verificación
#!/bin/bash
SSH_DIR="$HOME/.ssh"

if [ -d "$SSH_DIR" ]; then
# Verificar permisos del directorio
PERMS=$(stat -c "%a" "$SSH_DIR")
if [ "$PERMS" != "700" ]; then
echo "ATENCIÓN: .ssh debería ser 700, actualmente $PERMS"
fi

# Verificar claves privadas
for key in "$SSH_DIR"/id_*; do
if [ -f "$key" ] && [[ "$key" != *.pub ]]; then
PERMS=$(stat -c "%a" "$key")
if [ "$PERMS" != "600" ]; then
echo "ATENCIÓN: $key debería ser 600, actualmente $PERMS"
fi
fi
done
fi

Aseguramiento Cron​

Permisos Crontab​

# Crontab de usuario
chmod 600 ~/.crontab # Si archivo externo

# Verificar crontab del sistema
ls -l /etc/crontab
ls -l /etc/cron.d/*

Entorno Cron​

# Crontab seguro
PATH=/usr/bin:/bin
SHELL=/bin/bash
MAILTO=admin@example.com

# Usar rutas absolutas
0 2 * * * /usr/local/bin/backup.sh

# Redirigir salida
0 2 * * * /usr/local/bin/script.sh > /var/log/script.log 2>&1

# No usar variables no definidas

Scripts Cron Seguros​

#!/bin/bash
# Script cron seguro

# Opciones de seguridad
set -euo pipefail

# Rutas absolutas
SCRIPT_DIR="/usr/local/bin"
LOG_FILE="/var/log/mon-script.log"

# Función de logging
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" >> "$LOG_FILE"
}

# Verificaciones
if [ ! -f "$SCRIPT_DIR/config" ]; then
log "ERROR: Archivo de configuración faltante"
exit 1
fi

# Procesamiento...
log "Inicio de procesamiento"
# ...
log "Fin de procesamiento"

Auditoría de Permisos​

Script de Auditoría​

#!/bin/bash
# Auditoría de permisos

echo "=== Archivos world-writable ==="
find /home -type f -perm -o+w 2>/dev/null

echo "=== Directorios world-writable ==="
find /home -type d -perm -o+w 2>/dev/null

echo "=== Archivos SUID ==="
find /home -type f -perm /4000 2>/dev/null

echo "=== Archivos SGID ==="
find /home -type f -perm /2000 2>/dev/null

echo "=== Permisos SSH ==="
if [ -d ~/.ssh ]; then
ls -la ~/.ssh
fi

Corrección Automática​

#!/bin/bash
# Corregir permisos SSH

SSH_DIR="$HOME/.ssh"

if [ -d "$SSH_DIR" ]; then
chmod 700 "$SSH_DIR"

# Claves privadas
find "$SSH_DIR" -name "id_*" ! -name "*.pub" -exec chmod 600 {} \;

# Claves públicas
find "$SSH_DIR" -name "*.pub" -exec chmod 644 {} \;

# authorized_keys
[ -f "$SSH_DIR/authorized_keys" ] && chmod 600 "$SSH_DIR/authorized_keys"

# config
[ -f "$SSH_DIR/config" ] && chmod 600 "$SSH_DIR/config"

echo "Permisos SSH corregidos"
fi

Buenas Prácticas​

Archivos​

  • 644 para archivos normales
  • 600 para archivos sensibles
  • 755 para scripts ejecutables
  • 700 para scripts privados

Directorios​

  • 755 para directorios normales
  • 700 para directorios privados
  • 775 para directorios compartidos (con grupo)
  • 1777 para /tmp (sticky bit)

Verificaciones​

  • Auditar regularmente
  • Automatizar con scripts
  • Documentar excepciones
  • Revisar después de cambios

Resumen​

En este capítulo, usted ha aprendido:

Menor privilegio: Permisos mínimos necesarios
Aseguramiento: Permisos apropiados según el tipo
Detección: Encontrar permisos peligrosos
SSH: Permisos correctos para claves y configuración
Cron: Aseguramiento de scripts y entorno
Auditoría: Scripts para verificar y corregir


Próximos Pasos​

Capítulo 9.2: Configuración de sudo
Capítulo 9.3: Firewall


Capítulo creado el: Diciembre 2024