ryandaniels.create_users

ansible-role-crear-usuarios

CI

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 Ansible webserver webserver1, webserver2 y webserver3.

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
Acerca del proyecto

Role to manage users on linux

Instalar
ansible-galaxy install ryandaniels.create_users
Licencia
mit
Descargas
187.6k
Propietario
Ansible all the things