Services/Kerberos/Install
Fonctionnement
- Le client demande un ticket au KDC (Centre de distribution de clés) en s'authentifiant
- Si l'authentification a réussi, le KDC envoie un ticket au client.
- Le client fait la demande de ressource au serveur cible en présentant son ticket Kerberos
Les comptes sont appelé principal pour kerberos. Ce peut être un utilisateur, un hôte, un service, etc...
Pré-requis
- Les clients doivent avoir un nom d'hôte pleinement qualifié et resolvable via un serveur DNS ou via le fichier <path>/etc/hosts</path>
- Les heures doivent être synchronisées entre les serveurs (via <app>chronyd</app> ou <app>ntpd</app>)
Installation du serveur
Installation
yum install krb5-server krb5-workstation
Configuration
Remplacement du domaine example.com par le notre dans les fichiers de configuration.
sed -i -e 's/EXAMPLE.COM/DIDIER.DNSDYNAMIC.NET/g' -e 's/example.com/didier.dnsdynamic.net/g' /etc/krb5.conf sed -i -e 's/EXAMPLE.COM/DIDIER.DNSDYNAMIC.NET/g' /var/kerberos/krb5kdc/kdc.conf sed -i -e 's/EXAMPLE.COM/DIDIER.DNSDYNAMIC.NET/g' /var/kerberos/krb5kdc/kadm5.acl
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
dns_lookup_realm = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
rdns = false
default_realm = DIDIER.DNSDYNAMIC.NET
default_ccache_name = KEYRING:persistent:%{uid}
[realms]
DIDIER.DNSDYNAMIC.NET = {
kdc = kerberos.didier.dnsdynamic.net
admin_server = kerberos.didier.dnsdynamic.net
}
[domain_realm]
.didier.dnsdynamic.net = DIDIER.DNSDYNAMIC.NET
didier.dnsdynamic.net = DIDIER.DNSDYNAMIC.NET
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
DIDIER.DNSDYNAMIC.NET = {
master_key_type = aes256-cts
#database_name = /var/kerberos/krb5kdc/principal
acl_file = /var/kerberos/krb5kdc/kadm5.acl
dict_file = /usr/share/dict/words
admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab
supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal
#default_principal_flags = +preauth
}
On créer la base de données. Cette étape peut être très longue s'il n'y a pas assez d'entropie. Pour s'assurer qu'il y en ai assez, on peut lancer la commande @find / 1>/dev/null 2>&1@ dans un autre shell afin d'en générer. A la fin, la commande demande la futur mot de passe de la base (xk0un7mysx)
kdb5_util create -s
On ouvre le firewall pour kerberos (port 88)
firewall-cmd --permanent --add-service=kerberos firewall-cmd --reload
On démarre les services
systemctl start krb5kdc systemctl start kadmin systemctl enable kadmin systemctl enable krb5kdc
On va lister les principals déjà disponibles
kadmin.local Authenticating as principal root/admin@DIDIER.DNSDYNAMIC.NET with password. kadmin.local: listprincs K/M@DIDIER.DNSDYNAMIC.NET kadmin/admin@DIDIER.DNSDYNAMIC.NET kadmin/changepw@DIDIER.DNSDYNAMIC.NET kadmin/kerberos.didier.dnsdynamic.net@DIDIER.DNSDYNAMIC.NET krbtgt/DIDIER.DNSDYNAMIC.NET@DIDIER.DNSDYNAMIC.NET kadmin.local: exit
Puis ajouter un principal pour l'utilisateur didier
kadmin.local kadmin.local: ank didier WARNING: no policy specified for didier@DIDIER.DNSDYNAMIC.NET; defaulting to no policy Enter password for principal "didier@DIDIER.DNSDYNAMIC.NET": Re-enter password for principal "didier@DIDIER.DNSDYNAMIC.NET": Principal "didier@DIDIER.DNSDYNAMIC.NET" created. kadmin.local: exit
On vérifie que l'utilisateur didier peut acquérir un jeton kerberos. Si la commande ne renvoie rien, c'est que ça s'est bien passé.
kinit didier
On liste les jetons distribués
klist
Ticket cache: KEYRING:persistent:0:0
Default principal: didier@DIDIER.DNSDYNAMIC.NET
Valid starting Expires Service principal
25/02/2015 10:47:09 26/02/2015 10:47:06 krbtgt/DIDIER.DNSDYNAMIC.NET@DIDIER.DNSDYNAMIC.NET
renew until 25/02/2015 10:47:09
On vérifie que l'utilisateur didier ne peut que changer son mot de passe (politique par défaut)
kadmin -p didier Authenticating as principal didier with password. Password for didier@DIDIER.DNSDYNAMIC.NET: kadmin: listprincs get_principals: Operation requires ``list'' privilege while retrieving list. kadmin: cpw didier Enter password for principal "didier@DIDIER.DNSDYNAMIC.NET": Re-enter password for principal "didier@DIDIER.DNSDYNAMIC.NET": Password for "didier@DIDIER.DNSDYNAMIC.NET" changed. kadmin: exit
Pour chaque hôte devant être géré par Kerberos
- on ajoute un principal avec un mot de passe aléatoire
- on l'exporte dans un keytab local (celui-ci sera copié dans un deuxième temps sur l'hôte concerné)
kadmin.local Authenticating as principal didier/admin@DIDIER.DNSDYNAMIC.NET with password. kadmin.local: ank -randkey host/test.didier.dnsdynamic.net@DIDIER.DNSDYNAMIC.NET WARNING: no policy specified for host/test.didier.dnsdynamic.net@DIDIER.DNSDYNAMIC.NET; defaulting to no policy Principal "host/test.didier.dnsdynamic.net@DIDIER.DNSDYNAMIC.NET" created. kadmin.local: ktadd -k /tmp/krb5.keytab host/test.didier.dnsdynamic.net Entry for principal host/test.didier.dnsdynamic.net with kvno 3, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/tmp/krb5.keytab. Entry for principal host/test.didier.dnsdynamic.net with kvno 3, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/tmp/krb5.keytab. Entry for principal host/test.didier.dnsdynamic.net with kvno 3, encryption type des3-cbc-sha1 added to keytab FILE:/tmp/krb5.keytab. Entry for principal host/test.didier.dnsdynamic.net with kvno 3, encryption type arcfour-hmac added to keytab FILE:/tmp/krb5.keytab. Entry for principal host/test.didier.dnsdynamic.net with kvno 3, encryption type camellia256-cts-cmac added to keytab FILE:/tmp/krb5.keytab. Entry for principal host/test.didier.dnsdynamic.net with kvno 3, encryption type camellia128-cts-cmac added to keytab FILE:/tmp/krb5.keytab. Entry for principal host/test.didier.dnsdynamic.net with kvno 3, encryption type des-hmac-sha1 added to keytab FILE:/tmp/krb5.keytab. Entry for principal host/test.didier.dnsdynamic.net with kvno 3, encryption type des-cbc-md5 added to keytab FILE:/tmp/krb5.keytab. kadmin.local: exit
On copie ensuite ce keytab local sur le client kerberos (serveur SSH, serveur web, etc...)
Installation sur les clients
On installe les outils kerberos
yum install krb5-workstation
On édite (ou on copie le fichier depuis le serveur) /etc/krb5.conf
On ajoute un utilisateur système didier
useradd -s /bin/bash -m didier passwd didier
On vérifie que l'utilisateur didier peut acquérir un jeton kerberos depuis ce client.
kinit didier
Connexion locale (pam)
yum install pam_krb5 authconfig --enablekrb5 --update
Client SSH
Avant de le fixer dans le fichier /etc/ssh/ssh_config, on teste
- On acquiert un jeton kerberos
kinit didier
- On se connecte par ssh en forçant l'option _GSSAPIAuthentication_
ssh didier@kerbtest2.didier.dnsdynamic.net -o "GSSAPIAuthentication yes"
- Si la connexion est un succès, on vérifie que le fichier /etc/ssh/ssh_config contient bien
GSSAPIAuthentication yes
A noter que seul l'utilisateur didier peut se connecter avec kerberos (aucun autre utilisateur n'est connu de kerberos)
Authentification Apache
Installation d'apache, du module ssl et du module d'authentification kerberos pour apache
yum install httpd mod_ssl mod_auth_kerb
Ouverture du firewall pour http et https
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https firewall-cmd --reload
- Exemple de configuration apache
<Directory /var/www/html/kerb>
SSLRequireSSL
AuthType Kerberos
AuthName "Kerberos Authntication"
KrbAuthRealms DIDIER.DNSDYNAMIC.NET
Krb5Keytab /etc/httpd/conf.d/krb5.keytab
KrbMethodNegotiate Off
KrbSaveCredentials Off
KrbVerifyKDC Off
Require valid-user
</Directory>
Fichier <path>/etc/httpd/conf.d/krb5.keytab</path>
HTTP/kerberos.didier.dnsdynamic.net@DIDIER.DNSDYNAMIC.NET
Récapitulatif des outils d'utilisation et d'administration
- kinit: Acquiert un nouveau jeton kerberos pour l'utilisateur passé en argument.
- kdestroy: Efface le jeton de l'utilisateur actif (le nom passé en argument à kinit)
- klist: Affiche la liste des jetons pour l'utilisateur actif
- kadmin: Commande d'administration de kerberos.