En entornos empresariales es común requerir la integración de sistemas Linux en un dominio Active Directory (AD), permitiendo una gestión centralizada de usuarios y políticas de seguridad. Esta operación, aunque posible manualmente mediante herramientas como realmd
, sssd
y adcli
, puede automatizarse de forma eficiente utilizando Ansible, lo que permite ahorrar tiempo, reducir errores y asegurar la homogeneidad en múltiples servidores.
Este artículo presenta un playbook de Ansible diseñado para unir sistemas Linux basados en Debian/Ubuntu o RHEL/CentOS/Rocky a un dominio AD. Incluye detección automática del sistema operativo, instalación de los paquetes requeridos, verificación previa de conectividad DNS, unión condicional al dominio, y la opción de reiniciar el sistema al finalizar.
Requisitos
Antes de ejecutar el playbook, se deben cumplir los siguientes requisitos:
- Conectividad de red con el controlador de dominio (puertos DNS, LDAP, Kerberos).
- El sistema Linux debe tener configurado el DNS apuntando al servidor AD.
- Contar con un usuario en el dominio con permisos para unir equipos.
- Tener configurado Ansible en un nodo de gestión, con acceso SSH a los equipos objetivo.
- Opcionalmente, usar Ansible Vault para proteger las credenciales sensibles.
Variables definidas
domain_name
: Nombre FQDN del dominio al que se desea unir el sistema.organizational_unit
: Ruta LDAP de la OU donde se registrará el equipo (opcional).ad_user_name
yad_password
: Credenciales con permisos para la operación.force_restart
: Si se establece atrue
, reiniciará el sistema tras unirse.
Automatización con Ansible
A continuación, se incluye el playbook que automatiza el proceso de unión al dominio:
---
- name: Join Linux system to Active Directory domain
hosts: all
become: yes
vars:
domain_name: "yourdomain.local"
organizational_unit: "" # Opcional: "OU=Servers,DC=yourdomain,DC=local"
ad_user_name: "admin_joiner"
ad_password: "SuperSecretPassword"
force_restart: false
tasks:
- name: Gather OS facts
ansible.builtin.setup:
gather_subset: min
- name: Install required packages (Debian/Ubuntu)
apt:
name:
- realmd
- sssd
- adcli
- oddjob
- oddjob-mkhomedir
- samba-common-bin
- packagekit
state: present
update_cache: yes
when: ansible_facts['os_family'] == "Debian"
- name: Install required packages (RedHat/CentOS/Rocky)
yum:
name:
- realmd
- sssd
- adcli
- oddjob
- oddjob-mkhomedir
- samba-common-tools
state: present
when: ansible_facts['os_family'] == "RedHat"
- name: Check DNS resolution of domain
ansible.builtin.shell: "getent hosts {{ domain_name }}"
register: dns_check
changed_when: false
failed_when: dns_check.rc != 0
- name: Check if already joined to domain
ansible.builtin.shell: "realm list | grep -iq '^realm-name: {{ domain_name }}'"
register: realm_check
changed_when: false
failed_when: false
- name: Join to AD domain
ansible.builtin.shell: |
echo "{{ ad_password }}" | realm join --user="{{ ad_user_name }}" {{ domain_name }} {% if organizational_unit != '' %} --computer-ou="{{ organizational_unit }}" {% endif %}
when: realm_check.rc != 0
register: join_result
changed_when: "'successfully enrolled' in join_result.stdout.lower()"
failed_when: join_result.rc != 0
- name: Reboot if requested
ansible.builtin.reboot:
reboot_timeout: 600
when: force_restart | bool
Consideraciones de seguridad
Para evitar exponer credenciales en texto plano, se recomienda el uso de Ansible Vault para cifrar la contraseña de ad_password
. Esto se puede lograr con:
ansible-vault encrypt_string 'SuperSecretPassword' --name 'ad_password'
También se sugiere restringir la ejecución de este playbook a través de políticas y roles específicos dentro del equipo de operaciones.
Conclusión
Automatizar la unión de sistemas Linux a Active Directory es una tarea esencial en entornos heterogéneos. Usar Ansible para ello no solo mejora la eficiencia, sino que garantiza consistencia, trazabilidad y facilita la escalabilidad en la operación. Este playbook puede ser adaptado y ampliado para incluir más validaciones, configuración post-unión, o incluso integración con herramientas de monitorización o inventario.
Compartir: