tuto:fusiondirectory:cles_ssh

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
tuto:fusiondirectory:cles_ssh [03/09/2013 08:40]
dani
tuto:fusiondirectory:cles_ssh [12/08/2014 16:32] (Version actuelle)
dani
Ligne 3: Ligne 3:
 Fusion Directory permet de gérer simplement les clés publiques SSH pour chaque utilisateur. Vos différents serveurs UNIX peuvent ensuite être configuré pour récupérer de façon dynamique ces clés, au lieu de regarder dans le fichier ~/.ssh/authorized_keys. Fusion Directory permet de gérer simplement les clés publiques SSH pour chaque utilisateur. Vos différents serveurs UNIX peuvent ensuite être configuré pour récupérer de façon dynamique ces clés, au lieu de regarder dans le fichier ~/.ssh/authorized_keys.
  
-L'avantage avec LDAP, c'est que le déploiement et la révocation sur un grand nombre de machine est instantanée.+L'avantage avec LDAP, c'est que le déploiement et la révocation sur un grand nombre de machine sont instantanés.
  
 ===== Plugins nécessaires ===== ===== Plugins nécessaires =====
Ligne 76: Ligne 76:
 [...] [...]
 </code> </code>
 +
 +===== Cache hors ligne =====
 +Récupérer les clés SSH depuis l'annuaire LDAP, c'est très pratique, sauf le jour ou le serveur LDAP n'est plus joignable. On peut bien sûr répliquer l'annuaire, mais on peut aussi utiliser un cache local des clés, bien plus simple à mettre en oeuvre.
 +
 +<code bash>
 +mkdir /var/cache/ssh-ldap
 +chow ldapsshkey:ldapsshkey /var/cachez/ssh-ldap
 +chmod 700 /var/cache/ssh-ldap
 +cat <<'_EOF' > /usr/local/bin/ssh-getkeys
 +#!/bin/bash
 +
 +# Cache expirey
 +CACHE=300
 +
 +FILE=$(mktemp)
 +
 +# Check if cache is fresh
 +if [ -s "/var/cache/ssh-ldap/$1" ]; then
 +  DIFF=$(($(date +%s)-$(date -r "/var/cache/ssh-ldap/$1" +%s)))
 +  if [ $DIFF -lt $CACHE ]; then
 +    cat "/var/cache/ssh-ldap/$1"
 +    exit 0
 +  fi
 +fi
 +
 +# Retrieve SSH Keys from LDAP and store them in a temp file
 +/usr/libexec/openssh/ssh-ldap-helper -s "$1" > $FILE
 +# Did the connection to LDAP succeed ? If no, and we have previous keys in the cache, use it
 +if [ $? == 255 -a -s "/var/cache/ssh-ldap/$1" ]; then
 +  cat "/var/cache/ssh-ldap/$1"
 +# If the connection succeed, print the key on stdout and update the cache
 +else
 +  cat $FILE | tee "/var/cache/ssh-ldap/$1"
 +  # Just in case it was run as root
 +  chown ldapsshkey:ldapsshkey "/var/cache/ssh-ldap/$1"
 +  chmod 600 "/var/cache/ssh-ldap/$1"
 +fi
 +# Now, delete the temp file
 +rm -f $FILE
 +_EOF
 +chmod +x /usr/local/bin/ssh-getkeys
 +</code>
 +
 +Et voilà, on peut maintenant éditer /etc/ssh/sshd_config pour remplacer **/usr/libexec/openssh/ssh-ldap-wrapper** par **/usr/local/bin/ssh-getkeys**. Ce petit script tout simple permet de conserver en cache les dernières clés récupérées de l'annuaire LDAP (les clés sont stockées dans /var/cache/ssh-ldap/<login>). Pour limiter le nombres de requêtes sur l'annuaires, si les clés ont été lues depuis le cache il y a moins de 5 minutes, on récupère seulement le cache (durée ajustable en modifiant la valeur de la variable CACHE).
 +
 +<note important>SSSD permet aussi de lire les clées SSH depuis l'annuaire LDAP, avec la commande sss_ssh_authorized_keys et il fournti nativement un cache local. Le problème avec SSSD, c'est que tous les utilisateurs peuvent requêter les clés publiques des autres utilisateurs. Si le contenu de la clé elle même ne pose pas vraiment de problème (après tout, il s'agit de clés publiques), les clés conteinnent également d'autres informations (d'éventuelles options au début, et un commentaire qui peut révéler le login local et le nom de la machine cliente à la fin) qui ne doivent pas forcément devenir publiques</note>
  • tuto/fusiondirectory/cles_ssh.1378190445.txt.gz
  • Dernière modification: 03/09/2013 08:40
  • de dani