Πώς να χρησιμοποιήσετε μονάδες PAM για τοπικό έλεγχο ταυτότητας στο Linux χρησιμοποιώντας κλειδιά GOST-2012 στο Rutoken

Πώς να χρησιμοποιήσετε μονάδες PAM για τοπικό έλεγχο ταυτότητας στο Linux χρησιμοποιώντας κλειδιά GOST-2012 στο Rutoken

Οι απλοί κωδικοί πρόσβασης δεν είναι ασφαλείς και οι σύνθετοι είναι αδύνατο να θυμηθούν. Γι' αυτό τόσο συχνά καταλήγουν σε μια κολλώδη σημείωση κάτω από το πληκτρολόγιο ή στην οθόνη. Για να διασφαλιστεί ότι οι κωδικοί πρόσβασης παραμένουν στο μυαλό των «ξεχασιασμένων» χρηστών και ότι δεν χάνεται η αξιοπιστία της προστασίας, υπάρχει έλεγχος ταυτότητας δύο παραγόντων (2FA).

Λόγω του συνδυασμού της κατοχής μιας συσκευής και της γνώσης του PIN της, το ίδιο το PIN μπορεί να είναι απλούστερο και ευκολότερο να θυμάστε. Τα μειονεκτήματα στο μήκος ή στην τυχαιότητα του PIN αντισταθμίζονται από την απαίτηση φυσικής κατοχής και τους περιορισμούς στην ωμή δύναμη του PIN.

Επιπλέον, συμβαίνει στις κρατικές υπηρεσίες να θέλουν τα πάντα να λειτουργούν σύμφωνα με το GOST. Αυτή η επιλογή 2FA για σύνδεση στο Linux θα συζητηθεί. Θα ξεκινήσω από μακριά.

Μονάδες PAM

Οι Pluggable Authentication Modules (PAM) είναι λειτουργικές μονάδες με τυπικό API και υλοποιήσεις διαφόρων μηχανισμών ελέγχου ταυτότητας σε εφαρμογές.
Όλα τα βοηθητικά προγράμματα και οι εφαρμογές που μπορούν να λειτουργήσουν με PAM τα παραλαμβάνουν και μπορούν να τα χρησιμοποιήσουν για έλεγχο ταυτότητας χρήστη.
Στην πράξη, λειτουργεί κάπως έτσι: η εντολή σύνδεσης καλεί το PAM, το οποίο εκτελεί όλους τους απαραίτητους ελέγχους χρησιμοποιώντας τα modules που καθορίζονται στο αρχείο διαμόρφωσης και επιστρέφει το αποτέλεσμα πίσω στην εντολή σύνδεσης.

librtpam

Η μονάδα που αναπτύχθηκε από την εταιρεία Aktiv προσθέτει έλεγχο ταυτότητας δύο παραγόντων των χρηστών που χρησιμοποιούν έξυπνες κάρτες ή μάρκες USB χρησιμοποιώντας ασύμμετρα κλειδιά σύμφωνα με τα πιο πρόσφατα πρότυπα εγχώριας κρυπτογραφίας.

Ας δούμε την αρχή της λειτουργίας του:

  • Το διακριτικό αποθηκεύει το πιστοποιητικό του χρήστη και το ιδιωτικό του κλειδί.
  • Το πιστοποιητικό αποθηκεύεται στον αρχικό κατάλογο του χρήστη ως αξιόπιστο.

Η διαδικασία ελέγχου ταυτότητας πραγματοποιείται ως εξής:

  1. Το Rutoken αναζητά το προσωπικό πιστοποιητικό του χρήστη.
  2. Ζητείται το διακριτικό PIN.
  3. Τα τυχαία δεδομένα υπογράφονται στο ιδιωτικό κλειδί απευθείας στο τσιπ Rutoken.
  4. Η υπογραφή που προκύπτει επαληθεύεται χρησιμοποιώντας το δημόσιο κλειδί από το πιστοποιητικό του χρήστη.
  5. Η μονάδα επιστρέφει το αποτέλεσμα επαλήθευσης υπογραφής στην εφαρμογή κλήσης.

Μπορείτε να κάνετε έλεγχο ταυτότητας χρησιμοποιώντας κλειδιά GOST R 34.10-2012 (μήκους 256 ή 512 bit) ή το ξεπερασμένο GOST R 34.10-2001.

Δεν χρειάζεται να ανησυχείτε για την ασφάλεια των κλειδιών - δημιουργούνται απευθείας στο Rutoken και δεν αφήνουν ποτέ τη μνήμη του κατά τη διάρκεια κρυπτογραφικών λειτουργιών.

Πώς να χρησιμοποιήσετε μονάδες PAM για τοπικό έλεγχο ταυτότητας στο Linux χρησιμοποιώντας κλειδιά GOST-2012 στο Rutoken

Το Rutoken EDS 2.0 είναι πιστοποιημένο από το FSB και το FSTEC σύμφωνα με το NDV 4, επομένως μπορεί να χρησιμοποιηθεί σε συστήματα πληροφοριών που επεξεργάζονται εμπιστευτικές πληροφορίες.

Πρακτική χρήση

Σχεδόν κάθε σύγχρονο Linux θα το κάνει, για παράδειγμα θα χρησιμοποιήσουμε xUbuntu 18.10.

1) Εγκαταστήστε τα απαραίτητα πακέτα

sudo apt-get install libccid pcscd opensc
Εάν θέλετε να προσθέσετε ένα κλείδωμα επιφάνειας εργασίας με προφύλαξη οθόνης, εγκαταστήστε το πακέτο επιπλέον libpam-pkcs11.

2) Προσθέστε μια μονάδα PAM με υποστήριξη GOST

Φόρτωση της βιβλιοθήκης από https://download.rutoken.ru/Rutoken/PAM/
Αντιγράψτε τα περιεχόμενα του φακέλου PAM librtpam.so.1.0.0 στο φάκελο συστήματος
/usr/lib/ ή /usr/lib/x86_64-linux-gnu/ή /usr/lib64

3) Εγκαταστήστε το πακέτο με librtpkcs11ecp.so

Κατεβάστε και εγκαταστήστε το πακέτο DEB ή RPM από τον σύνδεσμο: https://www.rutoken.ru/support/download/pkcs/

4) Ελέγξτε ότι το Rutoken EDS 2.0 λειτουργεί στο σύστημα

Στο τερματικό εκτελούμε
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Αν δείτε τη γραμμή Rutoken ECP <no label> - σημαίνει ότι όλα είναι εντάξει.

5) Διαβάστε το πιστοποιητικό

Έλεγχος ότι η συσκευή διαθέτει πιστοποιητικό
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Εάν μετά τη γραμμή:
Using slot 0 with a present token (0x0)

  • εμφανίζονται πληροφορίες σχετικά με τα κλειδιά και τα πιστοποιητικά, πρέπει να διαβάσετε το πιστοποιητικό και να το αποθηκεύσετε στο δίσκο. Για να το κάνετε αυτό, εκτελέστε την ακόλουθη εντολή, όπου αντί για {id} πρέπει να αντικαταστήσετε το αναγνωριστικό πιστοποιητικού που είδατε στην έξοδο της προηγούμενης εντολής:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Εάν το αρχείο cert.crt έχει δημιουργηθεί, προχωρήστε στο βήμα 6).
  • δεν υπάρχει τίποτα, τότε η συσκευή είναι άδεια. Επικοινωνήστε με τον διαχειριστή σας ή δημιουργήστε μόνοι σας τα κλειδιά και το πιστοποιητικό ακολουθώντας το επόμενο βήμα.

5.1) Δημιουργήστε ένα πιστοποιητικό δοκιμής

Προσοχή! Οι περιγραφόμενες μέθοδοι για τη δημιουργία κλειδιών και πιστοποιητικών είναι κατάλληλες για δοκιμή και δεν προορίζονται για χρήση σε λειτουργία μάχης. Για να το κάνετε αυτό, πρέπει να χρησιμοποιήσετε κλειδιά και πιστοποιητικά που εκδίδονται από την αξιόπιστη αρχή πιστοποίησης του οργανισμού σας ή από μια διαπιστευμένη αρχή πιστοποίησης.
Η μονάδα PAM έχει σχεδιαστεί για να προστατεύει τους τοπικούς υπολογιστές και έχει σχεδιαστεί για να λειτουργεί σε μικρούς οργανισμούς. Δεδομένου ότι οι χρήστες είναι λίγοι, ο Διαχειριστής μπορεί να παρακολουθεί την ανάκληση πιστοποιητικών και να αποκλείει μη αυτόματα λογαριασμούς, καθώς και την περίοδο ισχύος των πιστοποιητικών. Η μονάδα PAM δεν γνωρίζει ακόμη πώς να επαληθεύει πιστοποιητικά χρησιμοποιώντας CRL και να δημιουργεί αλυσίδες εμπιστοσύνης.

