freehck.user-func
user-func
Le rôle user-func a pour but de configurer les utilisateurs de manière fonctionnelle : la configuration des utilisateurs sera exactement la même que celle décrite dans la configuration et garantit qu'il n'y a pas d'effets secondaires.
Description
Le rôle est écrit en supposant que le point d'entrée principal de la configuration n'est pas la machine, mais l'utilisateur. C'est-à-dire que nous ne voulons pas créer un utilisateur sur la machine, mais donner à l'utilisateur un accès à certaines machines à la place.
Vous pouvez :
- gérer la base de données des clés publiques de vos utilisateurs
- définir plusieurs clés pour un utilisateur
- supprimer des utilisateurs (les répertoires personnels ne sont pas supprimés)
- verrouiller/déverrouiller l'authentification par mot de passe
- définir une configuration locale par hôte ou groupe d'hôtes Ansible
Variables du rôle
Les paramètres sont divisés en globaux et locaux. Si le paramètre est décrit localement pour l'hôte (dans le dictionnaire des hôtes), alors le paramètre global est pris. Si le paramètre global n'est pas décrit, la valeur par défaut est utilisée.
username : Requis, spécifie le nom d'utilisateur sur la machine.
hosts : paramètre obligatoire, définit la liste des hôtes auxquels l'utilisateur aura accès et leur configuration locale.
give_sudo : le groupe sudo/wheel est pris dans un paramètre séparé en raison de son importance exceptionnelle. Ce paramètre détermine si l'utilisateur a le droit de commencer avec sudo ou non. Peut être utilisé dans la configuration locale. Par défaut non.
password : définit le mot de passe pour l'utilisateur. Peut être utilisé dans la configuration locale.
lock_password : définit le verrouillage du mot de passe. Si défini sur oui, il n'est pas permis à l'utilisateur d'entrer le mot de passe (dans shadow, on met '*'). Peut être utilisé localement. Par défaut non.
disable_user : bloque la connexion pour l'utilisateur. Si défini sur oui, il est impossible de se connecter avec l'utilisateur donné, y compris via ssh (le shell par défaut est installé en nologin). Peut être utilisé localement. Par défaut non.
delete_user : supprime l'utilisateur (mais pas son répertoire personnel). Peut être utilisé localement. Par défaut non. À utiliser avec prudence, et il vaut mieux ne pas l'utiliser du tout - disable_user est l'option préférable.
shell : Spécifie le shell pour l'utilisateur. Peut être utilisé localement. La valeur par défaut est /bin/bash.
ssh_public_keys : liste d'objets avec les champs nom, nom complet (optionnel) et clé. C'est une base avec toutes les clés connues pour pouvoir les gérer par nom.
authorized_keys : liste de noms provenant de la base de données ssh_public_keys. Avec ce nom dans le champ nom d'un objet de la base de données, sa clé est ajoutée à .ssh/authorized_keys. Peut être utilisé localement. Par défaut [].
common_groups : un paramètre exclusivement global. Spécifie les groupes qui sont communs à tous les hôtes sur lesquels l'utilisateur sera créé. Il est recommandé de définir ["users"], par défaut []. Ne pas y ajouter sudo. Pour cela, il y a give_sudo.
groups : un paramètre exclusivement local. Spécifie les groupes qui seront ajoutés aux common_groups sur cet hôte particulier. Ne pas ajouter sudo ici. Pour cela, il y a give_sudo.
Exemple 1 (court)
manage-users.yml
- hosts:
- all
become: yes
become_user: root
vars_files:
- vars/ssh_public_keys.yml
vars:
common_groups: [ users ]
roles:
- tags: [ admins, freehck ]
role: user-func
username: freehck
give_sudo: yes
authorized_keys: [ freehck ]
hosts:
- host: all
- tags: [ special, jenkins ]
role: user-func
username: jenkins
authorized_keys: [ jenkins, jenkins-slave01, jenkins-slave02 ]
hosts:
- host: all
- host: jenkins-slave01
groups: [ docker ]
- tags: [ testers, tester ]
role: user-func
username: tester
authorized_keys: [ tester ]
hosts:
- host: stand01
- host: stand02
- host: db01
vars/ssh_public_keys.yml
ssh_public_keys:
- name: freehck
fullname: Dmitrii Kashin
key: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDPSD4/7GDGnHuFr/p/ZmDoW0RZ/3bHvoI/s5WwOpARJuqgnzj2CyfiPxkKzvCuncUq8O8FfjnAyyj7pEIV2MSEQnxzoFDfcJHRH4sw68TLlGENUvQjtTqrZQ2fyZ6Nu7dktq4A3aOxV0rVZa2oJMA1V1LFj5y9u9B4Sj1pSuY0HkAF1XHJDyBQUs8ncrBkwakqCw0wKI7aLC6tph4whFzJqs8LSnwrR6kMMyVC2xjaw8vczM1wcYVfc6lPN7tWJTH3GrjQRdEYEJo3VqInoiQ9OKb171fMrp9N1u6a88ffTDdX3Jlgm8MRSItuGkdJ9tNXke/hq7GuKmavx7sMf34d freehck
- name: jenkins
key: ...
- name: jenkins-slave01
key: ...
- name: jenkins-slave02
key: ...
Exemple 2 (avec toutes les options possibles)
- role: user-func
username: freehck # requis
give_sudo: no
password: "monsecret"
lock_password: no
disable_user: no
delete_user: no
shell: "/bin/bash"
common_groups: [ "users" ]
authorized_keys: [ nom_de_clé, ... ]
ssh_public_keys:
- name: freehck
fullname: Dmitrii Kashin
key: <clé-publique>
hosts: # requis
- host: hôte-ou-groupe-inventaire # requis
give_sudo: yes
password: "monsecret"
lock_password: no
disable_user: no
delete_user: no
shell: "/bin/zsh"
groups: [ "vboxusers" ]
authorized_keys: [ nom_de_clé, ... ]
- host: hôte-ou-groupe-inventaire
...
Licence
GPLv3+
Informations sur l'auteur
Ce rôle a été écrit par Dmitrii Kashin aka freehck
ansible-galaxy install freehck.user-func