Icono del sitio Binario 0

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"

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:

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:

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

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:

Salir de la versión móvil