Sudo без пароля с ограниченными правами в файле sudoers с использованием Ansible - PullRequest
0 голосов
/ 22 декабря 2019

Я внедряю небольшую playbook для установки некоторых apt-пакетов на мои машины, например, docker, git.

Вот пример задачи:

- name: "Docker: install various dependencies"
  become: true
  tags:
    - docker_installation
  apt:
    #  force_apt_get: true # didnt help
    name: "apt-transport-https, ca-certificates, curl, software-properties-common"
    update_cache: true
    state: present

Поскольку я хочу использовать sudo без пароля, я создал выделенного пользователя ansible на целевых хостах, которые будут выполнять playbook-задания. Я пытаюсь добиться, чтобы отвечающему пользователю разрешалось выполнять только команды , необходимые для playbook , без запроса пароля.

Поэтому я отредактировал файл sudoers какследующее (показывает только значения по умолчанию):

root    ALL=(ALL:ALL) ALL
ansible ALL=(root) NOPASSWD: /usr/bin/apt-cache, /usr/bin/apt-get update install, /usr/bin/apt

Когда я выполняю ssh на целевом хосте как пользователь, отвечающий требованиям пользователя, я могу выполнять связанные с apt команды, как и ожидалось, без запроса пароля. Однако, когда я запускаю пьесу, она выходит из строя и сообщает:

Эскалация требует пароль

fatal: [elk-dummy]: FAILED! => {
"msg": "Missing sudo password"
}

Когда я изменяю запись sudoers на

ansible ALL=(root) NOPASSWD: ALL

все работает нормально.

Глядя на этот связанный пост Я надеялся получить некоторую информацию из журналов, но я не знаю, как обработать это сообщение / причину:

<192.168.2.35> УСТАНОВИТЬ СОЕДИНЕНИЕ SSH ДЛЯ ПОЛЬЗОВАТЕЛЯ: ansible

<192.168.2.35> SSH: EXEC ssh -vvv -C -o ControlMaster = auto -o ControlPersist = 60s -o KbdInteractiveAuthentication = no-o PreferredAuthentications = gssapi-with-mic, gssapi-keyex, на базе хоста, publickey -o PasswordAuthentication = no -o 'User = "ansible"' -o ConnectTimeout = 10 -o ControlPath = / home / lukas / .ansible / cp /0e1063962c 192.168.2.35 '/ bin / sh -c' "'"' chmod u + x /home/ansible/.ansible/tmp/ansible-tmp-1576966035.82-40405969615486/ /home/ansible/.ansible/tmp/ansible-tmp-1576966035.82-40405969615486 / AnsiballZ_command.py && sleep 0 '"'" ''

<192.168.2.35> УСТАНОВИТЬ СОЕДИНЕНИЕ SSH ДЛЯ ПОЛЬЗОВАТЕЛЯ: ansible

<192.168.2.35> SSH: EXEC ssh -vvv -C -o ControlMaster = auto -o ControlPersist = 60 с -o KbdInteractiveAuthentication = нет -o PreferredAuthentications = gssapi-with-mic, gssapi-keyex, на базе хоста, publickey -o PasswordAuthentication = no -o 'User = "ansible"' -o ConnectTimeout = 10 -o ControlPath = / home / lukas / .ansible / cp / 0e1063962c -tt 192.168.2.35'/ bin / sh -c' "'"' sudo -H -S -n -u root / bin / sh -c '"'" '"'" '"'" '"'" 'echo BECOME-SUCCESS-nsmqtlltfzcxfvlapewjxgvqsbjfhzlc;/ usr / bin / python3 /home/ansible/.ansible/tmp/ansible-tmp-1576966035.82-40405969615486/AnsiballZ_command.py '"'" '"'" '"" "" "" "" && sleep 0' "'"''

Я уже посмотрел код Python модуля apt, ищущий другие команды, которые будут выполняться для модуля apt, но я не смог найти ни одной.

Любая помощь в достижении этого очень ценится!

Я использую ANSIB версии 2.9.2. Целевой хост работает на сервере Ubuntu 18.04.

1 Ответ

1 голос
/ 22 декабря 2019

Q: "Когда я изменяю запись sudoers на ansible ALL=(root) NOPASSWD: ALL, все работает нормально."

A: Цитирование из Повышение привилегий должно бытьобщее :

"Вы не можете ограничивать разрешения на повышение привилегий для определенных команд ..."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...