Entendendo a Configuração da Senha Sudo no Ansible
Na etapa anterior, criamos um playbook básico que usava privilégios sudo sem exigir uma senha. No entanto, em muitos cenários do mundo real, você precisará fornecer uma senha sudo para executar comandos privilegiados. Vamos explorar como lidar com senhas sudo no Ansible.
Como o Ansible Lida com Senhas Sudo
Quando o Ansible precisa executar um comando com privilégios elevados em um sistema remoto, ele usa a funcionalidade become. Por padrão, o Ansible usa o comando sudo para elevação de privilégios, mas você pode configurá-lo para usar outros métodos como su, pbrun ou pfexec.
Se o usuário que executa o Ansible precisar de uma senha para usar o sudo, o Ansible precisa saber essa senha. Existem várias maneiras de fornecer a senha sudo ao Ansible:
- Opção de linha de comando:
-K ou --ask-become-pass
- Variável do playbook:
become_password
- Arquivo de configuração:
ansible.cfg
- Ansible Vault: Para armazenar senhas com segurança
Criando um Usuário de Teste com Requisito de Senha Sudo
Para demonstrar como lidar com senhas sudo, vamos criar um usuário de teste que exige uma senha para operações sudo:
sudo adduser ansible_test
Quando solicitado, insira a senha ansible123 e conclua o processo de criação do usuário.
Em seguida, vamos dar a este usuário privilégios sudo, mas exigir uma senha:
echo "ansible_test ALL=(ALL) ALL" | sudo tee /etc/sudoers.d/ansible_test
Esta configuração permite que o usuário ansible_test use sudo, mas exigirá a senha do usuário cada vez.
Criando um Playbook com Tratamento de Senha Sudo
Agora, vamos criar um playbook que demonstra como lidar com senhas sudo. Crie um novo arquivo chamado sudo_password_playbook.yml no WebIDE:
---
- name: Playbook with sudo password handling
hosts: localhost
become: true
## We'll provide the become_password when running the playbook
tasks:
- name: Get current user
command: whoami
register: current_user
become: false ## This task doesn't need sudo
- name: Print current user
debug:
msg: "Current user is {{ current_user.stdout }}"
become: false ## This task doesn't need sudo
- name: Run a command with sudo
command: apt update
register: sudo_output
- name: Print sudo command result
debug:
msg: "Command ran with sudo: {{ sudo_output.rc == 0 }}"
Salve este arquivo como ~/project/ansible-sudo-lab/sudo_password_playbook.yml
Executando o Playbook com Entrada de Senha
Quando você deseja executar um playbook como um usuário que exige uma senha sudo, você pode usar a opção -K (ou --ask-become-pass) para solicitar a senha:
ansible-playbook -i inventory sudo_password_playbook.yml -K
Como estamos executando como o usuário labex, que tem sudo sem senha, você não será realmente solicitado a inserir uma senha. No entanto, em um ambiente de produção onde o sudo sem senha não está configurado, o Ansible solicitará que você insira a senha sudo.
Para simular este cenário com nosso usuário de teste, você pode executar o seguinte comando (embora não funcione totalmente neste ambiente de laboratório devido à falta de configuração SSH):
ansible-playbook -i inventory sudo_password_playbook.yml -u ansible_test -K
Quando solicitado a senha BECOME, você deve inserir ansible123.
Especificando a Senha Sudo em uma Variável Ansible
Em vez de inserir a senha interativamente, você pode fornecer a senha sudo como uma variável ao executar o playbook:
ansible-playbook -i inventory sudo_password_playbook.yml -e "ansible_become_password=ansible123"
Essa abordagem é útil para scripts automatizados onde a entrada interativa não é possível. No entanto, ela expõe a senha no histórico da linha de comando, o que é um risco de segurança. Em um ambiente de produção, você deve usar o Ansible Vault para armazenar informações confidenciais com segurança.