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:
- Instalar las dependencias necesarias para autenticación contra AD.
- Configurar la creación automática de directorios home.
- Configurar SSSD con un filtro LDAP para restringir el acceso solo a miembros de una OU.
- Asegurar que el servicio SSH permite el inicio de sesión de usuarios del dominio.
- 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 permisos600
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
onet 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: