Como posso parar de escrever senhas para os arquivos de log?

14

Estou configurando um servidor MySQL e quero que o Ansible defina a senha mysql-root durante a instalação.

Com a ajuda da internet, desenvolvi esta solução:

- name: Set MySQL root password before installing
  debconf: name='mysql-server' question='mysql-server/root_password' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Confirm MySQL root password before installing
  debconf: name='mysql-server' question='mysql-server/root_password_again' value='{{mysql_root_pwd | quote}}' vtype='password'
- name: Install Mysql
  apt: pkg=mysql-server state=latest

mysql_root_pwd é uma variável carregada do Ansible Vault. Isso funciona bem, mas agora no servidor há muitas linhas no log:

Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password name=mysql-server unseen=None
Apr 10 14:39:59 servername ansible-debconf: Invoked with value=THEPASSWORD vtype=password question=mysql-server/root_password_again name=mysql-server unseen=None

Como posso impedir que o Ansible escreva senhas em texto puro nos arquivos de registro?

    
por claus 10.04.2015 / 16:07

4 respostas

7

O comportamento observado parece ser um bug no módulo debconf. Eu arquivei um relatório de erros .

O usuário bcoca no github apontou que é possível usar a diretiva no_log: true em tarefas, que definem senhas, para evitar o registro. Esta é uma solução alternativa que funciona para mim até que o bug seja corrigido.

    
por 15.04.2015 / 12:28
19

Para impedir que uma tarefa com informações confidenciais seja registrada, no syslog ou outro, defina no_log: true na tarefa:

- name: secret stuff
  command: "echo {{secret_root_password}} | sudo su -"
  no_log: true

A execução da tarefa ainda será registrada, mas com poucos detalhes. Além disso, o módulo usado deve suportar o no_log, portanto, teste os módulos personalizados.

Veja FAQ Ansible para mais detalhes. Pode ser aplicado a um playbook inteiro, no entanto, a saída fica um pouco desagradável com "censurado!" mensagens.

    
por 25.03.2016 / 14:48
2

Eu resolvi atualizando a versão do Ansible para 1.6.1

sudo pip install ansible==1.6.1
    
por 05.10.2016 / 12:26
1

De acordo com documentos Ansible :

log_path

If present and configured in ansible.cfg, Ansible will log information about executions at the designated location. Be sure the user running Ansible has permissions on the logfile:

log_path=/var/log/ansible.log 

This behavior is not on by default. Note that ansible will, without this setting, record module arguments called to the syslog of managed machines. Password arguments are excluded.

Parece que definir log_path no seu nó de controle resultará em não ter logs nos nós de destino.

    
por 10.04.2015 / 17:22