Control de Acceso SSH Basado en Active Directory mediante SSSD en Linux

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

En entornos empresariales donde se integra Linux con Active Directory (AD), es común que se quiera restringir el acceso SSH solo a determinados usuarios o grupos. Este artículo presenta un script Bash que automatiza la integración de un sistema Linux con un dominio AD y restringe el acceso SSH únicamente a los miembros de un grupo específico ubicado dentro de una unidad organizativa (OU) concreta.

Objetivo del Script

El propósito del script es:

  • Unir un sistema Linux a un dominio de Active Directory.
  • Configurar SSSD (System Security Services Daemon) como proveedor de identidades y autenticación.
  • Restringir el acceso SSH a usuarios pertenecientes a un grupo determinado dentro de una OU específica.
  • Asegurar la creación automática de directorios home para usuarios de dominio al iniciar sesión.
#!/bin/bash

set -e

DOMINIO="midominio.local"
REALM="${DOMINIO^^}"
OU_PERMITIDA="OU=PermitidosSSH,DC=midominio,DC=local"  # Ajusta según tu AD
GRUPO_AD="PermitidosSSH"  # CN del grupo dentro de la OU

echo "[INFO] Detectando distribución..."
if [ -f /etc/os-release ]; then
    . /etc/os-release
    DISTRO=$ID
else
    echo "[ERROR] No se puede detectar la distribución."
    exit 1
fi

echo "[INFO] Instalando paquetes necesarios..."
if [[ "$DISTRO" == "debian" || "$DISTRO" == "ubuntu" ]]; then
    apt update
    apt install -y sssd sssd-tools libnss-sss libpam-sss oddjob oddjob-mkhomedir
elif [[ "$DISTRO" == "centos" || "$DISTRO" == "rhel" || "$DISTRO" == "rocky" || "$DISTRO" == "almalinux" ]]; then
    yum install -y sssd sssd-tools oddjob oddjob-mkhomedir authselect
else
    echo "[ERROR] Distribución no soportada: $DISTRO"
    exit 1
fi

echo "[INFO] Configurando creación automática de directorios home..."
if [[ "$DISTRO" == "debian" || "$DISTRO" == "ubuntu" ]]; then
    pam_file="/etc/pam.d/common-session"
    if ! grep -q "pam_mkhomedir.so" "$pam_file"; then
        echo "session required pam_mkhomedir.so skel=/etc/skel umask=0077" >> "$pam_file"
    fi
else
    # En RHEL/CentOS
    authselect select sssd with-mkhomedir --force || true
fi

echo "[INFO] Configurando SSSD para restringir acceso SSH a grupo en OU específica..."

cat >/etc/sssd/sssd.conf <<EOF
[sssd]
domains = ${DOMINIO}
config_file_version = 2
services = nss, pam, ssh

[domain/${DOMINIO}]
ad_domain = ${DOMINIO}
krb5_realm = ${REALM}
realmd_tags = manages-system joined-with-samba
cache_credentials = True
id_provider = ad
access_provider = ldap
ldap_access_order = filter
ldap_access_filter = (memberOf=CN=${GRUPO_AD},${OU_PERMITIDA})
default_shell = /bin/bash
fallback_homedir = /home/%u
ldap_id_mapping = true
EOF

chmod 600 /etc/sssd/sssd.conf

echo "[INFO] Reiniciando servicios de SSSD..."
systemctl restart sssd

echo "[INFO] Configurando SSH para permitir inicio de sesión con usuarios de dominio..."
sshd_config="/etc/ssh/sshd_config"

if ! grep -q "^UsePAM yes" "$sshd_config"; then
    echo "UsePAM yes" >> "$sshd_config"
fi

# Puedes descomentar si quieres restringir por AllowGroups en SSH además del filtro de SSSD
# echo "AllowGroups domain^${GRUPO_AD}@${REALM}" >> "$sshd_config"

systemctl restart ssh

echo "[INFO] Configuración completada. Solo los usuarios del grupo '${GRUPO_AD}' en la OU '${OU_PERMITIDA}' pueden iniciar sesión SSH."

Características del Script

1. Detección de la Distribución

El script comienza detectando si el sistema operativo es una distribución basada en Debian (como Ubuntu) o en RHEL (como CentOS, AlmaLinux o Rocky Linux), lo cual determina el gestor de paquetes y algunas configuraciones específicas.

. /etc/os-release
DISTRO=$ID

2. Instalación de Paquetes Requeridos

Dependiendo de la distribución, instala los paquetes necesarios para la autenticación basada en AD:

  • sssd, sssd-tools, libnss-sss, libpam-sss, oddjob, oddjob-mkhomedir
  • En RHEL/CentOS, también incluye authselect para gestionar PAM.

3. Creación Automática de Directorios Home

Se configura pam_mkhomedir.so para crear automáticamente el directorio /home/usuario la primera vez que un usuario inicia sesión.

echo "session required pam_mkhomedir.so skel=/etc/skel umask=0077" >> /etc/pam.d/common-session

En sistemas RHEL/CentOS se utiliza authselect para aplicar esta configuración.

4. Configuración de SSSD

Se genera un archivo /etc/sssd/sssd.conf con una configuración que:

  • Define el dominio y el proveedor de identidades (id_provider = ad).
  • Activa la caché de credenciales.
  • Establece un filtro LDAP para permitir el acceso solo a los miembros de un grupo específico dentro de una OU:
ldap_access_filter = (memberOf=CN=PermitidosSSH,OU=PermitidosSSH,DC=midominio,DC=local)

Esto asegura que solo usuarios pertenecientes al grupo "PermitidosSSH" dentro de la OU "PermitidosSSH" podrán iniciar sesión por SSH.

5. Configuración del Servidor SSH

El script valida que UsePAM yes esté presente en sshd_config para permitir la autenticación mediante PAM y reinicia el servicio SSH.

Resultado Final

Una vez ejecutado el script:

  • El sistema Linux está configurado para autenticarse contra un dominio de Active Directory.
  • Solo los usuarios que pertenezcan al grupo AD configurado pueden acceder por SSH.
  • Los directorios home se crean automáticamente al iniciar sesión.

Consideraciones

  • Asegúrate de que el sistema esté previamente unido al dominio mediante realm join, adcli join o una herramienta similar.
  • El script no configura la unión al dominio, sino el acceso restringido posterior.
  • Puedes añadir validaciones extra para verificar si el servicio SSSD está activo o si la unión al dominio fue exitosa.
  • Es recomendable realizar pruebas en un entorno controlado antes de aplicar en producción.

Conclusión

Este enfoque proporciona un mecanismo sólido y centralizado para el control de acceso SSH basado en Active Directory, ideal para entornos donde se desea mantener la gestión de usuarios y permisos desde el directorio corporativo, sin necesidad de usuarios locales.

Compartir:

Binario 0
Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.