Este script automatiza la unión de un sistema Debian/Ubuntu a un dominio de Active Directory y habilita el inicio de sesión por SSH con cuentas del dominio utilizando realmd
y sssd
. Realiza la instalación de paquetes necesarios (realmd
, sssd
, adcli
, etc.), une el equipo al dominio, configura PAM para la creación automática de home directories y ajusta sshd
para permitir el acceso de usuarios/grupos del dominio. Está pensado para entornos donde se requiere control centralizado de identidades y políticas, manteniendo la autenticación delegada en AD.
Requisitos previos
- DNS del equipo resolviendo correctamente el dominio AD (SRV de Kerberos).
- Hora sincronizada (NTP).
- Usuario de AD con permisos para unir equipos al dominio.
- Ejecución del script como root.
- Variables a personalizar en el script:
DOMINIO
yUSUARIO_AD
.
Qué hace el script
- Instala y verifica dependencias (
realmd
,sssd
,libnss-sss
,libpam-sss
,adcli
,samba-common
,oddjob
,oddjob-mkhomedir
,packagekit
,krb5-user
). - Descubre y une el equipo al dominio (
realm discover
,realm join
). - Configura PAM para crear directorios home automáticamente (
pam_mkhomedir
). - Ajusta
sshd_config
para usar PAM y permitir acceso a grupos del dominio. - Reinicia servicios (
sssd
yssh
) y valida la unión conrealm list
.
Uso básico
- Edita
DOMINIO
(p. ej.,midominio.local
) yUSUARIO_AD
(p. ej.,Administrador
). - Ejecuta el script como
root
. - Verifica con
realm list
e intentaid "DOMINIO\\usuario"
y acceso SSH.
#!/bin/bash
set -e
DOMINIO="midominio.local"
USUARIO_AD="Administrador"
REALM="${DOMINIO^^}" # convierte a mayúsculas
HOSTNAME_ACTUAL=$(hostname -f)
echo "[INFO] Instalando paquetes necesarios..."
apt update
apt install -y realmd sssd sssd-tools libnss-sss libpam-sss adcli samba-common oddjob oddjob-mkhomedir packagekit krb5-user
echo "[INFO] Comprobando resolución DNS para el dominio..."
if ! host -t SRV _kerberos._tcp.${DOMINIO} > /dev/null; then
echo "[ERROR] No se pudo resolver el dominio Kerberos (${DOMINIO}). Revisa la configuración DNS."
exit 1
fi
echo "[INFO] Uniendo el sistema al dominio AD (${DOMINIO})..."
realm discover "${DOMINIO}"
echo "[INFO] Se te pedirá la contraseña del usuario AD '${USUARIO_AD}'..."
realm join --user="${USUARIO_AD}" "${DOMINIO}"
echo "[INFO] Verificando unión al dominio..."
realm list
echo "[INFO] Configurando SSSD y PAM para inicio de sesión con usuarios del dominio..."
authselect select sssd --force || true # en Ubuntu no existe, pero en RHEL sí
# Asegurar que se permite el inicio de sesión de usuarios del dominio
realm permit --all
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 SSH para permitir usuarios del dominio..."
sshd_config="/etc/ssh/sshd_config"
# Habilitar login por nombre completo (DOMINIO\\usuario)
if ! grep -q "^UsePAM yes" "$sshd_config"; then
echo "UsePAM yes" >> "$sshd_config"
fi
# Asegurar que se permite el login de usuarios del dominio
if ! grep -q "^AllowGroups" "$sshd_config"; then
echo "AllowGroups domain^users@${REALM}" >> "$sshd_config"
fi
echo "[INFO] Reiniciando servicios..."
systemctl restart sssd
systemctl restart ssh
echo "[INFO] Configuración completada. Prueba a conectarte vía SSH con un usuario del dominio:"
echo " ssh 'DOMINIO\\usuario@${HOSTNAME_ACTUAL}'"
FUNCIONALIDAD
Este script:
- Instala los paquetes necesarios (
sssd
,realmd
,adcli
,samba-common
,oddjob
, etc.). - Configura
realmd
para unir el sistema a un dominio AD. - Configura
sssd
,PAM
, ySSH
para permitir el login de usuarios AD. - Permite acceso SSH a usuarios del dominio.
- Crea home directories automáticos para usuarios AD.
REQUISITOS
- El sistema debe tener resolución DNS funcional hacia el dominio AD.
- El reloj debe estar sincronizado (usa NTP).
- Debes ejecutar este script como root.
- Debes conocer:
- El nombre del dominio AD (por ejemplo:
midominio.local
) - Un usuario AD con permisos para unir el equipo al dominio.
- El nombre del dominio AD (por ejemplo:
PRUEBA POSTERIOR
Una vez ejecutado el script, prueba lo siguiente:
id "DOMINIO\\usuario"
Y para conectarte por SSH:
ssh 'DOMINIO\\usuario'@ip_del_servidor
Compartir: