Вопрос или проблема
Позвольте мне начать с краткого описания:
Целевой хост: 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
.
Потенциальные причины ошибки
- Разные UID: Хотя Ansible запускается от имени
scriptrunner
,sudo
может изменять контекст, что приводит к неправильному транспорированию UID. - Проблемы с переменными окружения: Ansible может не сохранять необходимые переменные окружения, такие как
KRB5CCNAME
, передаваемые Haskell-системам. - Настройки кэширования 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 для управления вашим окружением.