Autenticación de usuarios de Active Directory en Linux con restricción por OU usando SSSD

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, es habitual centralizar la autenticación de usuarios mediante Active Directory (AD). Integrar sistemas Linux en este tipo de infraestructuras permite a los usuarios autenticarse con sus credenciales de dominio y acceder a recursos de forma unificada.

Este artículo explica paso a paso un script Bash que configura un sistema Linux basado en Debian/Ubuntu para autenticarse contra un dominio de Active Directory, restringiendo el acceso SSH únicamente a los usuarios que pertenecen a una Unidad Organizativa (OU) específica.

Objetivo del script

El objetivo del script es:

  1. Instalar las dependencias necesarias para autenticación contra AD.
  2. Configurar la creación automática de directorios home.
  3. Configurar SSSD con un filtro LDAP para restringir el acceso solo a miembros de una OU.
  4. Asegurar que el servicio SSH permite el inicio de sesión de usuarios del dominio.
  5. Reiniciar los servicios afectados para aplicar los cambios.
#!/bin/bash

set -e

DOMINIO="midominio.local"
REALM="${DOMINIO^^}"  # en mayúsculas
OU_PERMITIDA="OU=PermitidosSSH,DC=midominio,DC=local"  # <-- ajusta según tu AD

echo "[INFO] Instalando dependencias necesarias para autenticación con AD..."
apt update
apt install -y sssd sssd-tools libnss-sss libpam-sss oddjob oddjob-mkhomedir

echo "[INFO] Configurando creación automática de directorios home..."
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

echo "[INFO] Configurando SSSD para restringir inicio de sesión a una 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=PermitidosSSH,${OU_PERMITIDA})
default_shell = /bin/bash
fallback_homedir = /home/%u
ldap_id_mapping = true
EOF

chmod 600 /etc/sssd/sssd.conf

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

echo "[INFO] Configurando SSH para usar PAM y permitir usuarios de dominio..."
sshd_config="/etc/ssh/sshd_config"

# Asegurar que se usa PAM
if ! grep -q "^UsePAM yes" "$sshd_config"; then
    echo "UsePAM yes" >> "$sshd_config"
fi

# (Opcional) Si se desea, restringir por grupo adicionalmente (además del filtro de SSSD)
# echo "AllowGroups domain^PermitidosSSH@${REALM}" >> "$sshd_config"

systemctl restart ssh

echo "[INFO] Configuración completada."

Detalles del script

1. Variables configurables

DOMINIO="midominio.local"
REALM="${DOMINIO^^}"
OU_PERMITIDA="OU=PermitidosSSH,DC=midominio,DC=local"
  • DOMINIO: Define el nombre del dominio AD.
  • REALM: Es el dominio en mayúsculas, utilizado en Kerberos.
  • OU_PERMITIDA: Especifica la Unidad Organizativa de AD que contiene a los usuarios autorizados para acceder vía SSH.

2. Instalación de paquetes necesarios

apt update
apt install -y sssd sssd-tools libnss-sss libpam-sss oddjob oddjob-mkhomedir

Se instalan paquetes esenciales para que el sistema pueda:

  • Integrarse con AD (sssd, libnss-sss, libpam-sss)
  • Crear automáticamente el directorio home de los usuarios al iniciar sesión (oddjob-mkhomedir)

3. Activación de la creación automática del directorio home

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

Este paso asegura que cada usuario de AD tendrá su propio directorio home al iniciar sesión por primera vez.

4. Configuración de SSSD

cat >/etc/sssd/sssd.conf <<EOF
...
EOF

Se crea el archivo de configuración principal de SSSD, donde:

  • Se define el dominio y realm.
  • Se establece el proveedor de identidad (id_provider = ad).
  • Se configura un filtro LDAP con ldap_access_filter para restringir el acceso a miembros de un grupo específico dentro de la OU indicada: ldapCopiarEditar(memberOf=CN=PermitidosSSH,OU=PermitidosSSH,DC=midominio,DC=local)
  • Se establecen otras opciones como shell por defecto y directorio home.

Importante: El archivo /etc/sssd/sssd.conf debe tener permisos 600 por seguridad.

5. Reinicio de servicios

systemctl restart sssd

Después de configurar SSSD, se reinicia el servicio para aplicar los cambios.

6. Configuración de SSH

echo "UsePAM yes" >> /etc/ssh/sshd_config
systemctl restart ssh

Se asegura que el demonio SSH utiliza PAM para validar usuarios mediante SSSD.

Opcionalmente, puede usarse la directiva AllowGroups para aplicar una capa adicional de filtrado en SSH.

Consideraciones finales

  • Este script asume que la máquina ya está unida al dominio AD (por ejemplo, usando realm join o net ads join).
  • Asegúrate de que el sistema puede resolver correctamente el dominio (/etc/resolv.conf con el DNS del controlador de dominio).
  • La OU y el grupo deben existir previamente en AD, con los usuarios correctamente asignados.

Conclusión

Este script proporciona una forma automatizada y segura de integrar un sistema Linux en un entorno Active Directory, restringiendo el acceso SSH únicamente a usuarios de una OU específica. Es especialmente útil en escenarios donde se requiere un control estricto de quién puede acceder remotamente a los servidores.

Si deseas ampliar este procedimiento, podrías:

  • Añadir logging o control de errores más detallado.
  • Convertirlo en un playbook de Ansible para gestión masiva.
  • Integrarlo con herramientas de gestión remota como NinjaOne o scripts de hardening.

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.