Ο εύκολος τρόπος (μέσω του προγράμματος περιήγησης)

Για να αποκτήσετε πιστοποιητικό δοκιμής, χρησιμοποιήστε διαδικτυακή υπηρεσία "Κέντρο Εγγραφής Rutoken". Η διαδικασία δεν θα διαρκέσει περισσότερο από 5 λεπτά.

The geek's way (μέσω της κονσόλας και πιθανώς του μεταγλωττιστή)

Ελέγξτε την έκδοση OpenSC
$ opensc-tool --version
Εάν η έκδοση είναι μικρότερη από 0.20, τότε ενημερώστε ή δημιουργήστε pkcs11-κλαδί εργαλείου με υποστήριξη GOST-2012 από το GitHub μας (τη στιγμή αυτού του άρθρου, η έκδοση 0.20 δεν έχει κυκλοφορήσει ακόμη) ή από τον κύριο κλάδο του κύριου έργου OpenSC το αργότερο δεσμεύω 8cf1e6f

Δημιουργήστε ένα ζεύγος κλειδιών με τις ακόλουθες παραμέτρους:
--key-type: GOSTR3410-2012-512:А (ГОСТ-2012 512 бит c парамсетом А), GOSTR3410-2012-256:A (ГОСТ-2012 256 бит с парамсетом A)

--id: αναγνωριστικό αντικειμένου (CKA_ID) ως διψήφιοι δεκαεξαδικοί αριθμοί χαρακτήρων από τον πίνακα ASCII. Χρησιμοποιήστε μόνο κωδικούς ASCII για εκτυπώσιμους χαρακτήρες, επειδή... Το id θα πρέπει να περάσει στο OpenSSL ως συμβολοσειρά. Για παράδειγμα, ο κωδικός ASCII "3132" αντιστοιχεί στη συμβολοσειρά "12". Για ευκολία, μπορείτε να χρησιμοποιήσετε ηλεκτρονική υπηρεσία για τη μετατροπή συμβολοσειρών σε κωδικούς ASCII.

$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132

Στη συνέχεια θα δημιουργήσουμε ένα πιστοποιητικό. Δύο τρόποι θα περιγραφούν παρακάτω: ο πρώτος είναι μέσω μιας ΑΠ (θα χρησιμοποιήσουμε δοκιμαστικές ΑΠ), ο δεύτερος είναι αυτο-υπογεγραμμένος. Για να το κάνετε αυτό, πρέπει πρώτα να εγκαταστήσετε και να διαμορφώσετε το OpenSSL έκδοση 1.1 ή νεότερη για να εργαστείτε με το Rutoken μέσω μιας ειδικής μονάδας rtengine χρησιμοποιώντας το εγχειρίδιο Εγκατάσταση και διαμόρφωση του OpenSSL.
Για παράδειγμα: για «--id 3132"στο OpenSSL πρέπει να καθορίσετε"pkcs11:id=12".

Μπορείτε να χρησιμοποιήσετε τις υπηρεσίες μιας δοκιμαστικής ΑΠ, από τις οποίες υπάρχουν πολλές, για παράδειγμα, εδώ, εδώ и εδώ, για αυτό θα δημιουργήσουμε ένα αίτημα για πιστοποιητικό

Μια άλλη επιλογή είναι να ενδώσετε στην τεμπελιά και να δημιουργήσετε έναν αυτο-υπογεγραμμένο
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Μεταφόρτωση του πιστοποιητικού στη συσκευή
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Καταχωρίστε το πιστοποιητικό στο σύστημα

Βεβαιωθείτε ότι το πιστοποιητικό σας μοιάζει με αρχείο base64:

