Я бы хотел запустить ansible так, чтобы:
удаленный пользователь - это "обычный" пользователь
... ВОЗ become
s root через sudo
запускать кучу задач
... ВОЗ 'become
s пользователь postgres через su - postgres
из корня, чтобы создать базу данных PostgreSQL.
Это типичная процедура для мира PostgreSQL: специальный пользователь доступен только через su
из root
.
Указание необходимых параметров в воспроизведении работает только при подключении как root, поскольку параметры интерфейса командной строки переопределяют все, что определено в воспроизведении.
Есть ли более элегантные способы добиться этого, кроме добавления sudo
правила или бег
command: /usr/bin/su - postgres -c '/bin/createuser -D -R -S myuser
из ансибля, говоря ему, чтобы отключить предупреждения?
Зачем дважды менять эффективных пользователей?
Вы можете указать эффективный идентификатор пользователя, который должен запускаться ansible в соответствии с задачей, поэтому, когда вам нужно запустить команду от имени пользователя postgres, установите его напрямую.
tasks:
- name: Create Postgres User
shell: /bin/createuser -D -R -S myuser
become: yes
become_user: postgres
Часто, когда пользователь получает sudo
разрешения стать root
они уже получают ALL
и стать любой user, включая postgres.
В качестве альтернативы создайте дополнительное разрешение sudo, чтобы ваш доступный пользователь мог выполнять (определенные) команды как пользователь postgres.
Заметка: Рассмотрите возможность использования Ansible Postgres модули базы данных для управления вашими базами данных, ролями и разрешениями.
В ответ на ваш комментарий: Я подключаюсь к Ansible как обычный пользователь:
ansible example -a "/bin/whoami"
example | SUCCESS | rc=0 >>
hbruijn
У меня довольно типичный "/etc/sudoers.d/hbruijn
"фрагмент, который не накладывает никаких ограничений на то, что я (мой пользователь Ansible) могу делать:
# /etc/sudoers.d/hbruijn
hbruijn ALL = NOPASSWD: ALL
И тогда я могу become
любой пользователь для выполнения команд под другим идентификатором пользователя и задачей без вызова sudo
или su
первый:
ansible example -b --become-user=root -a "/bin/whoami"
example | SUCCESS | rc=0 >>
root
или:
ansible example -b --become-user=postgres -a "/bin/whoami"
example | SUCCESS | rc=0 >>
postgres
все без подключения Ansible напрямую от имени суперпользователя.