Multi-factor SSH authentication using YubiKey and SSH public keys

De Linux Server Wiki
Sauter à la navigation Sauter à la recherche


Dans tous les cas : Vérifier que l'auth par password est autorisé par ssh (PasswordAuthentication yes ou commenté dans /etc/ssh/sshd_config)

1 Authentification par clé privé + password|OTP

Cette configuration ce sera possible qu'a partir de openssh 6.2 (Debian/Jessie et Debian/wheezy-backports). Pour installer le paquet en question : aptitude -t wheezy-backports install openssh-server

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

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)

Générez un identifiant client et une clé secrète sur https://upgrade.yubico.com/getapikey/

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

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

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 simplement pour un utilisateur en désactivant son mot-de-passe unix (passwd -d <user>).

Notez que vous pouvez spécifier la directive AuthenticationMethods dans une directive Match

2 Authentification par clé privé + OTP (pas de password)

Cette configuration ce sera possible qu'a partir de openssh 6.2 (Debian/Jessie et Debian/wheezy-backports). Pour installer le paquet en question : aptitude -t wheezy-backports install openssh-server

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

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)

Générez un identifiant client et une clé secrète sur https://upgrade.yubico.com/getapikey/

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 Votre configuration devrait ressembler à ceci ;

auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings
#@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

Les utilisateurs seront désormais obligé de s'authentifier par une clé privée ET un OTP yubikey.

Notez que vous pouvez spécifier la directive AuthenticationMethods dans une directive Match

3 Authentification par password + OTP

aptitude install yubico-pam 

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/

Editez le fichier /etc/pam.d/sshd et ajoutez la ligne suivante avant @include common-account (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      requisite pam_yubico.so id=90736 key="AgIrWevHerogikhoapHaiWeykWy"  authfile=/etc/yubikey_mappings debug
auth [success=1 default=ignore]    pam_unix.so use_first_pass nullok_secure
auth requisite           pam_deny.so
auth required            pam_permit.so

Dans /etc/pam.d/sshd commentez la ligne @include common-auth

Empêchez other de lire la clé yubico :

chmod o-r /etc/pam.d/sshd

Pour vous loguer, il faudra entrer votre mot-de-passe unix suivi de l'OTP yubikey.

4 auth par yubikey seule

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

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)

Générez un identifiant client et une clé secrète sur https://upgrade.yubico.com/getapikey/

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 :

auth required pam_yubico.so id=XXXX key="YYYYYYYY" authfile=/etc/yubikey_mappings
#@include common-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 ou commenté dans /etc/ssh/sshd_config)