Привилегированная Ansible команда с ограниченным доступом в судо - PullRequest
0 голосов
/ 11 февраля 2020

Я пытаюсь разработать 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 доступ к рассматриваемому пользователю.

...