ansible-playbook sudoers

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 )