Unión de sistemas Linux a un dominio Active Directory con Ansible

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 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 y ad_password: Credenciales con permisos para la operación.
  • force_restart: Si se establece a true, 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:

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.