28.7. Utiliser Ansible pour configurer une console web afin de permettre à un utilisateur authentifié par une carte à puce de se connecter en SSH à un hôte distant sans avoir à s'authentifier à nouveau
Après vous être connecté à un compte d'utilisateur sur la console web RHEL, en tant qu'administrateur du système de gestion des identités (IdM), vous pouvez avoir besoin de vous connecter à des machines distantes en utilisant le protocole SSH
. Vous pouvez utiliser la fonction de délégation restreinte pour utiliser SSH
sans devoir vous authentifier à nouveau.
Cette procédure décrit comment utiliser les modules servicedelegationrule
et servicedelegationtarget
ansible-freeipa
pour configurer une console web afin d'utiliser la délégation contrainte. Dans l'exemple ci-dessous, la session de la console web s'exécute sur l'hôte myhost.idm.example.com et est configurée pour accéder à l'hôte remote.idm.example.com en utilisant SSH
au nom de l'utilisateur authentifié.
Conditions préalables
-
Le mot de passe de l'IdM
admin
. -
root
accès à remote.idm.example.com. - Le service de console web est présent dans l'IdM.
- L'hôte remote.idm.example.com est présent dans l'IdM.
La console web a créé un ticket
S4U2Proxy
Kerberos dans la session de l'utilisateur. Pour vérifier que c'est bien le cas, connectez-vous à la console web en tant qu'utilisateur IdM, ouvrez la pageTerminal
et entrez :$ klist Ticket cache: FILE:/run/user/1894000001/cockpit-session-3692.ccache Default principal: user@IDM.EXAMPLE.COM Valid starting Expires Service principal 07/30/21 09:19:06 07/31/21 09:19:06 HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM 07/30/21 09:19:06 07/31/21 09:19:06 krbtgt/IDM.EXAMPLE.COM@IDM.EXAMPLE.COM for client HTTP/myhost.idm.example.com@IDM.EXAMPLE.COM
Vous avez configuré votre nœud de contrôle Ansible pour qu'il réponde aux exigences suivantes :
- Vous utilisez la version 2.8 ou ultérieure d'Ansible.
-
Vous avez installé le paquetage
ansible-freeipa
sur le contrôleur Ansible. - L'exemple suppose que dans le répertoire ~/MyPlaybooks/ vous avez créé un fichier d'inventaire Ansible avec le nom de domaine complet (FQDN) du serveur IdM.
-
L'exemple suppose que le coffre-fort secret.yml Ansible stocke votre
ipaadmin_password
.
Procédure
Naviguez jusqu'à votre répertoire ~/MyPlaybooks/ répertoire :
$ cd ~/MyPlaybooks/
Créez un playbook
web-console-smart-card-ssh.yml
avec le contenu suivant :Créer une tâche qui assure la présence d'une cible de délégation :
--- - name: Playbook to create a constrained delegation target hosts: ipaserver vars_files: - /home/user_name/MyPlaybooks/secret.yml tasks: - name: Ensure servicedelegationtarget web-console-delegation-target is present ipaservicedelegationtarget: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-target
Ajouter une tâche qui ajoute l'hôte cible à la cible de délégation :
- name: Ensure servicedelegationtarget web-console-delegation-target member principal host/remote.idm.example.com@IDM.EXAMPLE.COM is present ipaservicedelegationtarget: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-target principal: host/remote.idm.example.com@IDM.EXAMPLE.COM action: member
Ajouter une tâche qui assure la présence d'une règle de délégation :
- name: Ensure servicedelegationrule delegation-rule is present ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-rule
Ajoutez une tâche qui garantit que le principal Kerberos du service client de la console Web est un membre de la règle de délégation contrainte :
- name: Ensure the Kerberos principal of the web console client service is added to the servicedelegationrule web-console-delegation-rule ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-rule principal: HTTP/myhost.idm.example.com action: member
Ajouter une tâche qui garantit que la règle de délégation contrainte est associée à la cible de délégation web-console-delegation-target :
- name: Ensure a constrained delegation rule is associated with a specific delegation target ipaservicedelegationrule: ipaadmin_password: "{{ ipaadmin_password }}" name: web-console-delegation-rule target: web-console-delegation-target action: member
- Enregistrer le fichier.
Exécutez le playbook Ansible. Spécifiez le fichier du livre de jeu, le fichier contenant le mot de passe protégeant le fichier secret.yml et le fichier d'inventaire :
$ ansible-playbook --vault-password-file=password_file -v -i inventory web-console-smart-card-ssh.yml
Activer l'authentification Kerberos sur remote.idm.example.com:
-
SSH
à remote.idm.example.com commeroot
. -
Ouvrez le fichier
/etc/ssh/sshd_config
pour le modifier. -
Activez
GSSAPIAuthentication
en décommentant la ligneGSSAPIAuthentication no
et en la remplaçant parGSSAPIAuthentication yes
.
-
Ressources supplémentaires
- Connexion à la console web avec des cartes à puce
- Délégation contrainte dans la gestion de l'identité
-
README-servicedelegationrule.md
etREADME-servicedelegationtarget.md
dans le répertoire/usr/share/doc/ansible-freeipa/
-
Exemples de playbooks dans les répertoires
/usr/share/doc/ansible-freeipa/playbooks/servicedelegationtarget
et/usr/share/doc/ansible-freeipa/playbooks/servicedelegationrule