SSH: Root en RSA
Un article de Projet de documentation fug-fr .
Sommaire |
[modifier] Contexte
Il est parfois utile de pouvoir se connecter à une autre machine directement en tant que root sans pour autant saisir le mot de passe, notamment pour des batchs qui doivent effectuer des tâches automatiquement ou transférer des fichiers via scp. Pour autant, il n'est pas très sécurisant d'autoriser root à se connecter directement par mot de passe. Voici donc un exemple de configuration qui permet la connexion en tant que root via RSA et uniquement par ce moyen. Un autre utilité de ce système est de pouvoir se connecter à différentes machine sans pour autant retenir les mots de passe root pour chaque machine s'il sont différent à chaque fois.
[modifier] La paire de clé RSA
[modifier] Génération de la paire de clé
Sur le système client : (celui qui va se connecter en tant que root sur votre serveur) Vérifiez la présence de la paire de clé RSA, ce sont les fichiers :
- id_rsa (Clé privée)
- id_rsa.pub (Clé publique)
qui se situe par défaut dans /root/.ssh
Si ces fichiers sont présents, vous pouvez passer à l'étape suivante, sinon exécutez la commande suivante pour générer ces fichiers :
# ssh-keygen -t rsa
Normalement il vous propose le chemin par défaut /root/.ssh/id_rsa, faites tout simplement [entrée] pour accepter le chemin par défaut. Ensuite ssh-keygen vous demande une passphrase, faites simplement [entrée] pour ne pas utiliser de passphrase Vous voilà donc l'heureux propriétaire d'une paire de clé RSA.
[modifier] Transfert de la clé PUBLIQUE
Copiez la clé PUBLIC (id_rsa.pub) sur votre système serveur. Personnellement, j'utilise scp:
# scp /root/.ssh/id_rsa.pub distant:~marcel/temp_keys
Nota :
- marcel est mon utilisateur non-privilégié que j'utilise jusqu'à présent pour me connecter sur mon serveur
- je transforme le fichier id_rsa.pub en temp_keys afin d'éviter d'écraser un éventuel id_rsa.pub présent dans le répertoire de mon utilisateur marcel (ce qui ne devrais pas mais on ne sait jamais)
[modifier] Configuration de SSHD sur le serveur distant
Connectez-vous en tant que root sur le serveur par votre méthode habituelle (Bas oui la nouvelle est pas encore en place ;) )
[modifier] Mise en place de la clé publique
Si l'étape précédente a bien été réussi, vous devriez avoir un fichier temp_keys dans le répertoire home de votre utilisateur marcel, nous allons donc DEPLACER cette clé qui n'a rien à faire chez marcel.
Si vous n'avez pas de fichier .ssh/authorized_keys ou s'il est obsolète :
# mv ~marcel/temp_keys ~/.ssh/authorized_keys
ou sinon :
# cat ~marcel/temp_keys >> ~/.ssh/authorized_keys # rm ~marcel/temp_keys
Vérifiez bien que le fichier authorized_keys à ces droits : -rw------- root wheel
[modifier] Modification de sshd_config
Le fichier de configuration de sshd se trouve par défaut là : /etc/ssh/sshd_config
Éditez le, trouvez la ligne :
#PermitRootLogin no
et remplacez là par :
PermitRootLogin without-password
Sauvegarder votre modification et mettez la en service en redémarrant sshd :
# /etc/rc.d/sshd restart
[modifier] Test
Si tout ce passe bien en faisant (sous root) depuis le client :
#ssh monserveur
vous devriez obtenir le login sur la machine distante sans avoir à taper le mot de passe
Sous un autre utilisateur : genre marcel
$ssh root@monserveur
Le système doit attendre le mot de passe et NE DOIT PAS vous donner le prompt en tapant le bon mot de passe pour root.
[modifier] Quoi faire si l'accès root est donné par mot de passe
Ce phénomène se produit si votre version de OpenSSH est "assez ancienne" ainsi une version 3.8.1p1 présente ce défaut (à vérifier quelle version ne le fait plus), cette version de OpenSSH est utilisé par FreeBSD 5.4.
Un contournement possible est l'utilisation de pam_per_user : Installation depuis les ports :
# cd /usr/ports/security/pam_per_user # make install clean
après l'installation, créer un fichier /etc/pam_per_user.map contenant :
* : @SUCCEED root : @FAIL
ajouter dans le fichier de configuration de PAM pour sshd /etc/pam.d/sshd :
auth requisite /usr/local/lib/security/pam_per_user.so.1
Vous pouvez désormais vérifier que root peut se connecter par RSA mais pas par mot de passe.
Nota : cette configuration génère quelque message PAM dans les log au login
pam_per_user: create_subrequest_handle(): doing map lookup for user "xxxx"
--Lenine 11 juin 2007 à 16:48 (CEST)

