« Authentification SSH multi-facteur avec YubiKey et clés publique SSH » : différence entre les versions
Aucun résumé des modifications |
m (Pfoo a déplacé la page Multi-factor SSH authentication using YubiKey and SSH public keys vers Authentification SSH multi-facteur avec YubiKey et clés publique SSH) |
||
(51 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:serveur]] | |||
[[Category:debian]] | |||
[[Category:security]] | |||
=Configuration globale= | |||
Installez le paquet libpam-yubico qui ajoute le support des yubikey dans PAM : | |||
<pre>aptitude install libpam-yubico</pre> | <pre>aptitude install libpam-yubico</pre> | ||
Ligne 14 : | Ligne 16 : | ||
Générez un identifiant client et une clé secrète sur https://upgrade.yubico.com/getapikey/ | Générez un identifiant client et une clé secrète sur https://upgrade.yubico.com/getapikey/ | ||
<br><br> | |||
Dans tous les cas : Vérifier que l'authentification par mot-de-passe est autorisé au niveau de la configuration du serveur OpenSSH (<code>PasswordAuthentication yes</code> dans <code>/etc/ssh/sshd_config</code>)7 | |||
Attention, si vous souhaitez utiliser la yubikey pour vous loguer en root, pensez à ne PAS désactiver le login root par password dans <code>/etc/ssh/sshd_config</code> (<code>PermitRootLogin yes</code>) | |||
Editez le fichier <code>/etc/pam.d/sshd</code> et ajoutez la ligne suivante avant <code>@include common- | =Authentification par clé privé+password OU clé privé+OTP (méthode 1)= | ||
Cette configuration ne sera possible qu'a partir de OpenSSH 6.2 (pour Debian, à partir de Debian/Jessie et Debian/Wheezy-backports). | |||
Editez le fichier <code>/etc/pam.d/sshd</code> et ajoutez la ligne suivante avant <code>@include common-auth</code> (remplacez XXXX par le <code>Client ID</code> que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la <code>Secret key</code>) : | |||
<pre> | |||
auth sufficient pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | |||
</pre> | |||
Le début de votre fichier <code>/etc/pam.d/sshd</code> devrait ressembler à ceci : | |||
<pre> | <pre> | ||
# PAM configuration for the Secure Shell service | |||
# Yubikey auth | |||
auth sufficient pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | auth sufficient pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | ||
# Standard Un*x authentication. | |||
@include common-auth | |||
</pre> | </pre> | ||
Pour des raisons de sécurité, empêchez other de lire la clé yubico : | |||
<pre>chmod o-r /etc/pam.d/sshd</pre> | |||
Ajoutez la ligne suivante dans <code>/etc/ssh/sshd_config</code> : | Ajoutez la ligne suivante dans <code>/etc/ssh/sshd_config</code> : | ||
Ligne 25 : | Ligne 48 : | ||
</pre> | </pre> | ||
Et relancez le serveur OpenSSH : | |||
<pre>/etc/init.d/ssh restart</pre> | |||
Notez que vous pouvez spécifier la directive <code>AuthenticationMethods</code> dans une directive <code>Match</code> | Les utilisateurs seront désormais obligé de s'authentifier par une '''clé privée ET un mot de passe'''. | ||
Ce mot de passe dépend de votre configuration PAM. Si vous avec juste suivi cette documentation, les utilisateurs pourront se loguer soit avec leur (clé privé + mot de passe unix), soit avec leur (clé privé + OTP yubikey). | |||
Vous pouvez désactiver le login par mot de passe pour un utilisateur spécifique en désactivant son mot-de-passe unix (<code>passwd -dl <user></code>). | |||
Notez également que vous pouvez spécifier la directive <code>AuthenticationMethods</code> dans une directive <code>Match</code> pour modifier les méthodes d'authentification par utilisateur ou même par groupe. | |||
=Authentification par clé privé+password OU clé privé+OTP (méthode 2)= | |||
Cette configuration ne sera possible qu'a partir de OpenSSH 6.2 (pour Debian, à partir de Debian/Jessie et Debian/Wheezy-backports). | |||
Editez le fichier <code>/etc/pam.d/sshd</code> et ajoutez la ligne suivante avant <code>@include common-auth</code> (remplacez XXXX par le <code>Client ID</code> que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la <code>Secret key</code>) : | |||
<pre> | |||
auth sufficient pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | |||
</pre> | |||
Le début de votre fichier <code>/etc/pam.d/sshd</code> devrait ressembler à ceci : | |||
<pre> | |||
# PAM configuration for the Secure Shell service | |||
# Yubikey auth | |||
auth sufficient pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | |||
# Standard Un*x authentication. | |||
@include common-auth | |||
</pre> | |||
Pour des raisons de sécurité, empêchez other de lire la clé yubico : | |||
<pre>chmod o-r /etc/pam.d/sshd</pre> | |||
Ajoutez la ligne suivante dans <code>/etc/ssh/sshd_config</code> : | |||
<pre> | |||
ChallengeResponseAuthentication yes | |||
AuthenticationMethods publickey,keyboard-interactive | |||
</pre> | |||
Et relancez le serveur OpenSSH : | |||
<pre>/etc/init.d/ssh restart</pre> | |||
Les utilisateurs seront désormais obligé de s'authentifier par une '''clé privée ET un mot de passe'''. | |||
Ce mot de passe dépend de votre configuration PAM. Si vous avec juste suivi cette documentation, les utilisateurs pourront se loguer soit avec leur (clé privé + mot de passe unix), soit avec leur (clé privé + OTP yubikey). | |||
Vous pouvez désactiver le login par mot de passe pour un utilisateur spécifique en désactivant son mot-de-passe unix (<code>passwd -dl <user></code>). | |||
Voici comment cela va se présenter lors d'une tentative de connexion : | |||
<pre> | |||
pfoo@laptop:~$ ssh pfoo@domain.tld | |||
Enter passphrase for key '/home/pfoo/.ssh/id_ed25519': | |||
YubiKey for `pfoo': | |||
</pre> | |||
Pour vous connecter avec le mot-de-passe, tapez "enter" au prompt <code>YubiKey</code> pour le passer, puis vous sera présenté un champ <code>Password</code> | |||
=Authentification par clé privé + OTP (pas de password)= | |||
Cette configuration ne sera possible qu'a partir de OpenSSH 6.2 (pour Debian, à partir de Debian/Jessie et Debian/Wheezy-backports). | |||
Editez le fichier <code>/etc/pam.d/sshd</code> et ajoutez la ligne suivante avant <code>@include common-auth</code> (remplacez XXXX par le <code>Client ID</code> que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la <code>Secret key</code>) : | |||
<pre> | |||
auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | |||
</pre> | |||
Commentez ensuite la ligne <code>@include common-auth</code> | |||
Le début de votre fichier <code>/etc/pam.d/sshd</code> devrait ressembler à ceci : | |||
<pre> | |||
# PAM configuration for the Secure Shell service | |||
# Yubikey auth | |||
auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | |||
# Standard Un*x authentication. | |||
#@include common-auth | |||
</pre> | |||
Empêchez other de lire la clé yubico : | |||
<pre>chmod o-r /etc/pam.d/sshd</pre> | |||
Ajoutez la ligne suivante dans <code>/etc/ssh/sshd_config</code> : | |||
<pre> | |||
AuthenticationMethods publickey,password | |||
</pre> | |||
Et relancez le serveur OpenSSH : | |||
<pre> | |||
/etc/init.d/ssh restart | |||
</pre> | |||
Les utilisateurs seront désormais obligé de s'authentifier par une clé privée ET un OTP yubikey. | |||
Notez également que vous pouvez spécifier la directive <code>AuthenticationMethods</code> dans une directive <code>Match</code> pour modifier les méthodes d'authentification par utilisateur ou même par groupe. | |||
=Authentification par password + OTP= | =Authentification par password + OTP= | ||
<pre> | Editez le fichier <code>/etc/pam.d/sshd</code> et ajoutez la ligne suivante avant <code>@include common-auth</code> (remplacez XXXX par le <code>Client ID</code> que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la <code>Secret key</code>) : | ||
<pre> | |||
auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | |||
</pre> | |||
Commentez ensuite la ligne <code>@include common-auth</code> et ajoutez 3 lignes suivantes. Votre configuration devrait ressembler à ça : | |||
<pre> | <pre> | ||
# PAM configuration for the Secure Shell service | |||
# Yubikey auth | |||
auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | |||
# Standard Un*x authentication. | |||
#@include common-auth | |||
# Standard Un*x authentication+yubikey OTP | |||
auth [success=1 default=ignore] pam_unix.so try_first_pass nullok_secure | |||
auth requisite pam_deny.so | |||
auth required pam_permit.so | |||
</pre> | </pre> | ||
Empêchez other de lire la clé yubico : | |||
<pre>chmod o-r /etc/pam.d/sshd</pre> | |||
Vérifier aussi que l'auth par password est autorisé par ssh (<code>PasswordAuthentication yes</code> dans <code>/etc/ssh/sshd_config</code>) | |||
Pour vous connecter, tapez le mot-de-passe ('''sans valider''') puis entrez l'OTP yubikey. | |||
=Authentification par yubikey seule= | |||
Editez le fichier <code>/etc/pam.d/sshd</code> et ajoutez la ligne suivante avant <code>@include common-auth</code> (remplacez XXXX par le <code>Client ID</code> que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la <code>Secret key</code>) : | |||
<pre> | |||
auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | |||
</pre> | |||
Commentez ensuite la ligne <code>@include common-auth</code> et ajoutez la ligne <code>auth [success=1 default=ignore] pam_unix.so try_first_pass nullok_secure</code> a la place. Votre configuration devrait ressembler à ça : | |||
<pre> | <pre> | ||
auth | # PAM configuration for the Secure Shell service | ||
auth [success=1 default=ignore] | |||
# Yubikey auth | |||
auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings | |||
# Standard Un*x authentication. | |||
#@include common-auth | |||
# Yubikey auth | |||
auth [success=1 default=ignore] pam_unix.so try_first_pass nullok_secure | |||
</pre> | </pre> | ||
Empêchez other de lire la clé yubico : | |||
<pre>chmod o-r /etc/pam.d/sshd</pre> | |||
Vérifier aussi que l'auth par password est autorisé par ssh (<code>PasswordAuthentication yes</code> dans <code>/etc/ssh/sshd_config</code>) |
Dernière version du 10 octobre 2020 à 13:49
Configuration globale
Installez le paquet libpam-yubico qui ajoute le support des yubikey dans PAM :
aptitude install libpam-yubico
Créez le fichier /etc/yubikey_mappings
qui va contenir l'association entre chaque utilisateur et le token ID yubikey (c'est les 12 premiers caractères issus d'un OTP d'une yubikey). Vous pouvez en spécifier plusieurs en les séparant par :
cat > /etc/yubikey_mappings <<EOF pfoo:cccccatsdogs:ccccdogscats EOF
Générez un identifiant client et une clé secrète sur https://upgrade.yubico.com/getapikey/
Dans tous les cas : Vérifier que l'authentification par mot-de-passe est autorisé au niveau de la configuration du serveur OpenSSH (PasswordAuthentication yes
dans /etc/ssh/sshd_config
)7
Attention, si vous souhaitez utiliser la yubikey pour vous loguer en root, pensez à ne PAS désactiver le login root par password dans /etc/ssh/sshd_config
(PermitRootLogin yes
)
Authentification par clé privé+password OU clé privé+OTP (méthode 1)
Cette configuration ne sera possible qu'a partir de OpenSSH 6.2 (pour Debian, à partir de Debian/Jessie et Debian/Wheezy-backports).
Editez le fichier /etc/pam.d/sshd
et ajoutez la ligne suivante avant @include common-auth
(remplacez XXXX par le Client ID
que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la Secret key
) :
auth sufficient pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings
Le début de votre fichier /etc/pam.d/sshd
devrait ressembler à ceci :
# PAM configuration for the Secure Shell service # Yubikey auth auth sufficient pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings # Standard Un*x authentication. @include common-auth
Pour des raisons de sécurité, empêchez other de lire la clé yubico :
chmod o-r /etc/pam.d/sshd
Ajoutez la ligne suivante dans /etc/ssh/sshd_config
:
AuthenticationMethods publickey,password
Et relancez le serveur OpenSSH :
/etc/init.d/ssh restart
Les utilisateurs seront désormais obligé de s'authentifier par une clé privée ET un mot de passe.
Ce mot de passe dépend de votre configuration PAM. Si vous avec juste suivi cette documentation, les utilisateurs pourront se loguer soit avec leur (clé privé + mot de passe unix), soit avec leur (clé privé + OTP yubikey).
Vous pouvez désactiver le login par mot de passe pour un utilisateur spécifique en désactivant son mot-de-passe unix (passwd -dl <user>
).
Notez également que vous pouvez spécifier la directive AuthenticationMethods
dans une directive Match
pour modifier les méthodes d'authentification par utilisateur ou même par groupe.
Authentification par clé privé+password OU clé privé+OTP (méthode 2)
Cette configuration ne sera possible qu'a partir de OpenSSH 6.2 (pour Debian, à partir de Debian/Jessie et Debian/Wheezy-backports).
Editez le fichier /etc/pam.d/sshd
et ajoutez la ligne suivante avant @include common-auth
(remplacez XXXX par le Client ID
que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la Secret key
) :
auth sufficient pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings
Le début de votre fichier /etc/pam.d/sshd
devrait ressembler à ceci :
# PAM configuration for the Secure Shell service # Yubikey auth auth sufficient pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings # Standard Un*x authentication. @include common-auth
Pour des raisons de sécurité, empêchez other de lire la clé yubico :
chmod o-r /etc/pam.d/sshd
Ajoutez la ligne suivante dans /etc/ssh/sshd_config
:
ChallengeResponseAuthentication yes AuthenticationMethods publickey,keyboard-interactive
Et relancez le serveur OpenSSH :
/etc/init.d/ssh restart
Les utilisateurs seront désormais obligé de s'authentifier par une clé privée ET un mot de passe.
Ce mot de passe dépend de votre configuration PAM. Si vous avec juste suivi cette documentation, les utilisateurs pourront se loguer soit avec leur (clé privé + mot de passe unix), soit avec leur (clé privé + OTP yubikey).
Vous pouvez désactiver le login par mot de passe pour un utilisateur spécifique en désactivant son mot-de-passe unix (passwd -dl <user>
).
Voici comment cela va se présenter lors d'une tentative de connexion :
pfoo@laptop:~$ ssh pfoo@domain.tld Enter passphrase for key '/home/pfoo/.ssh/id_ed25519': YubiKey for `pfoo':
Pour vous connecter avec le mot-de-passe, tapez "enter" au prompt YubiKey
pour le passer, puis vous sera présenté un champ Password
Authentification par clé privé + OTP (pas de password)
Cette configuration ne sera possible qu'a partir de OpenSSH 6.2 (pour Debian, à partir de Debian/Jessie et Debian/Wheezy-backports).
Editez le fichier /etc/pam.d/sshd
et ajoutez la ligne suivante avant @include common-auth
(remplacez XXXX par le Client ID
que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la Secret key
) :
auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings
Commentez ensuite la ligne @include common-auth
Le début de votre fichier /etc/pam.d/sshd
devrait ressembler à ceci :
# PAM configuration for the Secure Shell service # Yubikey auth auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings # Standard Un*x authentication. #@include common-auth
Empêchez other de lire la clé yubico :
chmod o-r /etc/pam.d/sshd
Ajoutez la ligne suivante dans /etc/ssh/sshd_config
:
AuthenticationMethods publickey,password
Et relancez le serveur OpenSSH :
/etc/init.d/ssh restart
Les utilisateurs seront désormais obligé de s'authentifier par une clé privée ET un OTP yubikey.
Notez également que vous pouvez spécifier la directive AuthenticationMethods
dans une directive Match
pour modifier les méthodes d'authentification par utilisateur ou même par groupe.
Authentification par password + OTP
Editez le fichier /etc/pam.d/sshd
et ajoutez la ligne suivante avant @include common-auth
(remplacez XXXX par le Client ID
que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la Secret key
) :
auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings
Commentez ensuite la ligne @include common-auth
et ajoutez 3 lignes suivantes. Votre configuration devrait ressembler à ça :
# PAM configuration for the Secure Shell service # Yubikey auth auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings # Standard Un*x authentication. #@include common-auth # Standard Un*x authentication+yubikey OTP auth [success=1 default=ignore] pam_unix.so try_first_pass nullok_secure auth requisite pam_deny.so auth required pam_permit.so
Empêchez other de lire la clé yubico :
chmod o-r /etc/pam.d/sshd
Vérifier aussi que l'auth par password est autorisé par ssh (PasswordAuthentication yes
dans /etc/ssh/sshd_config
)
Pour vous connecter, tapez le mot-de-passe (sans valider) puis entrez l'OTP yubikey.
Authentification par yubikey seule
Editez le fichier /etc/pam.d/sshd
et ajoutez la ligne suivante avant @include common-auth
(remplacez XXXX par le Client ID
que vous venez de générer chez yubico ; de même pour YYYYYYYY avec la Secret key
) :
auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings
Commentez ensuite la ligne @include common-auth
et ajoutez la ligne auth [success=1 default=ignore] pam_unix.so try_first_pass nullok_secure
a la place. Votre configuration devrait ressembler à ça :
# PAM configuration for the Secure Shell service # Yubikey auth auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings # Standard Un*x authentication. #@include common-auth # Yubikey auth auth [success=1 default=ignore] pam_unix.so try_first_pass nullok_secure
Empêchez other de lire la clé yubico :
chmod o-r /etc/pam.d/sshd
Vérifier aussi que l'auth par password est autorisé par ssh (PasswordAuthentication yes
dans /etc/ssh/sshd_config
)