Назад | Перейти на главную страницу

Ansible: стать дважды

Я бы хотел запустить ansible так, чтобы:

Это типичная процедура для мира 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 напрямую от имени суперпользователя.