Mes serveurs Linux lorsqu’ils sont provisionnés via Foreman (j’y reviendrais) vont s’enregistrer à mon FreeIPA qui gère l’authentification et mon DNS interne.
Histoire de pousser un peu la sécurité, je me connecte en SSH depuis mon MacOS à ces machines via Kerberos.
Et pour cela il faut configurer votre MacOS mais surtout vérifier deux choses avant de démarrer :
1. Une bonne résolution DNS de vos FreeIPA (2 MMR dans mon cas)
2. Que votre date et heure coïncide avec vos serveurs FreeIPA, le plus simple étant de pointer votre MacOS sur vos serveurs FreeIPA
Mais trêve de bavardage, commençons.
Modification du fichier de configuration de Kerberos
Sortez votre terminal préféré puis modifier le fichier /etc/krb5.conf
[libdefaults] default_realm = DOMAIN.LOCAL dns_lookup_realm = true dns_lookup_kdc = false rdns = false ticket_lifetime = 24h forwardable = yes [realms] REZO.LOCAL = { kdc = freeipa1.domain.local:88 kdc = freeipa2.domain.local:88 master_kdc = freeipa.domain.local:88 admin_server = freeipa.domain.local:749 default_domain = domain.local } [domain_realm] .domain.local = DOMAIN.LOCAL domain.local = DOMAIN.LOCAL
Une fois la modification effectuée vous pouvez lancer cette commande afin de faire une demande de ticket auprès des FreeIPA.
kinit username
ou alors si votre compte local coïncide avec votre compte sur FreeIPA un
kinit
suffit
En exécutant cette commande, le système devrait vous demander votre mot de passe.
Si la commande se déroule correctement, vous pouvez lister les tickets via la commande :
klist Credentials cache: API:LK7D1AF7-71D5-9A3E-9QG3-HU87F6CH6KR2 Principal: username@DOMAIN.LOCAL Issued Expires Principal Jun 12 05:19:44 2016 Jun 13 05:19:43 2016 krbtgt/DOMAIN.LOCAL@DOMAIN.LOCAL
Nickel, maintenant que l’on a un ticket, on va pouvoir l’utiliser dans différents services comme SSH mais aussi HTTP.
Kerberos et SSH
Pour que votre connection SSH utilise ce ticket, il faut activer le support de GSSAPI en modifiant le fichier .ssh/config coté client (MacOS) et ajouter ces lignes :
Host *.domain.local GSSAPIAuthentication yes GSSAPIDelegateCredentials yes
Après la modification de celui-ci, lors d’une connexion en SSH a un serveur du domaine domain.local, il ne devrait pas vous demander votre mot de passe et utiliser le ticket préalablement obtenu.
Côté serveur, comme cité plus haut mes machines dès qu’elles sont provisionnées vont s’enregistrer dans mon FreeIPA qui reconfigure SSH pour permettre l’authentification via GSSAPI.
Example de connexion a serveur SSH avec Kerberos
ssh -v server_name.domain.local OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011 debug1: Reading configuration data /Users/username/.ssh/config debug1: /Users/username/.ssh/config line 1: Applying options for *.domain.local <-- On voit ici que l'on applique la configuration du domaine ... debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic <-- Les méthodes acceptées par le serveur, dans l'ordre SSH va d'abord utiliser GSSAPI debug1: Next authentication method: gssapi-keyex debug1: No valid Key exchange context debug1: Next authentication method: gssapi-with-mic debug1: Delegating credentials debug1: Delegating credentials debug1: Authentication succeeded (gssapi-with-mic). Authenticated to server_name.domain.local ([192.168.1.1]:22).
Comme évoqué plus tôt, vous pouvez aussi maintenant vous connecter de façon automatique à vos serveurs HTTP où vous avez préalablement configuré l'authentification via Kerberos.
Un peut de GUI dans tout ça ?
Comme le ticket a une date d'expiration, il faut bien le renouveller.
On peut toujours sortir le terminal, mais c'est toujours plus pratique d'avoir une interface simple permettant d'effectuer l'opération.
Et pour ça, MacOS fourni un outil "Ticket Viewer" contenu dans les entrailles de votre OS.
Je vous renvoi vers le site du MIT qui explique sa configuration.