ryandaniels.create_users
ansible-role-crear-usuarios
Rol para gestionar usuarios en Linux.
Gestiona usuarios en el archivo de configuración de la lista de usuarios (la lista está en el archivo vars/secret).
Agrega usuarios (con uid específico), cambia contraseñas, bloquea/desbloquea cuentas de usuario, gestiona acceso sudo (por usuario), agrega clave(s) ssh para la autenticación basada en sshkey, establece el grupo principal y gid del usuario, y añade el usuario (adiciona) a grupos, que se crearán si no existen.
Esto se realiza de forma "grupal" (variables de grupo de Ansible), como se establece en el archivo de configuración. El grupo proviene del grupo de Ansible definido para un servidor en el archivo de inventario. También se admite all
para aplicar a todos los hosts en un archivo de inventario.
Un ejemplo más detallado se puede encontrar en la publicación de blog: Gestión de Usuarios con Ansible
Nota: Eliminar usuarios no se realiza intencionadamente.
Distribuciones probadas
- Ubuntu 22.04, 20.04, 18.04, 16.04
- CentOS / RHEL: 9.1, 8.x, 7.x, 6.5, 5.9
Dependencias
Requiere Ansible 2.6 (debido a un error anterior 20096 con usuarios que no expiran)
ansible-vault
Usa ansible-vault para cifrar información sensible de git.
cat vars/secret
# cifrar si es texto sin formato (antes de commit/push a git)
ansible-vault encrypt vars/secret
# Editar archivo cifrado:
ansible-vault edit vars/secret
vi .vaultpass
- Ingresa la contraseña de Ansible Vault desde Password Safe
chmod 600 .vaultpass
vi ansible.cfg
# Inserta las siguientes líneas
[defaults]
vault_password_file = ./.vaultpass
.gitignore
vi .gitignore
# Inserta las siguientes líneas
.vaultpass
.retry
secret
*.secret
Cómo generar contraseña
- en Ubuntu - Instala el paquete "whois"
mkpasswd --method=SHA-512
- en RedHat - Usa Python
python -c 'import crypt,getpass; print(crypt.crypt(getpass.getpass(), crypt.mksalt(crypt.METHOD_SHA512)))'
Configuración Predeterminada
---
# Nota: 'debug_enabled_default: true' mostrará contraseñas cifradas en la salida.
debug_enabled_default: false
default_update_password: on_create
default_shell: /bin/bash
default_generate_ssh_key_comment: "{{ item.username }}@{{ ansible_hostname }}"
Configuración del Usuario
Ubicación del archivo: vars/secret
- username: nombre de usuario - sin espacios (requerido)
- uid: El valor numérico del ID del usuario (opcional)
- user_state: present|lock (requerido)
- password: contraseña cifrada sha512 (opcional). Si no se establece, la contraseña se establece en "!"
- update_password: always|on_create (opcional, el valor predeterminado es on_create para mayor seguridad).
ADVERTENCIA: cuando 'always', la contraseña cambiará al valor de contraseña.
Si usas 'always' en usuarios existentes, asegúrate de tener la contraseña establecida. - comment: Nombre completo y departamento o descripción de la aplicación (opcional) (¡Pero deberías establecer esto!)
- primarygroup: Nombre del grupo principal (opcional).
- primarygid: ID del grupo principal (opcional). Si el mismo gid se reutiliza en el servidor, el playbook fallará. Si se especifica un grupo duplicado con un gid diferente, se usará el último configurado. ADVERTENCIA: cambiar el primarygroup y/o primarygid de usuarios existentes no cambiará los permisos de los archivos existentes que pertenecen a ese usuario. También quedarán entradas antiguas en /etc/group. Usar con precaución.
- groups: Lista separada por comas de los grupos a los que se añadirá el usuario (adicionados). Si el grupo no existe, se creará en el servidor específico. Este no es el grupo principal (el grupo principal no se modifica).
- shell: ruta al shell (opcional, el valor predeterminado es /bin/bash)
- ssh_key: Agregar clave ssh autorizada para la autenticación basada en clave ssh (opcional)
NOTA: 1 clave puede ir en una sola línea, pero si hay múltiples claves, usa el formato a continuación del primer ejemplo. - exclusive_ssh_key: yes|no (opcional, predeterminado: no)
ADVERTENCIA: exclusive_ssh_key: yes - eliminará cualquier clave ssh no definida aquí! no - agregará cualquier clave especificada. - generate_ssh_key: Si se debe generar una clave SSH para el usuario en cuestión. (opcional, el valor predeterminado es 'no')
NOTA: Esto no sobrescribirá una clave SSH existente. - ssh_key_bits: Opción para especificar el número de bits en la clave SSH a crear. (opcional, el valor predeterminado es establecido por ssh-keygen)
- ssh_key_passphrase: Establecer una frase de contraseña para la clave SSH. Si no se proporciona frase, la clave SSH no tendrá frase.
- generate_ssh_key_comment: Especificar el comentario para la clave SSH generada (opcional). Si no se especifica, se usará default_generate_ssh_key_comment del YAML por defecto.
- use_sudo: yes|no (opcional, predeterminado no)
- use_sudo_nopass: yes|no (opcional, predeterminado no). yes = sudo sin contraseña.
- system: yes|no (opcional, predeterminado no). yes = crear cuenta de sistema (uid < 1000). No funciona en usuarios existentes.
- servers: lista de sub-elementos de servidores donde se realizan cambios. (requerido)
Estos son los grupos de Ansible de tu archivo de inventario de Ansible. En los ejemplos a continuación,webserver
serían los 3 servidores en el inventario de Ansiblewebserver
webserver1
,webserver2
ywebserver3
.
Nota:
Puedes tener nombres de usuario duplicados en diferentes servidores, si deseas tener configuraciones diferentes. Consulta el ejemplo a continuación de testuser102 tiene sudo en los servidores definidos como el grupo webserver
en el inventario, pero sin sudo en el grupo database
.
Ejemplo de archivo de inventario de Ansible
[webserver]
webserver1
webserver2
webserver3
[database]
db1
db2
db3
[monitoring]
monitor1
Ejemplo de archivo de configuración (vars/secret)
---
users:
- username: testuser101
password: $6$/y5RGZnFaD3f$96xVdOAnldEtSxivDY02h.DwPTrJgGQl8/MTRRrFAwKTYbFymeKH/1Rxd3k.RQfpgebM6amLK3xAaycybdc.60
update_password: on_create
comment: Usuario de Prueba 100
shell: /bin/bash
ssh_key: |
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx8crAHG/a9QBD4zO0ZHIjdRXy+ySKviXVCMIJ3/NMIAAzDyIsPKToUJmIApHHHF1/hBllqzBSkPEMwgFbXjyqTeVPHF8V0iq41n0kgbulJG testuser101@server1
ssh-rsa AAAA.... testuser101@server2
exclusive_ssh_key: yes
use_sudo: no
use_sudo_nopass: no
user_state: present
servers:
- webserver
- database
- monitoring
- username: testuser102
password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
update_password: always
comment: Usuario de Prueba 101
groups: testcommon, testgroup102web
shell: /bin/sh
use_sudo: yes
user_state: present
servers:
- webserver
- all
- username: testuser102
password: $6$F/KXFzMa$ZIDqtYtM6sOC3UmRntVsTcy1rnsvw.6tBquOhX7Sb26jxskXpve8l6DYsQyI1FT8N5I5cL0YkzW7bLbSCMtUw1
update_password: always
comment: Usuario de Prueba 101
groups: testcommon, testgroup102db
shell: /bin/sh
user_state: present
servers:
- database
- username: testuser103
password: $6$wBxBAqRmG6O$gPbg9hYShkuIe3YKMFujwiKsPKZHNFwoK4yCyTOlploljz53YSoPdCn9P5k8Qm0z062Q.8hvJ6DnnQQjwtrnS0
user_state: present
servers:
- webserver
- username: testuser104
primarygroup: testgroup104primary
ssh_key: ssh-rsa AAAB.... test103@server
exclusive_ssh_key: no
generate_ssh_key: yes
generate_ssh_key_comment: comentario personalizado para la clave ssh generada
use_sudo: no
user_state: present
servers:
- webserver
- monitoring
- username: testuser105
uid: 1099
password: $6$XEnyI5UYSw$Rlc6tXtECtqdJ3uFitrbBlec1/8Fx2obfgFST419ntJqaX8sfPQ9xR7vj7dGhQsfX8zcSX3tumzR7/vwlIH6p/
primarygroup: testgroup105primary
primarygid: 2222
ssh_key: ssh-rsa AAAB.... test107@server
generate_ssh_key: yes
ssh_key_bits: 4096
use_sudo: no
user_state: lock
servers:
- webserver
- database
Ejemplo de Playbook create-users.yml
---
- hosts: '{{inventory}}'
vars_files:
- vars/secret
become: yes
roles:
- create-users
Preparación
- instalar ansible
- crear claves
- ssh al cliente para añadir entrada al archivo known_hosts
- configurar claves autorizadas en el servidor cliente
- ejecutar comandos de ansible
Uso
Crear todos los usuarios
ansible-playbook create-users.yml --ask-vault-pass --extra-vars "inventory=all-dev" -i hosts
ansible-galaxy install ryandaniels.create_users