Я пытаюсь разработать Playbook Ansible, который выполняет последовательность действий по обслуживанию, таких как обновление ОС и очистка временных файлов. Некоторые из этих команд, такие как reboot или systemd , требуют root привилегий. Документация Ansible указывает на то, что свойство становиться является подходящим способом повышения доступа:
- name: reboot the host
become: true
reboot:
reboot_timeout: 120
К сожалению, пользователь, который выполняет playbook, не имеет полного доступа sudo. Вместо этого определенные команды заносятся в белый список в файле sudoers.
Проблема, с которой я сталкиваюсь, заключается в том, что Ansible, кажется, выполняет все команды с повышенными правами с / bin / sh , В частности, я проверил и зарегистрировал возвращаемое значение sudo стать плагином и обнаружил, что повышенные команды, похоже, заключены в скрипт оболочки следующим образом:
sudo /bin/sh -c 'echo BECOME-SUCCESS-sddadrnobshlgupsldsqcunalofnshjx ; /usr/bin/python /tmp/.ansible/tmp/ansible-tmp-1581373432.4900978-226016980552294/AnsiballZ_command.py
С generi c расширенный доступ к оболочке не предоставлен этому пользователю, шаг естественным образом завершается неудачей. Это расстраивает, потому что прямой вызов команды действительно работает:
- name: reboot the host
command: sudo reboot
async: 1
poll: 0
- name: wait for connection
wait_for_connection:
connect_timeout: 20
sleep: 5
delay: 5
timeout: 120
Мне было интересно, есть ли лучшие способы обойти эту проблему, чем либо не использовать bevome или давать полный root доступ к рассматриваемому пользователю.