Connecter votre MacOS à votre FreeIPA

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *