
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
