Comprensión de la Configuración de la Contraseña de Sudo en Ansible
En el paso anterior, creamos un playbook básico que usaba privilegios sudo sin requerir una contraseña. Sin embargo, en muchos escenarios del mundo real, necesitará proporcionar una contraseña de sudo para ejecutar comandos con privilegios. Exploremos cómo manejar las contraseñas de sudo en Ansible.
Cómo Ansible Maneja las Contraseñas de Sudo
Cuando Ansible necesita ejecutar un comando con privilegios elevados en un sistema remoto, utiliza la funcionalidad become. Por defecto, Ansible utiliza el comando sudo para la escalada de privilegios, pero puede configurarlo para usar otros métodos como su, pbrun o pfexec.
Si el usuario que ejecuta Ansible requiere una contraseña para usar sudo, Ansible necesita saber esta contraseña. Hay varias formas de proporcionar la contraseña de sudo a Ansible:
- Opción de línea de comandos:
-K o --ask-become-pass
- Variable del playbook:
become_password
- Archivo de configuración:
ansible.cfg
- Ansible Vault: Para almacenar contraseñas de forma segura
Creación de un Usuario de Prueba con Requisito de Contraseña de Sudo
Para demostrar cómo manejar las contraseñas de sudo, creemos un usuario de prueba que requiera una contraseña para las operaciones de sudo:
sudo adduser ansible_test
Cuando se le solicite, ingrese la contraseña ansible123 y complete el proceso de creación del usuario.
A continuación, demos a este usuario privilegios sudo pero requiramos una contraseña:
echo "ansible_test ALL=(ALL) ALL" | sudo tee /etc/sudoers.d/ansible_test
Esta configuración permite al usuario ansible_test usar sudo, pero requerirá la contraseña del usuario cada vez.
Creación de un Playbook con Manejo de Contraseña de Sudo
Ahora, creemos un playbook que demuestre cómo manejar las contraseñas de sudo. Cree un nuevo archivo llamado sudo_password_playbook.yml en el 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 }}"
Guarde este archivo como ~/project/ansible-sudo-lab/sudo_password_playbook.yml
Ejecución del Playbook con Entrada de Contraseña
Cuando desee ejecutar un playbook como un usuario que requiere una contraseña de sudo, puede usar la opción -K (o --ask-become-pass) para solicitar la contraseña:
ansible-playbook -i inventory sudo_password_playbook.yml -K
Dado que estamos ejecutando como el usuario labex, que tiene sudo sin contraseña, en realidad no se le solicitará una contraseña. Sin embargo, en un entorno de producción donde sudo sin contraseña no está configurado, Ansible le solicitaría que ingrese la contraseña de sudo.
Para simular este escenario con nuestro usuario de prueba, puede ejecutar el siguiente comando (aunque no funcionará completamente en este entorno de laboratorio debido a la falta de configuración de SSH):
ansible-playbook -i inventory sudo_password_playbook.yml -u ansible_test -K
Cuando se le solicite la contraseña BECOME, ingresaría ansible123.
Especificación de la Contraseña de Sudo en una Variable de Ansible
En lugar de ingresar la contraseña de forma interactiva, puede proporcionar la contraseña de sudo como una variable al ejecutar el playbook:
ansible-playbook -i inventory sudo_password_playbook.yml -e "ansible_become_password=ansible123"
Este enfoque es útil para scripts automatizados donde la entrada interactiva no es posible. Sin embargo, expone la contraseña en el historial de la línea de comandos, lo cual es un riesgo de seguridad. En un entorno de producción, debe usar Ansible Vault para almacenar información confidencial de forma segura.