
Les mots de passe simples ne protègent pas, et les mots de passe complexes sont difficiles à retenir. C'est pourquoi ils se retrouvent souvent sur un post-it sous le clavier ou sur le moniteur. Pour que les mots de passe restent en mémoire des utilisateurs "oubliants" sans compromettre la sécurité, il existe l'authentification à deux facteurs (2FA).
Grâce à la combinaison d'un facteur de possession de l'appareil et de la connaissance de son code PIN, le code PIN lui-même peut être plus simple et plus facile à mémoriser. Les défauts de longueur ou d'aléatoire du code PIN sont compensés par l'exigence de possession physique et par des restrictions sur les essais de code PIN.
De plus, dans les administrations publiques, il arrive que l'on souhaite que tout soit conforme aux normes. C'est de ce type de 2FA pour entrer dans Linux dont il sera question. Je vais commencer par le commencement.
Modules PAM
Les modules d'authentification à modules interchangeables (Pluggable Authentication Modules, PAM) sont des modules avec une API standard et des implémentations de divers mécanismes d'authentification dans les applications.
Tous les utilitaires et applications capables de travailler avec PAM les récupèrent et peuvent les utiliser pour l'authentification des utilisateurs.
En pratique, cela fonctionne à peu près comme suit : la commande login appelle PAM, qui effectue toutes les vérifications nécessaires à l'aide des modules spécifiés dans le fichier de configuration et retourne le résultat à la commande login.
librtpam
Le module développé par la société « Activ » ajoute une authentification à deux facteurs pour les utilisateurs par cartes intelligentes ou tokens USB à l'aide de clés asymétriques selon les derniers standards de cryptographie nationale.
Examinons son principe de fonctionnement :
- le token contient le certificat de l'utilisateur et sa clé privée ;
- le certificat est enregistré dans le répertoire personnel de l'utilisateur comme étant de confiance.
Le processus d'authentification se déroule comme suit :
- Sur le RUTOKEN, la recherche du certificat personnel de l'utilisateur est effectuée.
- Le code PIN du token est demandé.
- La signature des données aléatoires avec la clé privée est effectuée directement dans la puce du RUTOKEN.
- La signature obtenue est vérifiée à l'aide de la clé publique du certificat de l'utilisateur.
- Le module retourne le résultat de la vérification de la signature à l'application qui l'a appelée.
Il est possible de s'authentifier à l'aide des clés GOST R 34.10-2012 (de longueurs 256 ou 512 bits) ou de l'obsolète GOST R 34.10-2001.
Vous n'avez pas à vous inquiéter pour la sécurité des clés – elles sont générées directement dans le Rutoken et ne quittent jamais sa mémoire pendant les opérations cryptographiques.

Le Rutoken ECP 2.0 est certifié par le FSB et le FSTEC selon le NVD 4, il peut donc être utilisé dans des systèmes d'information traitant des informations confidentielles.
Utilisation pratique
Pratiquement n'importe quelle version moderne de Linux convient ; pour cet exemple, nous utiliserons xUbuntu 18.10.
1) Installer les paquets nécessaires
sudo apt-get install libccid pcscd opensc
Si vous souhaitez ajouter un verrouillage de l'écran avec un économiseur d'écran, installez également le paquet libpam-pkcs11.
2) Ajouter le module PAM avec le support des GOST
Téléchargez la bibliothèque avec
Copiez le contenu du dossier PAM librtpam.so.1.0.0 dans le dossier système
/usr/lib/ ou /usr/lib/x86_64-linux-gnu/ou /usr/lib64
3) Installer le paquet avec librtpkcs11ecp.so
Téléchargez et installez le paquet DEB ou RPM à partir du lien :
4) Vérifiez que le Rutoken ECP 2.0 fonctionne dans le système
Dans le terminal, exécutez
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Si vous voyez la ligne Rutoken ECP cela signifie que tout va bien.
5) Lire le certificat
Vérifiez que le certificat est présent sur l'appareil
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Si après la ligne :
Using slot 0 with a present token (0x0)
- des informations sur les clés et certificats s'affichent, vous devez lire le certificat et l'enregistrer sur le disque. Pour cela, exécutez la commande suivante, en remplaçant {id} par l'ID du certificat que vous avez vu dans la sortie de la commande précédente :
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
Si le fichier cert.crt est créé, passez au point 6). - il n'y a rien, cela signifie que l'appareil est vide. Contactez l'administrateur ou créez les clés et le certificat vous-même en suivant le point suivant.
5.1) Créez un certificat de test
Attention ! Les méthodes décrites pour créer des clés et des certificats sont destinées à des tests et ne doivent pas être utilisées en mode opérationnel. Pour cela, il est nécessaire d'utiliser des clés et des certificats délivrés par un centre de certification de confiance de votre organisation ou un centre de certification accrédité.
Le module PAM est conçu pour protéger les ordinateurs locaux et est destiné à fonctionner dans de petites organisations. Étant donné le nombre limité d'utilisateurs, l'administrateur peut surveiller lui-même la révocation des certificats et bloquer manuellement les comptes, tout comme il peut gérer la durée de validité des certificats. Le module PAM ne sait pas encore vérifier les certificats via CRL ni établir des chaînes de confiance.
Une méthode simple (via le navigateur)
Pour obtenir un certificat de test, utilisez . Le processus ne prendra pas plus de 5 minutes.
La voie geek (via la console et, éventuellement, le compilateur)
Vérifiez la version d'OpenSC
$ opensc-tool --version
Si la version est inférieure à 0.20, mettez à jour ou compilez depuis notre GitHub (au moment de la publication de cet article, la version 0.20 n'avait pas encore été publiée) ou depuis la branche master du projet principal OpenSC au plus tard
Générer une paire de clés avec les paramètres :
--key-type: GOSTR3410-2012-512:A (GOST-2012 512 bits avec le paramètre A), GOSTR3410-2012-256:A (GOST-2012 256 bits avec le paramètre A)
--id : identifiant de l'objet (CKA_ID) sous forme de chiffres hexadécimaux à deux chiffres de la table ASCII. Utilisez uniquement les codes ASCII des caractères imprimables, car id devra être transmis à OpenSSL sous forme de chaîne. Par exemple, le code ASCII «3132» correspond à la chaîne «12». Pour plus de commodité, vous pouvez utiliser .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Nous allons ensuite créer le certificat. Voici deux façons de le faire : la première via une AC (nous allons utiliser des AC de test), la seconde – auto-signée. Pour cela, il faut d'abord installer et configurer OpenSSL version 1.1 ou supérieure pour travailler avec RUTOKEN via le module spécial rtengine à l'aide du guide .
Par exemple : pour ‘--id 3132’ dans OpenSSL, il faut indiquer «pkcs11:id=12«.
Vous pouvez utiliser les services d'une AC de test, nombreuses, par exemple, , et , pour cela, créons une demande de certificat
Une autre option est de céder à la paresse et de créer un certificat auto-signé
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Téléchargez le certificat sur le dispositif
$ openssl req -utf8 -x509 -engine keyform -key "pkcs11:id=12" -engine rtengine -out cert.cer
6) Enregistrez le certificat dans le système
Assurez-vous que votre certificat est au format base64 :

Si votre certificat apparaît ainsi :

vous devez convertir le certificat du format DER en format PEM (base64)
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Vérifions à nouveau que tout va bien maintenant.
Ajoutez le certificat à la liste des certificats de confiance
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates
La dernière ligne protège la liste des certificats de confiance contre les modifications accidentelles ou intentionnelles par d'autres utilisateurs. Cela empêche quiconque d'ajouter son propre certificat et d'accéder à votre compte en votre nom.
7) Configurer l'authentification
La configuration de notre module PAM est complètement standard et se fait de la même manière que les autres modules. Créez le fichier /usr/share/pam-configs/rutoken-gost-pam contenant le nom complet du module, s'il est activé par défaut, la priorité du module et les paramètres d'authentification.
Dans les paramètres d'authentification, il existe des exigences concernant le succès de l'opération :
- required (exigé) : ces modules doivent retourner une réponse positive. Si le résultat de l'appel du module contient une réponse négative, cela entraînera une erreur d'authentification. La requête sera annulée, mais les autres modules seront appelés.
- requisite (nécessaire) : semblable à required, mais entraîne immédiatement un échec d'authentification et ignore les autres modules.
- sufficient (suffisant) : si aucun des modules required ou sufficient n'a retourné de résultat négatif avant ce module, alors le module renverra une réponse positive. Les modules restants seront ignorés.
- optional (optionnel) : si aucune module required n'est présent dans la pile et qu'aucun des modules sufficient n'a retourné de résultat positif, alors au moins un des modules optional doit retourner une réponse positive.
Le contenu complet du fichier /usr/share/pam-configs/rutoken-gost-pam:
Nom : Rutoken PAM GOST
Par défaut : oui
Priorité : 800
Type d'authentification : Principal
Auth : suffisant /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

nous sauvegardons le fichier, après cela nous exécutons
$ sudo pam-auth-update
dans la fenêtre qui apparaît, mettez une étoile à côté de Rutoken PAM GOST et cliquez sur OK

8) Vérifiez la configuration
Pour s'assurer que tout est configuré, sans perdre la possibilité de se connecter au système, entrez la commande
$ sudo login
Entrez votre nom d'utilisateur. Tout est correctement configuré si le système demande le code PIN de l'appareil.

9) Configurer le verrouillage de l'ordinateur lors du retrait du token
Le paquet contient libpam-pkcs11 une utilitaire pkcs11_eventmgr, qui permet d'exécuter diverses actions lors d'événements PKCS#11.
Pour configurer pkcs11_eventmgr le fichier de configuration : /etc/pam_pkcs11/pkcs11_eventmgr.conf
Pour différents distributions Linux, la commande qui déclenche le verrouillage du compte lors du retrait des cartes à puce ou du token sera différente. Voir. event card_remove.
Un exemple de fichier de configuration est présenté ci-dessous :
pkcs11_eventmgr
{
# Exécution en arrière-plan
daemon = true;
# Configuration des messages de débogage
debug = false;
# Temps de polling en secondes
polling_time = 1;
# Définir le délai d'expiration pour la carte
# Par défaut 0
expire_time = 0;
# Choix de la bibliothèque pkcs11 pour travailler avec RUTOKEN
pkcs11_module = usr/lib/librtpkcs11ecp.so;
# Actions avec la carte
# Carte insérée :
event card_insert {
# Laisser les valeurs par défaut (rien ne se passe)
on_error = ignore;
action = "/bin/false";
}
# Carte retirée
event card_remove {
on_error = ignore;
# Appeler la fonction de verrouillage d'écran
# Pour GNOME
action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
# Pour XFCE
# action = "xflock4";
# Pour Astra Linux (FLY)
# action = "fly-wmfunc FLYWM_LOCK";
}
# Carte retirée depuis longtemps
event expire_time {
# Laisser les valeurs par défaut (rien ne se passe)
on_error = ignore;
action = "/bin/false";
}
}Après cela, ajoutez l'application pkcs11_eventmgr au démarrage automatique. Pour ce faire, éditez le fichier .bash_profile :
$ nano /home//.bash_profile
Ajoutez à la fin du fichier la ligne pkcs11_eventmgr et redémarrez.
Les étapes décrites pour configurer le système d'exploitation peuvent être utilisées comme un guide dans toute distribution Linux moderne, y compris les distributions nationales.

Conclusion
Les PC sous Linux dans les structures gouvernementales russes deviennent de plus en plus populaires, et configurer une authentification à deux facteurs fiable dans ce système d'exploitation n'est pas toujours simple. Nous espérons que ce guide vous aidera à résoudre le "problème des mots de passe" et à sécuriser l'accès aux PC sans y consacrer trop de temps.
Source : habr.com
