Проблема повышения привилегий с паролем - PullRequest
0 голосов
/ 01 октября 2019

TL; DR;

Занимался этой проблемой более недели, и я не могу понять это. Я запускаю ansible как user1 , у которого есть разрешение стать пользователем root, но ansible возвращает эту ошибку: Timeout (12s) waiting for privilege escalation prompt:. Используя режим отладки ansible export ANSIBLE_DEBUG=True, я заметил, что ansible просто зависает, когда появляется запрос на повышение привилегий. Поэтому кажется, что ansible не предоставляет пароль, который я дал ему в самом начале.

МОЯ НАСТРОЙКА

Моя ansible.cfg Конфигурацияполностью прокомментировал. Просто файл конфигурации по умолчанию.

Хосты CentOS7 и имеют python 2.7

Рабочая команда ansible --version :

ansible 2.8.2
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/home/user1/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /bin/ansible
  python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

ВЫПУСК

Я пытаюсь запустить мою пьесу с become, но я не могу пройти мимо раздела "Сбор фактов". Я хочу стать root с dzdo, чтобы выполнять свои задачи в моей книге игр. Однако, если вы посмотрите на журналы отладки, ANSIBLE, кажется, висит в приглашении стать паролем. См. Это ниже в Ansible Debug: >>>[dzdo via ansible, key=KEY_STRING] password:<<<, он сидит в этой строке в течение 10 секунд, затем выводит его в ожидании запроса на повышение привилегий. Однако подсказка явно произошла. Итак, я решил сам запустить команду, которая, кажется, зависает (что вы можете увидеть в разделе «Отладочная отладка» ниже):

ssh -tt host1 '/bin/sh -c '"'"'dzdo -H -S -p "[dzdo via ansible, key=KEY_STRING] password:" -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-KEY_STRING ; /usr/bin/python /home/user1/.ansible/tmp/ansible-tmp-1569872806.13-188766343287198/AnsiballZ_command.py'"'"'"'"'"'"'"'"' && sleep 0'"'"''

При выполнении этой команды ямне дают подсказку для пароля, я даю пароль root и УСПЕХ! Я получил огромный json blob о фактах моего хозяина.

ПРИМЕР ДЕЙСТВУЮЩИХ КОМАНД, КОТОРЫЙ Я НЕ УКАЗЫВАЮ, ЧТОБЫ «СТАТЬ» И ВОЗВРАЩАЕТ ОДНУ ОШИБКУ, КОТОРАЯ ДОЛЖНА РАБОТАТЬ КАК ROOT

(ПРИМЕЧАНИЕ: я добавляю -vvvv, чтобы напечатать свои операторы отладки, чтобы проверить, что происходит внутри, но обычно я не добавляю эту опцию, если все работает. Кроме того, я знаю, что по умолчанию --become-user установлен как root. Я просто добавляю это для ясности.)

  1. ansible host1 -kbK -m command -a "id" --user=user1 --become-user=root --become-method=dzdo
  2. ansible-playbook -kbK myplaybook.yml --tags="myTag" --user=user1 --become-user=root --become-method=dzdo

Любые идеи, почему ansible не кажется см. приглашение и, следовательно, укажите пароль, который я предоставляю в самом начале? Кроме того, просто для тестирования, когда мне выдается запрос на ввод паролей:

SSH password: 
BECOME password[defaults to SSH password]:

Я проверил пароль BECOME, просто оставив его пустым (нажав ввод по умолчанию для пароля SSH), и набралложный пароль (просто нажимая на клавиатуру, который, если бы пароль использовался, понял бы, что это неверный пароль).

ОТЛИЧНЫЕ ЖУРНАЛЫ ОТЛАДКИ

