FreeIPA/Ansible

Материал из ALT Linux Wiki

Установка FreeIPA клиентов с помощью Ansible

Для регистрации клиентов в домене FreeIPA можно использовать Ansible.

На узле управления Ansible необходимо установить пакет ansible-freeipa:

# apt-get install ansible-freeipa

Пакет ansible-freeipa содержит роли и сценарии Ansible для установки и удаления серверов, реплик и клиентов FreeIPA (а также модули для управления группами, узлами, пользователями и топологией).

Развертывание управляется ролью ipaclient. По умолчанию роль использует режим автообнаружения для идентификации серверов FreeIPA, домена и других параметров. Роль можно изменить, чтобы playbook Ansible использовал параметры указанные, например, в inventory-файле.

Примечание: На узле управления должна быть настроена среда Ansible, узлы должны быть доступны Ansible и должным образом настроены.

Проверить доступность узлов можно, например, используя модуль «ping»:

$ ansible -i inventory/hosts -m ping ipaclients
comp02.example.test | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
comp01.example.test | SUCCESS => {
    "changed": false,
    "ping": "pong"
}


Настройка параметров в inventory-файле

В inventory-файле, например inventory/hosts, необходимо указать:

  1. Полное имя узла (FQDN), который станет клиентом FreeIPA. Имя узла должно быть написано строчными буквами. Если записи SRV в зоне DNS FreeIPA установлены правильно, сценарий автоматически обнаружит все остальные требуемые значения.
  2. Пароль пользователя, уполномоченного регистрировать клиентов:
    • рекомендуется использовать Ansible Vault для хранения пароля и напрямую ссылаться на файл Vault из файла playbook, например:
      - name: Playbook to configure IPA clients with username/password
        hosts: ipaclients
        become: true
        vars_files:
        - playbook_sensitive_data.yml
      
        roles:
        - role: ipaclient
          state: present
      
    • можно указать пароль пользователя admin, используя параметр ipaadmin_password в разделе [ipaclients:vars] файла inventory/hosts (менее безопасно, чем предыдущий способ). Если нужно указать другого пользователя (не admin), следует использовать параметр ipaadmin_principal для указания имени пользователя, например:
      [...]
      [ipaclients:vars]
      ipaadmin_principal=my_admin
      ipaadmin_password=Secret123
      
      пример Playbook, который использует principal и пароль из inventory-файла:
      - name: Playbook to configure IPA clients with username/password
        hosts: ipaclients
        become: true
      
        roles:
        - role: ipaclient
          state: present
      
    • client keytab из предыдущей регистрации, если он все ещё доступен. Этот параметр доступен, если система ранее уже была зарегистрирована как клиент FreeIPA. Чтобы использовать этот метод аутентификации, следует указать параметр ipaclient_keytab в разделе [ipaclients:vars] файла inventory/hosts, указав путь к файлу, в котором хранится keytab;
    • случайный одноразовый пароль (OTP), который будет сгенерирован во время регистрации. Чтобы использовать этот метод аутентификации, используйте опцию ipaclient_use_otp в разделе [ipaclients:vars] файла inventory/hosts. Одновременно с OTP также следует указать либо пароль пользователя, уполномоченного регистрировать клиентов (например, указав значение для ipaadmin_password), либо admin keytab (например, указав значение для ipaadmin_keytab).
  3. При невозможности автообнаружения параметров домена, в inventory-файле, необходимо также указать:
    • полное доменное имя сервера в разделе [ipaservers];
    • один из двух следующих параметров:
      • ipaclient_domain в разделе [ipaclients:vars] для указания DNS-имени FreeIPA, на котором будет зарегистрирован клиент.
      • ipaclient_realm в разделе [ipaclients:vars] для указания имени области Kerberos, контролируемой сервером FreeIPA.
Примечание: Для возможности использования одноразового пароля (OTP) на узле управления должен присутствовать /usr/bin/kinit.


Примечание: Установка клиентских пакетов по умолчанию включена. Если установка пакетов не требуется, необходимо установить переменную ipaclient_install_packages в значение no.

Пример inventory-файла:

[ipaclients]
comp01.example.test
comp02.example.test

