Может ли Ansible использовать «sudo su -», если пользователю sudo не разрешено запускать произвольные сценарии? - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь использовать Ansible для автоматизации установки и настройки программного обеспечения на нескольких удаленных компьютерах.Моя личная учетная запись на машине заблокирована, но я могу использовать sudo su -, чтобы стать пользователем root, когда я вхожу вручную.После того, как я являюсь пользователем root, я могу запускать такие вещи, как yum install git и аналогичные команды.

Когда я пытался сделать это через Ansible, я попытался выполнить следующее для использования модуля yum Ansible:

- name: install Git
  yum:
    name: git
    state: present
  become: yes
  become_method: sudo
  become_user: root
  become_exe: "sudo su -"

Когда я это запустил, произошел сбой с ошибкой, говорящей, что моему пользователю не разрешено запускать команду

sudo su - root /tmp/foobarbazblablabla

В результате Ansible помещает все команды Yum во временнуюфайл сценария и затем пытается запустить его с помощью метода становления / exe.

Оказывается, у моего пользователя есть разрешение на запуск sudo su -, но не на запуск произвольных сценариев с использованием sudo или sudo su -,и, следовательно, Ansible не может выполнить вышеприведенное.

В итоге я использовал уродливый обходной путь, подобный следующему:

- name: install Git
  shell:
    cmd: |
      sudo su - <<EOF
      yum install -y git
      EOF

Это работает, но уродливо и не использует механизм идемпотентной проверки Ansible.

Есть ли лучший способ сделать это в Ansible, где Ansible сначала выполняет sudo su -, а затем выполняет свой набор команд в открытой вложенной оболочке?Или мне не повезло с этим?Я сомневаюсь, что команда безопасности предоставит моим пользователям разрешения на запуск произвольных сценариев с использованием sudo.(С другой стороны, спрашивать не мешало бы.)

Это описание аналогичной проблемы, но предлагаемые решения - те же самые уродливые хаки, которые я использовал выше: https://gist.github.com/nanobeep/3b3d614a709086ff832a

Еще один экземпляр этой ошибки с очень похожей ошибкой, которую я получаю: https://www.reddit.com/r/devops/comments/53hukf/ansible_centrify_become_root/

fatal: [hostname]: FAILED! => {"changed": false, "failed": true, "module_stderr": "", 
"module_stdout": "Sorry, user username is not allowed to execute 
'/bin/sh -c echo BECOME-SUCCESS-msylkobbkasuuxlawgqppdpjxmeqirgd; LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8 
/usr/bin/python /home/username/.ansible/tmp/ansible-tmp-1474243234.94-154392424015843/lineinfile; rm -rf \"/home/username/.ansible/tmp/ansible-tmp-1474243234.94-154392424015843/\" > /dev/null 2>&1' 
as root on hostname.\r\n", "msg": "MODULE FAILURE", "parsed": false}

Обновление Если я запускаю sudo -l, это отображается:

User foo may run the following commands on this host:
    (root) /bin/kill
    (root) /bin/su - bar
    (root) su -

Ответы [ 3 ]

0 голосов
/ 29 мая 2018

Может быть, вы слишком усложняете это?Попробуйте это так -

- name: install Git
  become: yes
  become_user: root
  yum:
    name: git
    state: present

Или, в худшем случае,

- name: install Git
  become: yes
  become_user: root
  shell: yum install -y git

Помогает ли это?

0 голосов
/ 12 ноября 2018

У меня были похожие проблемы с teamviewer passwd, которые не позволяли мне работать и с become: true.Это мое определение задачи по настройке пароля TeamViewer с ansible:

  - name: set teamviewer login to password only
    become: true
    become_method: sudo
    become_flags: 'su - root /bin/bash -c'
    command: 'teamviewer passwd {{ teamviewer_password }}'

Это будет работать:

sudo su - root /bin/bash -c 'teamviewer passwd Th3Passw0r8'

В качестве sidenote: Вы можете пропустить become_* -материал, если вы идетес shell -задачей вместо command.Но вместе с этим приходят предупреждения и гораздо хуже: escape-ад с вашим паролем.Не ходи туда.

0 голосов
/ 24 мая 2018

Я думаю это будет работать с

- name: install Git
  yum:
    name: git
    state: present
  become: yes
  become_method: sudo
  become_exe: "sudo su - /bin/bash -c"
...