Ansible: torne-se duas vezes

2

Gostaria de rodar ansible tal que:

  • usuário remoto é usuário 'normal'

  • ... quem become s raiz via sudo para executar um monte de tarefas

  • ... who ' become s postgres usuário via su - postgres , do root, para criar um banco de dados PostgreSQL.

Este é um procedimento típico para o mundo do PostgreSQL: um usuário especial acessível apenas por su de root .

A especificação de parâmetros de execução em uma reprodução só funciona quando se conecta como root, já que as opções de CLI substituem o definido em uma reprodução.

Existem maneiras mais elegantes de conseguir isso do que adicionar regras sudo ou executar

command: /usr/bin/su - postgres -c '/bin/createuser -D -R -S myuser

de ansible, dizendo para fechar os avisos?

    
por badbishop 13.12.2017 / 10:48

1 resposta

6

Por que você precisaria mudar os usuários efetivos duas vezes?

Você pode especificar o ID do usuário efetivo que o ansible precisa executar conforme a tarefa, portanto, quando você precisar executar um comando como o usuário postgres, defina isso diretamente.

tasks:
  - name: Create Postgres User
    shell: /bin/createuser -D -R -S myuser
    become: yes
    become_user: postgres

Frequentemente, quando um usuário obtém sudo permissões para se tornar root , ele já recebe ALL e se torna qualquer usuário, incluindo postgres.

Alternativamente, crie uma permissão sudo adicional para que seu usuário possa executar comandos (específicos) como o usuário postgres.

Observação : considere o uso dos módulos de banco de dados do Ansible Postgres para gerenciar seu bancos de dados, funções e permissões.

Em resposta ao seu comentário: Eu me conecto com o Ansible como um usuário comum:

ansible example -a "/bin/whoami"
example | SUCCESS | rc=0 >>
hbruijn

Eu tenho um trecho " /etc/sudoers.d/hbruijn " bastante típico que não impõe restrições sobre o que eu (meu usuário Ansible) pode fazer:

# /etc/sudoers.d/hbruijn
hbruijn  ALL = NOPASSWD: ALL

E então eu posso become qualquer usuário executar comandos com uma ID de usuário e tarefa diferentes sem chamar sudo ou su first:

ansible example -b --become-user=root  -a "/bin/whoami"
example | SUCCESS | rc=0 >>
root

ou:

ansible example -b --become-user=postgres  -a "/bin/whoami"
example | SUCCESS | rc=0 >>
postgres

tudo sem Ansible conectando diretamente como superusuário.

    
por 13.12.2017 / 13:43