ansible playbook - Ansible: crear un usuario con privilegios de sudo
ansible-playbook sudoers (3)
A veces es saber qué preguntar. No lo sabía, ya que soy un desarrollador que ha realizado algunos trabajos de DevOps.
Aparentemente, el inicio de sesión ''sin contraseña'' o NOPASSWD es algo que debe colocar en el archivo / etc / sudoers.
La respuesta a mi pregunta está en Ansible: mejores prácticas para mantener la lista de sudoers .
El fragmento de código Ansible playbook se ve así por mi problema:
- name: Make sure we have a ''wheel'' group
group:
name: wheel
state: present
- name: Allow ''wheel'' group to have passwordless sudo
lineinfile:
dest: /etc/sudoers
state: present
regexp: ''^%wheel''
line: ''%wheel ALL=(ALL) NOPASSWD: ALL''
validate: ''visudo -cf %s''
- name: Add sudoers users to wheel group
user: name=deployer groups=wheel append=yes state=present createhome=yes
- name: Set up authorized keys for the deployer user
authorized_key: user=deployer key="{{item}}"
with_file:
- /home/railsdev/.ssh/id_rsa.pub
Y la mejor parte es que la solución es idempotente. No agrega la línea
%wheel ALL=(ALL) NOPASSWD: ALL
a / etc / sudoers cuando el libro de jugadas se ejecuta una vez posterior. Y sí ... pude ingresar al servidor como "desplegador" y ejecutar comandos sudo sin tener que dar una contraseña.
Me hice cargo de un servidor Ubuntu 14.04. Tiene un usuario llamado "desplegador" (usado con capistrano), y como tal, necesita privilegios de sudo. Con esta configuración, puedo iniciar sesión en el servidor y hacer cosas como:
workstation> ssh deployer@myserver
myserver> sudo apt-get install git
myserver> exit
workstation>
Estoy tratando de descubrir cómo usar Ansible (versión 2.0.2.0 y python 2.7.3) para crear un usuario llamado "desplegador" y poder iniciar sesión en el servidor con esa identificación y luego sudo-ish cosas como "apt" -get install ". Mi libro de jugadas se ve así:
---
- hosts: example
become: yes
tasks:
- name: Update apt cache
apt:
update_cache: yes
cache_valid_time: 3600
- group: name=sudo state=present
- name: Add deployer user and add it to sudo
user: name=deployer
state=present
createhome=yes
become: yes
become_method: "sudo"
- name: Set up authorized keys for the deployer user
authorized_key: user=deployer key="{{item}}"
with_file:
- /home/jaygodse/.ssh/id_rsa.pub
Después de ejecutar este libro de jugadas, puedo ingresar a la máquina como "desplegador" (por ejemplo, ssh deployer @ myserver), pero si ejecuto un comando sudo, siempre me pide mi contraseña de sudo.
Entiendo que el usuario "desplegador" finalmente tiene que encontrar su camino en el archivo de los usuarios de visudo, pero no puedo descifrar qué encantamientos mágicos Ansible invocar para poder ingresar a la máquina como desplegador y luego ejecutar un comando sudo (por ejemplo, sudo apt-get install git ") sin que se le solicite una contraseña de sudo.
He buscado por todas partes, y parece que no puedo encontrar un fragmento de libro de jugadas Ansible que coloque al usuario "desplegador" en el grupo sudo sin requerir una contraseña. ¿Cómo se hace esto?
Crear un usuario con privilegios de sudo es poner al usuario en
/etc/sudoers
, o hacer que el usuario sea miembro de un grupo especificado en
/etc/sudoers
.
Y hacerlo sin contraseña es especificar además
NOPASSWD
en
/etc/sudoers
.
Ejemplo de
/etc/sudoers
:
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
## Same thing without a password
%wheel ALL=(ALL) NOPASSWD: ALL
Y en lugar de jugar con el
/etc/sudoers
, podemos crear un nuevo archivo en el directorio
/etc/sudoers.d/
ya que este directorio está incluido por
/etc/sudoers
de forma predeterminada, lo que evita la posibilidad de romper el archivo sudoers existente, y También elimina la dependencia del contenido dentro de
/etc/sudoers
.
Para lograr lo anterior en Ansible, consulte lo siguiente:
- name: sudo without password for wheel group
copy:
content: ''%wheel ALL=(ALL:ALL) NOPASSWD:ALL''
dest: /etc/sudoers.d/wheel_nopasswd
mode: 0440
Puede reemplazar
%wheel
con otros nombres de grupo como
%sudoers
u otros nombres de usuario como
deployer
.
Usando visudo, presiona
Shift+G
y agrega al final del archivo:
deployer ALL=(ALL) NOPASSWD: ALL
luego escriba y salga (
:wq
)