FreeIPA/Ansible
Установка FreeIPA клиентов с помощью Ansible
Для регистрации клиентов в домене FreeIPA можно использовать Ansible.
На узле управления Ansible необходимо установить пакет ansible-freeipa:
# apt-get install ansible-freeipa
Пакет ansible-freeipa содержит роли и сценарии Ansible для установки и удаления серверов, реплик и клиентов FreeIPA (а также модули для управления группами, узлами, пользователями и топологией).
Развертывание управляется ролью ipaclient. По умолчанию роль использует режим автообнаружения для идентификации серверов FreeIPA, домена и других параметров. Роль можно изменить, чтобы playbook Ansible использовал параметры указанные, например, в inventory-файле.
Проверить доступность узлов можно, например, используя модуль «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, необходимо указать:
- Полное имя узла (FQDN), который станет клиентом FreeIPA. Имя узла должно быть написано строчными буквами. Если записи SRV в зоне DNS FreeIPA установлены правильно, сценарий автоматически обнаружит все остальные требуемые значения.
- Пароль пользователя, уполномоченного регистрировать клиентов:
- рекомендуется использовать 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).
- рекомендуется использовать Ansible Vault для хранения пароля и напрямую ссылаться на файл Vault из файла playbook, например:
- При невозможности автообнаружения параметров домена, в inventory-файле, необходимо также указать:
- полное доменное имя сервера в разделе [ipaservers];
- один из двух следующих параметров:
- ipaclient_domain в разделе [ipaclients:vars] для указания DNS-имени FreeIPA, на котором будет зарегистрирован клиент.
- ipaclient_realm в разделе [ipaclients:vars] для указания имени области Kerberos, контролируемой сервером FreeIPA.
Пример 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
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.