Comment utiliser les modules PAM pour l'authentification locale sous Linux avec les clés GOST-2012 sur Rutoken

Comment utiliser les modules PAM pour l'authentification locale sous Linux avec les clés GOST-2012 sur Rutoken

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 :

  1. Sur le RUTOKEN, la recherche du certificat personnel de l'utilisateur est effectuée.
  2. Le code PIN du token est demandé.
  3. La signature des données aléatoires avec la clé privée est effectuée directement dans la puce du RUTOKEN.
  4. La signature obtenue est vérifiée à l'aide de la clé publique du certificat de l'utilisateur.
  5. 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.

Comment utiliser les modules PAM pour l'authentification locale sous Linux avec les clés GOST-2012 sur Rutoken

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 https://download.rutoken.ru/Rutoken/PAM/
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 : https://www.rutoken.ru/support/download/pkcs/

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 service en ligne « Centre d'enregistrement RUTOKEN ». 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 la branche pkcs11-tool avec le support GOST-2012 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 le commit 8cf1e6f

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 un service en ligne de conversion de chaĂźne en codes ASCII.

$ ./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 Installation et configuration d'OpenSSL.
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, voici, voici et voici, 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 :

Comment utiliser les modules PAM pour l'authentification locale sous Linux avec les clés GOST-2012 sur Rutoken

Si votre certificat apparaĂźt ainsi :

Comment utiliser les modules PAM pour l'authentification locale sous Linux avec les clés GOST-2012 sur Rutoken

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

Comment utiliser les modules PAM pour l'authentification locale sous Linux avec les clés GOST-2012 sur Rutoken

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

Comment utiliser les modules PAM pour l'authentification locale sous Linux avec les clés GOST-2012 sur Rutoken

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.

Comment utiliser les modules PAM pour l'authentification locale sous Linux avec les clés GOST-2012 sur Rutoken

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.

Comment utiliser les modules PAM pour l'authentification locale sous Linux avec les clés GOST-2012 sur Rutoken

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

Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Acheter un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster