kinit: недопустимый UID в имени постоянного ключа при получении кэша по умолчанию при использовании Ansible

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

Позвольте мне начать с краткого описания:
Целевой хост: RHEL7, ядро 3.10, Python2.7

На целевом хосте есть perl-скрипт (запускаемый определенным пользователем), который, среди прочего, выполняет такие действия:

kdestroy -A
kinit user@domain -kt path_to_keytab

На хосте я могу выполнять (как пользователь ‘scriptrunner’) все команды без ошибок. Однако при использовании ansible я получаю ошибку ‘kinit: invalid UID in persistent keyring name while getting default ccache’.

Плейбук запускается из AnsibleTower с учетными данными, используя режим эскалации ‘sudo’, и сам плейбук использует become: yes и become_user: scriptrunner, так что пользователь остается тем же при запуске команд из терминала.

Я пытался выполнять команды с помощью модуля command, просто

command: /bin/kdestroy -A и
command /bin/kinit someuser@domain -kt path_to_keytab.

Я также пробовал запустить весь скрипт как:
command: /bin/bash -c -l thescript.sh. Результат всегда одинаковый.

Почему так? Есть идеи?

Если выполнение unset KRB5CCNAME не решило проблему, вы можете создать временный кэш учетных данных Kerberos, который может потребоваться перед использованием kinit или klist впервые:

export KRB5CCNAME=`mktemp`

Если это не сработает, попробуйте изменить значение “default_ccache_name” в /etc/krb5.conf на локальный файл:

[libdefaults]
# ...
# default_ccache_name = KEYRING:persistent:%{uid}
  default_ccache_name = /tmp/krb5cc_%{uid}

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

Описание проблемы

При выполнении задач Ansible в окружении RHEL7 возникает ошибка kinit: invalid UID in persistent keyring name while getting default ccache. Несмотря на то что команды kdestroy и kinit работают корректно при запуске вручную от имени пользователя scriptrunner, использование Ansible для выполнения этих же команд приводит к указанной ошибке.

Понять контекст

Эта проблема возникает в результате попытки Ansible использовать кэш учетных данных Kerberos, связанный с данным пользователем (scriptrunner). Однако, при запуске Ansible через Ansible Tower с использованием режима эскалации (sudo и become), может происходить ситуация, когда UID, от имени которого выполняются команды, не совпадает с UID настоящего пользователя scriptrunner.

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

  1. Разные UID: Хотя Ansible запускается от имени scriptrunner, sudo может изменять контекст, что приводит к неправильному транспорированию UID.
  2. Проблемы с переменными окружения: Ansible может не сохранять необходимые переменные окружения, такие как KRB5CCNAME, передаваемые Haskell-системам.
  3. Настройки кэширования Kerberos: Kerberos использует кэш учетных данных, и ошибки в его конфигурации могут вызывать проблемы с доступом к учетным данным.

Решение проблемы

1. Установка переменной окружения

Обязательно проверьте наличие и значение переменной KRB5CCNAME. Чтобы избежать переноса неправильного UID, попробуйте экспортировать эту переменную в временный файл:

- name: Export temporary Kerberos credential cache
  command: export KRB5CCNAME=`mktemp`
  become: yes
  become_user: scriptrunner

2. Настройка конфигурации Kerberos

Измените значение параметра default_ccache_name в /etc/krb5.conf, чтобы использовать локальный файл вместо ключа. Это может помочь избежать конфликтов с ключами:

[libdefaults]
# ...
default_ccache_name = /tmp/krb5cc_%{uid}

3. Использование команды kdestroy и kinit в Ansible

Добавьте команды kdestroy и kinit в ваш playbook как отдельные задачи. Постарайтесь убедиться, что каждая команда выполняется в нужном порядке:

- name: Destroy all Kerberos tickets
  command: /bin/kdestroy -A
  become: yes
  become_user: scriptrunner

- name: Initialize Kerberos ticket
  command: /bin/kinit user@domain -kt path_to_keytab
  become: yes
  become_user: scriptrunner

4. Проверка конфигурации Ansible

Убедитесь, что в настройках Ansible (например, ansible.cfg) не установлены параметры, меняющие поведение по умолчанию для управления пользователями и переменными окружения. Параметры, такие как remote_user, могут повлиять на то, как Ansible выполняет команды.

Заключение

Ошибка kinit: invalid UID in persistent keyring name while getting default ccache может возникнуть по множеству причин, и важно корректно настроить окружение Ansible для работы с Kerberos. Убедитесь, что переменные окружения устанавливаются правильно, а настройки Kerberos соответствуют вашим требованиям. Применяя предложенные шаги, вы сможете устранить данную ошибку и успешно использовать Ansible для управления вашим окружением.

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

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