Πώς να χρησιμοποιήσετε μονάδες PAM για τοπικό έλεγχο ταυτότητας στο Linux χρησιμοποιώντας κλειδιά GOST-2012 στο Rutoken

Εάν το πιστοποιητικό σας μοιάζει με αυτό:

Πώς να χρησιμοποιήσετε μονάδες PAM για τοπικό έλεγχο ταυτότητας στο Linux χρησιμοποιώντας κλειδιά GOST-2012 στο Rutoken

τότε πρέπει να μετατρέψετε το πιστοποιητικό από μορφή DER σε μορφή PEM (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Ελέγχουμε ξανά ότι όλα είναι εντάξει τώρα.

Προσθέστε το πιστοποιητικό στη λίστα αξιόπιστων πιστοποιητικών
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

Η τελευταία γραμμή προστατεύει τη λίστα των αξιόπιστων πιστοποιητικών από τυχαία ή σκόπιμη αλλαγή από άλλους χρήστες. Αυτό εμποδίζει κάποιον να προσθέσει το πιστοποιητικό του εδώ και να μπορέσει να συνδεθεί για λογαριασμό σας.

7) Ρυθμίστε τον έλεγχο ταυτότητας

Η εγκατάσταση της μονάδας PAM είναι εντελώς τυπική και γίνεται με τον ίδιο ακριβώς τρόπο όπως η ρύθμιση άλλων λειτουργικών μονάδων. Δημιουργία σε αρχείο /usr/share/pam-configs/rutoken-gost-pam που περιέχει το πλήρες όνομα της λειτουργικής μονάδας, είτε είναι ενεργοποιημένη από προεπιλογή, την προτεραιότητα της μονάδας και τις παραμέτρους ελέγχου ταυτότητας.
Οι παράμετροι ελέγχου ταυτότητας περιέχουν απαιτήσεις για την επιτυχία της λειτουργίας:

  • απαιτείται: Τέτοιες ενότητες πρέπει να δίνουν θετική απάντηση. Εάν το αποτέλεσμα μιας κλήσης μονάδας περιέχει αρνητική απόκριση, αυτό θα οδηγήσει σε σφάλμα ελέγχου ταυτότητας. Το αίτημα θα απορριφθεί, αλλά οι υπόλοιπες λειτουργικές μονάδες θα κληθούν.
  • requisite: Παρόμοιο με το απαιτούμενο, αλλά αποτυγχάνει αμέσως ο έλεγχος ταυτότητας και αγνοεί άλλες μονάδες.
  • επαρκής: Εάν καμία από τις απαιτούμενες ή επαρκείς ενότητες πριν από μια τέτοια ενότητα δεν επέστρεψε αρνητικό αποτέλεσμα, τότε η ενότητα θα επιστρέψει θετική απόκριση. Οι υπόλοιπες ενότητες θα αγνοηθούν.
  • προαιρετικό: Εάν δεν υπάρχουν απαιτούμενες μονάδες στη στοίβα και καμία από τις επαρκείς μονάδες δεν επιστρέφει θετικό αποτέλεσμα, τότε τουλάχιστον μία από τις προαιρετικές μονάδες πρέπει να επιστρέψει θετικό αποτέλεσμα.

Πλήρες περιεχόμενο αρχείου /usr/share/pam-configs/rutoken-gost-pam:
Name: Rutoken PAM GOST
Default: yes
Priority: 800
Auth-Type: Primary
Auth: sufficient /usr/lib/librtpam.so.1.0.0 /usr/lib/librtpkcs11ecp.so

Πώς να χρησιμοποιήσετε μονάδες PAM για τοπικό έλεγχο ταυτότητας στο Linux χρησιμοποιώντας κλειδιά GOST-2012 στο Rutoken

αποθηκεύστε το αρχείο και μετά εκτελέστε
$ sudo pam-auth-update
στο παράθυρο που εμφανίζεται, βάλτε έναν αστερίσκο δίπλα του Rutoken PAM GOST και κάντε κλικ OK

Πώς να χρησιμοποιήσετε μονάδες PAM για τοπικό έλεγχο ταυτότητας στο Linux χρησιμοποιώντας κλειδιά GOST-2012 στο Rutoken

8) Ελέγξτε τις ρυθμίσεις