[ipaservers]
ipa.example.test

[ipaclients:vars]
ipaclient_domain=example.test
ipaclient_realm=EXAMPLE.TEST
#ipaclient_use_otp=yes
ipaadmin_principal=admin
ipaadmin_password=12345678
Примечание: Дополнительные опции, принимаемые ролью ipaclient см. в /usr/share/ansible/roles/ipaclient/README.md.


Playbook

Пример файла playbook install-client.yml содержащего инструкции по развертыванию клиента FreeIPA:

---
- name: Playbook to configure IPA clients with username/password
  hosts: ipaclients
  become: true

  roles:
  - role: ipaclient
    state: present

Здесь:

  • Строка hosts: ipaclients указывает раздел файла inventory/hosts, где скрипт ansible ищет полные доменные имена узлов, на которых должен быть запущен скрипт ipa-client-install.
  • Строка become: true указывает, что скрипт ipa-client-install будет вызываться с правами суперпользователя (root).
  • Строка role: ipaclient указывает роль, которая будет установлена на узле (в данном случае это роль клиента FreeIPA).
  • Строка state: present указывает, что клиент должен быть установлен, а не удален (absent).

Роль ipaclient принимает параметр state, позволяющий настроить или отменить настройку клиента FreeIPA. Если роль вызывается с параметром state: present (или параметр state не определен) выполняется настройка клиента FreeIPA, а именно:

  • установка клиентских пакетов freeipa-client (имя пакета зависит от ОС управляемого узла);
  • настройка клиента FreeIPA.

Пример файла playbook uninstall-client.yml содержащего инструкции по удалению клиента FreeIPA:

---
- name: Playbook to unconfigure IPA clients
  hosts: ipaclients
  become: true

  roles:
  - role: ipaclient
    state: absent


Развертывание клиентов FreeIPA

Установка клиентов (уровень детализации указывается с помощью опций -v, -vv или -vvv):

$ ansible-playbook -v -i inventory/hosts install-client.yml
Using /etc/ansible/ansible.cfg as config file

PLAY [Playbook to unconfigure IPA clients] **************************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************************************
ok: [comp02.example.test]
ok: [comp01.example.test]
...
PLAY RECAP **********************************************************************************************************************************************************************************
comp01.example.test         : ok=21   changed=11   unreachable=0    failed=0    skipped=20   rescued=0    ignored=0   
comp02.example.test         : ok=21   changed=11   unreachable=0    failed=0    skipped=20   rescued=0    ignored=0

Если узел, определенный как клиент FreeIPA в inventory-файле, уже настроен, Ansible обнаружит это и проверит, соответствуют ли домен и область ожиданиям inventory-файла. Если домен и область совпадают, модуль успешно завершит работу и сообщит, что он не выполнял никаких изменений (changed=False). Если домен или область не соответствуют параметрам, настройка завершится с ошибкой.

Если узел, определенный как клиент FreeIPA в inventory-файле, еще не настроен как клиент FreeIPA, Ansible настроит клиент FreeIPA.

Удаление клиента FreeIPA

Удаление клиентов (уровень детализации указывается с помощью опций -v, -vv или -vvv):

$ ansible-playbook -v -i inventory/hosts uninstall-client.yml

Сначала проверяется, установлен ли клиент FreeIPA. Если клиент FreeIPA установлен, осуществляется вызов ipa-client-install --uninstall -U, чтобы отменить настройку клиента FreeIPA. Если FreeIPA-клиент не установлен, никаких действий производится не будет (changed=False).

При удалении клиента с узла удаляется только базовая конфигурация FreeIPA, но файлы конфигурации остаются на хосте на случай, если будет необходимо переустановить клиент. Кроме того, удаление имеет следующие ограничения:

  • не удаляется запись узла-клиента с LDAP-сервера FreeIPA (только отменяется регистрация узла);
  • не удаляются какие-либо службы, находящиеся на клиенте, из FreeIPA;
  • не удаляются DNS-записи клиента с сервера FreeIPA;
  • не удаляются старые принципалы для keytab, кроме /etc/krb5.keytab.

При удалении клиента FreeIPA удаляются все сертификаты, выданные для узла CA.