Страницы

Поиск по вопросам

пятница, 24 января 2020 г.

Как работает sudo в ansible?

#linux #ansible


подскажите, пожалуйста, как работает sudo в ansible и в чем его разница, если я применяю
sudo непосредственно в консоли,
Авторизованным на сервере, в консоли выполняю

[user@server01 opt]$ sudo mkdir /opt/test


Выполняется успешно, но при использовании команды непосредственно с помощью ansible:

[user@server01 opt]$ ansible servers -m file -a "dest=/opt/test  mode=755" -k -u user -b


Возникает ошибка

"module_stdout": "Sorry, user user is not allowed to execute '/bin/sh -c echo BECOME-SUCCESS-qvlcsrrsgixvikeamiollrbbnyxljoxl


Используется стандартные become настройки, включая метод, sudo.
У меня и в самом деле ограниченный sudo на команды /bin/sh и /bin/bash, вопрос заключается
в следующем, в чем разница моего локального выполнения sudo и через ansible, почему
ansible под пользователем на конечном сервере пытается выполнить не sudo mkdir /opt/test,
а как понимаю sudo /bin/sh mkdir /opt/test, в следствии чего возникает ошибка is not
allowed to execute '/bin/sh mkdir /opt/test' as root?

права sudo -l

(ALL) NOPASSWD: ALL, !/bin/sh, !/bin/tcsh, !/bin/csh, !/bin/zsh, !/bin/ksh, !/bin/bash,
!/usr/bin/sudo, !/bin/su, !/usr/bin/mc
(root) NOPASSWD: ALL
(root) NOPASSWD: ALL, !/bin/sh, !/bin/tcsh, !/bin/csh, !/bin/zsh, !/bin/ksh, !/bin/bash,
!/usr/bin/sudo, !/bin/su, !/usr/bin/mc, !/usr/bin/chattr, !/usr/bin/screen, !/usr/bin/tmux


P.S. коллеги, если убрать из запретов !/bin/sh и !/bin/bash, то конечно будет работать
и аналогичный вопрос конечно уже был, но может с 17 года появились ответы, Как запустить
плейбук ansible непривелигированному пользователю?
    


Ответы

Ответ 1



О-о-о, помню эту фигню. Суть в том, что Ansible перед тем, как выполнить собственно команду, зачем-то проверяет, можно ли вообще использовать sudo. И делает он это через /bin/sh -c echo …. И если этот echo не удаётся, он считает, что sudo не sudo. И это почти нигде не документировано! У меня была ситуация, где sudo разрешалось использовать одну-две команды, и никакого /bin/sh. Я с этим часа два боролся, а потом плюнул и решил просто прописать sudo внутри команды текстом и не использовать этот их сломанный, слишком «умный» become вовсе. Возможно, придёт другой коллега и покажет класс, но для меня ответ был простой: «Это сломано».

Комментариев нет:

Отправить комментарий