Присоединение к домену через Ansible возвращает ошибку “Уже присоединен к этому домену”, в то время как через оболочку все в порядке.

Вопрос или проблема

Я получаю странное сообщение с Ansible.

На сервере RHEL 9 я могу присоединиться к нашему домену через командную строку shell

realm join example.xyz --user=svc-ansible --computer-ou="OU=Linux Servers, OU=Servers, OU=ACME, OU=Units, DC=example, DC=xyz"

После этого я могу успешно сменить пользователя с помощью su - [email protected], где “johndoe” – это пользователь, определенный в AD и принадлежащий группе AD, определенной в simple_allow_groups в файле /etc/sssd/sssd.conf. Таким образом, конфигурация, похоже, работает.

После этого я запускаю realm leave example.xyz --remove -U 'svc-ansible' и realm list заранее, чтобы проверить, что сервер больше не находится в домене.

Однако, когда я запускаю через AWX playbook Ansible, определенный следующим образом

(...)

- name: Установить staging_ou
  ansible.builtin.set_fact:
    staging_ou: "OU=Linux Servers, OU=Servers, OU=ACME, OU=Units, DC=example, DC=xyz"

- name: Присоединение к домену
  ansible.builtin.expect:
    command: /bin/bash -c 'realm join {{ domain }} --user={{ ad_join_user }} --computer-ou="{{ staging_ou }}"'
    responses:
      Password.*: "{{ ad_join_password }}"
    timeout: 120

(...)

Я получаю следующую ошибку:

TASK [playbook_ad_join : Присоединение к домену] **********************************
fatal: [myrhel9server]: FAILED! => {“changed”: true, “cmd”: “/bin/bash -c ‘realm join example.xyz –user=svc-ansible –computer-ou=\”OU=Linux Servers, OU=Servers, OU=ACME, OU=Units, DC=example, DC=xyz\”‘”, “delta”: “0:00:00.152467”, “end”: “2024-11-13 11:45:09.577079”, “msg”: “ноль не возвращаемый код”, “rc”: 1, “start”: “2024-11-13 11:45:09.424612”, “stdout”: “realm: Уже присоединен к этому домену\r\nПожалуйста, проверьте\r\n https://red.ht/support_rhel_ad \r\ndля получения помощи по общим вопросам.”, “stdout_lines”: [“realm: Уже присоединен к этому домену”, “Пожалуйста, проверьте”, ” https://red.ht/support_rhel_ad “, “для получения помощи по общим вопросам.”]}

Команда realm list подтверждает, что сервер действительно в домене example.xyz и возвращает тот же вывод, что и когда я запускал команду realm join ... через shell. Однако я больше не могу su для пользователей AD: попытка сделать это возвращает ошибку

su: пользователь [email protected] не существует или запись пользователя не содержит все необходимые поля

Ссылка, указанная в сообщении об ошибке, не помогает.

Что может быть не так?


EDIT 1: Запуск через shell той же команды, которая была выполнена через ansible, т.е.

/bin/bash -c 'realm join example.xyz (...) '

ничего не меняет относительно запуска realm join example.xyz (...) (см. начало поста).

Другие задачи в playbook лишь модифицируют несколько конфигурационных файлов:

/etc/krb5.conf
/etc/sssd/sssd.conf
/usr/local/bin/sss_ssh_authorizedkeys_ad
/etc/ssh/sshd_config 

и устанавливают некоторые пакеты. Это не имеет значения, так как конфигурация уже сошлась. Я удалил строку, которая перезапускала демон realmd, поскольку она могла быть причиной проблемы, но ничего не изменилось.

Ответ или решение

Ваша ситуация с ошибкой "Already joined to this domain" при выполнении команды realm join через Ansible, в то время как команда работает в оболочке, имеет несколько возможных объяснений. Давайте разберем это подробнее, опираясь на предоставленную вами информацию и контекст.

Проблема

При запуске команды через Ansible вы сталкиваетесь с ошибкой, указывающей на то, что сервер уже является частью домена. Состояние доменной принадлежности подтверждается командой realm list, которая показывает, что сервер действительно подключён к вашему домену example.xyz. Однако после использования Ansible вы не можете выполнить команду su для перехода к пользователям Active Directory, получая ошибку, что пользователь не существует или не содержит всех необходимых полей.

Потенциальные причины ошибки

  1. Проблемы с контекстом выполнения: Когда вы выполняете команду через Ansible, она может выполняться под различными учетными данными или в другом окружении по сравнению с вашей оболочкой. Это может приводить к тому, что Ansible не видит текущую сессию или права доступа.

  2. Кэширование SSSD: Если в результате выполнения предыдущей команды realm join возникли проблемы, кэшированные данные SSSD могут мешать выполнению текущих операций. Убедитесь, что вы очистили кэш с помощью команды:

    sss_cache -E
  3. Параметры входа пользователей: Убедитесь, что необходимые пользователи и группы правильно настроены в конфигурации /etc/sssd/sssd.conf, особенно в параметре simple_allow_groups. Возможно, пользователи, к которым вы пытаетесь перейти, не входят в указанные группы после выполнения Ansible-playbook.

  4. Проблемы с доступом к OU: Убедитесь, что у пользователя svc-ansible есть все необходимые разрешения для добавления компьютера в указанную организационную единицу (OU). Ошибки могут быть связаны с привилегиями учетной записи.

Возможные решения

  1. Отлаживайте предоставляемые переменные: Убедитесь, что переменные {{ domain }}, {{ ad_join_user }} и {{ ad_join_password }} устанавливаются корректно и передаются в команде Ansible. Вы можете добавить временную задачу в playbook, чтобы вывести эти переменные на консоль.

  2. Очистите кэш SSSD перед повторным подключением:

    - name: Очистка кэша SSSD
     command: sss_cache -E
  3. Проверьте наличия и конфигурацию соответствующих строк в sssd.conf: Убедитесь, что ваши изменения в файле sssd.conf правильно отражают назначенные группы и поля.

  4. Идентификация ошибок: Добавьте вывод отладки в Ansible playbook, чтобы вы могли понять, что происходит при выполнении команды:

    - name: Прикрепить к отладочным данным
     debug:
       msg: "Попытка присоединения к{{ domain }} как {{ ad_join_user }}"
  5. Попробуйте перезапустить службы: После обновления конфигурации sssd.conf попробуйте перезапустить службу SSSD, чтобы убедиться, что новые настройки вступили в силу:

    - name: Перезапустить SSSD
     service:
       name: sssd
       state: restarted

Заключение

Сочетание правильной настройки Ansible, разрешений учетной записи и кэширования SSSD может решить вашу проблему с realm join. Следуйте перечисленным шагам, и это поможет вам в обнаружении и устранении проблемы. Не забудьте также устанавливать регулярные проверки конфигурации, чтобы предотвратить подобные инциденты в будущем.

Оцените материал
Добавить комментарий

Капча загружается...