...everything above seems to be ok, I successfully see:
1. Successful ssh connection to the hosts with the given user1
2. Successful ssh connection to move the ansible file it will run and making the directory
3. Attempting the python interpreter discovery
4. Finding the PLATFORM
5. etc... until I get to the actual escalated privilege line below
<host1> ESTABLISH SSH CONNECTION FOR USER: user1
<host1> SSH: EXEC sshpass -d8 ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o 'User="user1"' -o ConnectTimeout=10 -o ControlPath=/home/user1/.ansible/cp/89ddddab56 -tt host1 '/bin/sh -c '"'"'dzdo -H -S  -p "[dzdo via ansible, key=KEY_STRING] password:" -u root /bin/sh -c '"'"'"'"'"'"'"'"'echo BECOME-SUCCESS-KEY_STRING ; /usr/bin/python /home/user1/.ansible/tmp/ansible-tmp-1569872806.13-188766343287198/AnsiballZ_command.py'"'"'"'"'"'"'"'"' && sleep 0'"'"''
 22694 1569872807.55226: Initial state: awaiting_escalation: BECOME-SUCCESS-KEY_STRING
 22694 1569872807.58708: stderr chunk (state=1):
>>>OpenSSH_7.6p1 (CentrifyDC build 5.5.0-193) , OpenSSL 1.0.2n-fips  7 Dec 2017
<<<

 22694 1569872807.58831: stderr chunk (state=1):
>>>debug1: Reading configuration data /etc/centrifydc/ssh/ssh_config
debug1: /etc/centrifydc/ssh/ssh_config line 47: Applying options for *
<<<

 22694 1569872807.58942: stderr chunk (state=1):
>>>debug1: auto-mux: Trying existing master
debug2: fd 3 setting O_NONBLOCK
debug2: mux_client_hello_exchange: master version 4
debug3: mux_client_forwards: request forwardings: 0 local, 0 remote
debug3: mux_client_request_session: entering
debug3: mux_client_request_alive: entering
debug3: mux_client_request_alive: done pid = 22660
debug3: mux_client_request_session: session request sent
<<<

 22694 1569872807.59199: stderr chunk (state=1):
>>>debug1: mux_client_request_session: master session id: 2
<<<

 22694 1569872807.87886: stdout chunk (state=1):
>>>[dzdo via ansible, key=KEY_STRING] password:<<<

 22694 1569872819.89077: done running TaskExecutor() for host1/TASK: command [c81f66f6-8106-36fa-2522-0000000000a5]
 22694 1569872819.89146: sending task result for task c81f66f6-8106-36fa-2522-0000000000a5
 22694 1569872819.89287: done sending task result for task c81f66f6-8106-36fa-2522-0000000000a5
 22694 1569872819.89309: WORKER PROCESS EXITING
 22686 1569872819.89555: marking host1 as failed
 22686 1569872819.89601: marking host host1 failed, current state: HOST STATE: block=2, task=1, rescue=0, always=0, run_state=ITERATING_TASKS, fail_state=FAILED_NONE, pending_setup=False, tasks child state? (None), rescue child state? (None), always child state? (None), did rescue? False, did start at task? False
 22686 1569872819.89633: ^ failed state is now: HOST STATE: block=2, task=1, rescue=0, always=0, run_state=ITERATING_COMPLETE, fail_state=FAILED_TASKS, pending_setup=False, tasks child state? (None), rescue child state? (None), always child state? (None), did rescue? False, did start at task? False
 22686 1569872819.89658: getting the next task for host host1
 22686 1569872819.89680: host host1 is done iterating, returning
host1 | FAILED | rc=-1 >>
Timeout (12s) waiting for privilege escalation prompt:

... а затем соединение с host1 закрывается.

1 Ответ

0 голосов
/ 02 октября 2019

Похоже, что вы испытываете тот факт, что ваш пользователь должен ввести свой пароль в тот момент, когда он sudo

Это может быть решено с помощью либо ansible.cfg, в вашем инвентаре или непосредственно вPlaybook ниже конфигурации:

ansible_become_method: 'su'
ansible_become_exe: 'sudo -p "Password: " su -'

Все кредиты для этой техники идут на Рахим-Раддахи : https://github.com/ansible/ansible/issues/12686#issuecomment-373326739

...