« Authentification SSH multi-facteur avec OATH (OTP / HOTP) et clés publiques SSH » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications |
||
(11 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 1 : | Ligne 1 : | ||
[[Category:serveur]] | |||
[[Category:debian]] | |||
[[Category:security]] | |||
<pre> | <pre> | ||
apt install libpam-oath oathtool | apt install libpam-oath oathtool | ||
Ligne 5 : | Ligne 9 : | ||
Générez un secret hexadécimal | Générez un secret hexadécimal | ||
<pre> | <pre> | ||
$ head -10 /dev/urandom | sha512sum | cut -b 1- | $ head -10 /dev/urandom | sha512sum | cut -b 1-50 | ||
234197a7d5ef5c16 | 234197a7d5ef5c16 | ||
</pre> | </pre> | ||
Ligne 21 : | Ligne 25 : | ||
</pre> | </pre> | ||
Pour activer l'authentification oath pour ssh, ajoutez cette ligne au début du fichier <code>/etc/pam.d/sshd</code> : | Pour activer l'authentification oath pour ssh, ajoutez cette ligne au début du fichier <code>/etc/pam.d/sshd</code> : | ||
<pre>auth required pam_oath.so usersfile=/etc/users.oath window=30 digits=6</pre> | <pre>auth required pam_oath.so usersfile=/etc/users.oath window=30 digits=6</pre> | ||
Ligne 39 : | Ligne 42 : | ||
</pre> | </pre> | ||
Notez qu'on passe <code>PermitRootLogin yes</code> (par défaut c'est <code>without-password</code>). Si vous ne vous loguerez pas directement en root, passez <code>PermitRootLogin no</code>. | Notez qu'on passe <code>PermitRootLogin yes</code> (par défaut c'est <code>without-password</code>). Si vous ne vous loguerez pas directement en root, passez <code>PermitRootLogin no</code>. | ||
Pour utiliser une application TOTP, il faut convertire notre secret hexadecimal en base32 : | |||
<pre> | |||
$ oathtool -v --totp -d6 234197a7d5ef5c16 | |||
Hex secret: 234197a7d5ef5c16 | |||
Base32 secret: ENAZPJ6V55OBM=== | |||
Digits: 6 | |||
Window size: 0 | |||
Step size (seconds): 30 | |||
Start time: 1970-01-01 00:00:00 UTC (0) | |||
Current time: 2021-06-05 13:59:52 UTC (1622901592) | |||
Counter: 0x339734F (54096719) | |||
384979 | |||
</pre> | |||
Vous pouvez ensuite générer un QRcode avec qrencode, en veillant bien à passer le secret par le <code>Base32 secret</code> récupéré avec la commande précédente : | |||
<pre> | |||
qrencode -t UTF8 'otpauth://totp/user@server?secret=ENAZPJ6V55OBM===&issuer=OpenSSH&algorithm=SHA1&digits=6&period=30' | |||
</pre> | |||
Depuis une machine extérieure : | |||
<pre> | |||
$ ssh user@server | |||
One-time password (OATH) for `user': | |||
</pre> |
Dernière version du 5 juin 2021 à 21:05
apt install libpam-oath oathtool
Générez un secret hexadécimal
$ head -10 /dev/urandom | sha512sum | cut -b 1-50 234197a7d5ef5c16
/etc/users.oath :
# Option User Prefix Seed HOTP/T30/6 user - 234197a7d5ef5c16
Sécurisez l'accès aux clés secrètes :
chmod 600 /etc/users.oath chown root:root /etc/users.oath
Pour activer l'authentification oath pour ssh, ajoutez cette ligne au début du fichier /etc/pam.d/sshd
:
auth required pam_oath.so usersfile=/etc/users.oath window=30 digits=6
Puis désactivez l'authentification par password unix en commentant la ligne @include common-auth
:
#@include common-auth
Note : si vous ne commentez pas cette ligne, vous devrez entrer, en plus de l'OTP, le password unix pour vous loguer
Modifiez la configuration du serveur openssh :
ChallengeResponseAuthentication yes UsePAM yes PermitRootLogin yes AuthenticationMethods publickey,keyboard-interactive PasswordAuthentication no
Notez qu'on passe PermitRootLogin yes
(par défaut c'est without-password
). Si vous ne vous loguerez pas directement en root, passez PermitRootLogin no
.
Pour utiliser une application TOTP, il faut convertire notre secret hexadecimal en base32 :
$ oathtool -v --totp -d6 234197a7d5ef5c16 Hex secret: 234197a7d5ef5c16 Base32 secret: ENAZPJ6V55OBM=== Digits: 6 Window size: 0 Step size (seconds): 30 Start time: 1970-01-01 00:00:00 UTC (0) Current time: 2021-06-05 13:59:52 UTC (1622901592) Counter: 0x339734F (54096719) 384979
Vous pouvez ensuite générer un QRcode avec qrencode, en veillant bien à passer le secret par le Base32 secret
récupéré avec la commande précédente :
qrencode -t UTF8 'otpauth://totp/user@server?secret=ENAZPJ6V55OBM===&issuer=OpenSSH&algorithm=SHA1&digits=6&period=30'
Depuis une machine extérieure :
$ ssh user@server One-time password (OATH) for `user':