Για να καταλάβετε ότι όλα έχουν ρυθμιστεί, αλλά ταυτόχρονα να μην χάσετε τη δυνατότητα σύνδεσης στο σύστημα, εισαγάγετε την εντολή
$ sudo login
Εισαγάγετε το όνομα χρήστη σας. Όλα έχουν ρυθμιστεί σωστά εάν το σύστημα απαιτεί κωδικό PIN συσκευής.

Πώς να χρησιμοποιήσετε μονάδες PAM για τοπικό έλεγχο ταυτότητας στο Linux χρησιμοποιώντας κλειδιά GOST-2012 στο Rutoken

9) Διαμορφώστε τον υπολογιστή ώστε να αποκλειστεί κατά την εξαγωγή του διακριτικού

Περιλαμβάνεται στη συσκευασία libpam-pkcs11 περιλαμβάνεται βοηθητικό πρόγραμμα pkcs11_eventmgr, που σας επιτρέπει να εκτελείτε διάφορες ενέργειες όταν συμβαίνουν συμβάντα PKCS#11.
Για ρυθμίσεις pkcs11_eventmgr χρησιμεύει ως αρχείο διαμόρφωσης: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Για διαφορετικές διανομές Linux, η εντολή που προκαλεί το κλείδωμα ενός λογαριασμού όταν αφαιρείται μια έξυπνη κάρτα ή διακριτικό θα διαφέρει. Εκ. event card_remove.
Ένα παράδειγμα αρχείου ρύθμισης παραμέτρων φαίνεται παρακάτω:

pkcs11_eventmgr
{
    # Запуск в бэкграунде
    daemon = true;
     
    # Настройка сообщений отладки
    debug = false;
 
    # Время опроса в секундах
    polling_time = 1;
 
    # Установка тайм-аута на удаление карты
    # По-умолчанию 0
    expire_time = 0;
 
    # Выбор pkcs11 библиотеки для работы с Рутокен
    pkcs11_module = usr/lib/librtpkcs11ecp.so;
 
    # Действия с картой
    # Карта вставлена:
    event card_insert {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore ;
 
        action = "/bin/false";
    }
 
    # Карта извлечена
    event card_remove {
        on_error = ignore;
         
        # Вызываем функцию блокировки экрана
        
        # Для GNOME 
        action = "dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock";
        
        # Для XFCE
        # action = "xflock4";
        
        # Для Astra Linux (FLY)
        # action = "fly-wmfunc FLYWM_LOCK";
    }
 
    # Карта долгое время извлечена
    event expire_time {
        # Оставляем значения по умолчанию (ничего не происходит)
        on_error = ignore;
 
        action = "/bin/false";
    }
}

Μετά από αυτό προσθέστε την εφαρμογή pkcs11_eventmgr στην εκκίνηση. Για να το κάνετε αυτό, επεξεργαστείτε το αρχείο .bash_profile:
$ nano /home/<имя_пользователя>/.bash_profile
Προσθέστε τη γραμμή pkcs11_eventmgr στο τέλος του αρχείου και επανεκκινήστε.

Τα βήματα που περιγράφονται για τη ρύθμιση του λειτουργικού συστήματος μπορούν να χρησιμοποιηθούν ως οδηγίες σε οποιαδήποτε σύγχρονη διανομή Linux, συμπεριλαμβανομένων των εγχώριων.

Πώς να χρησιμοποιήσετε μονάδες PAM για τοπικό έλεγχο ταυτότητας στο Linux χρησιμοποιώντας κλειδιά GOST-2012 στο Rutoken

Συμπέρασμα

Οι υπολογιστές Linux γίνονται όλο και πιο δημοφιλείς στις ρωσικές κρατικές υπηρεσίες και η ρύθμιση αξιόπιστου ελέγχου ταυτότητας δύο παραγόντων σε αυτό το λειτουργικό σύστημα δεν είναι πάντα εύκολη. Θα χαρούμε να σας βοηθήσουμε να λύσετε το «πρόβλημα του κωδικού πρόσβασης» με αυτόν τον οδηγό και να προστατεύσουμε αξιόπιστα την πρόσβαση στον υπολογιστή σας χωρίς να ξοδεύετε πολύ χρόνο σε αυτόν.

Πηγή: www.habr.com

Προσθέστε ένα σχόλιο