Cara menggunakan modul PAM untuk pengesahan tempatan di Linux menggunakan kekunci GOST-2012 pada Rutoken

Cara menggunakan modul PAM untuk pengesahan tempatan di Linux menggunakan kekunci GOST-2012 pada Rutoken

Kata laluan mudah tidak selamat, dan kata laluan yang rumit adalah mustahil untuk diingati. Itulah sebabnya mereka sering berakhir pada nota melekit di bawah papan kekunci atau pada monitor. Untuk memastikan kata laluan kekal dalam fikiran pengguna "pelupa" dan kebolehpercayaan perlindungan tidak hilang, terdapat pengesahan dua faktor (2FA).

Oleh kerana gabungan memiliki peranti dan mengetahui PINnya, PIN itu sendiri boleh menjadi lebih ringkas dan lebih mudah diingati. Kelemahan dalam panjang PIN atau rawak diimbangi oleh keperluan pemilikan fizikal dan sekatan ke atas kekerasan PIN.

Di samping itu, ia berlaku di agensi kerajaan bahawa mereka mahu segala-galanya berfungsi mengikut GOST. Pilihan 2FA ini untuk log masuk ke Linux akan dibincangkan. Saya akan mulakan dari jauh.

modul PAM

Modul Pengesahan Boleh Palam (PAM) ialah modul dengan API standard dan pelaksanaan pelbagai mekanisme pengesahan dalam aplikasi.
Semua utiliti dan aplikasi yang boleh berfungsi dengan PAM mengambilnya dan boleh menggunakannya untuk pengesahan pengguna.
Dalam amalan, ia berfungsi seperti ini: arahan log masuk memanggil PAM, yang melakukan semua pemeriksaan yang diperlukan menggunakan modul yang dinyatakan dalam fail konfigurasi dan mengembalikan hasilnya kepada arahan log masuk.

librtpam

Modul yang dibangunkan oleh syarikat Aktiv menambah pengesahan dua faktor pengguna menggunakan kad pintar atau token USB menggunakan kekunci asimetri mengikut piawaian kriptografi domestik terkini.

Mari kita lihat prinsip operasinya:

  • Token menyimpan sijil pengguna dan kunci peribadinya;
  • Sijil disimpan dalam direktori utama pengguna sebagai dipercayai.

Proses pengesahan berlaku seperti berikut:

  1. Rutoken mencari sijil peribadi pengguna.
  2. PIN token diminta.
  3. Data rawak ditandatangani pada kunci persendirian terus dalam cip Rutoken.
  4. Tandatangan yang terhasil disahkan menggunakan kunci awam daripada sijil pengguna.
  5. Modul mengembalikan hasil pengesahan tandatangan kepada aplikasi panggilan.

Anda boleh mengesahkan menggunakan kekunci GOST R 34.10-2012 (panjang 256 atau 512 bit) atau GOST R 34.10-2001 yang sudah lapuk.

Anda tidak perlu risau tentang keselamatan kunci - ia dijana terus dalam Rutoken dan tidak pernah meninggalkan ingatannya semasa operasi kriptografi.

Cara menggunakan modul PAM untuk pengesahan tempatan di Linux menggunakan kekunci GOST-2012 pada Rutoken

Rutoken EDS 2.0 diperakui oleh FSB dan FSTEC mengikut NDV 4, oleh itu ia boleh digunakan dalam sistem maklumat yang memproses maklumat sulit.

Penggunaan praktikal

Hampir semua Linux moden akan melakukannya, contohnya kami akan menggunakan xUbuntu 18.10.

1) Pasang pakej yang diperlukan

sudo apt-get install libccid pcscd opensc
Jika anda ingin menambah kunci desktop dengan penyelamat skrin, pasang pakej itu sebagai tambahan libpam-pkcs11.

2) Tambah modul PAM dengan sokongan GOST

Memuatkan perpustakaan daripada https://download.rutoken.ru/Rutoken/PAM/
Salin kandungan folder PAM librtpam.so.1.0.0 ke folder sistem
/usr/lib/ atau /usr/lib/x86_64-linux-gnu/atau /usr/lib64

3) Pasang pakej dengan librtpkcs11ecp.so

Muat turun dan pasang pakej DEB atau RPM dari pautan: https://www.rutoken.ru/support/download/pkcs/

4) Semak sama ada Rutoken EDS 2.0 berfungsi dalam sistem

Di terminal kami laksanakan
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Jika anda melihat garisan Rutoken ECP <no label> - ini bermakna semuanya OK.

5) Baca sijil

Memeriksa sama ada peranti mempunyai sijil
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Jika selepas baris:
Using slot 0 with a present token (0x0)

  • maklumat dipaparkan mengenai kunci dan sijil, anda perlu membaca sijil dan menyimpannya ke cakera. Untuk melakukan ini, jalankan arahan berikut, di mana bukannya {id} anda perlu menggantikan ID sijil yang anda lihat dalam output arahan sebelumnya:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Jika fail cert.crt telah dibuat, teruskan ke langkah 6).
  • tiada apa-apa, maka peranti itu kosong. Hubungi pentadbir anda atau buat sendiri kunci dan sijil dengan mengikuti langkah seterusnya.

5.1) Buat sijil ujian

Perhatian! Kaedah yang diterangkan untuk mencipta kunci dan sijil sesuai untuk ujian dan tidak bertujuan untuk digunakan dalam mod pertempuran. Untuk melakukan ini, anda perlu menggunakan kunci dan sijil yang dikeluarkan oleh pihak berkuasa pensijilan dipercayai organisasi anda atau pihak berkuasa pensijilan bertauliah.
Modul PAM direka untuk melindungi komputer tempatan dan direka untuk berfungsi dalam organisasi kecil. Memandangkan terdapat sedikit pengguna, Pentadbir boleh memantau pembatalan sijil dan menyekat akaun secara manual, serta tempoh sah sijil. Modul PAM belum tahu cara mengesahkan sijil menggunakan CRL dan membina rantai kepercayaan.

Cara mudah (melalui pelayar)

Untuk mendapatkan sijil ujian, gunakan perkhidmatan web "Pusat Pendaftaran Rutoken". Proses ini akan mengambil masa tidak lebih daripada 5 minit.

Cara geek (melalui konsol dan mungkin pengkompil)

Semak versi OpenSC
$ opensc-tool --version
Jika versi kurang daripada 0.20, kemudian kemas kini atau bina Cawangan alat pkcs11 dengan sokongan GOST-2012 daripada GitHub kami (pada masa artikel ini dikeluarkan 0.20 masih belum dikeluarkan) atau daripada cawangan induk projek OpenSC utama tidak lewat melakukan 8cf1e6f

Hasilkan pasangan kunci dengan parameter berikut:
--key-type: GOSTR3410-2012-512:А (Π“ΠžΠ‘Π’-2012 512 Π±ΠΈΡ‚ c парамсСтом А), GOSTR3410-2012-256:A (Π“ΠžΠ‘Π’-2012 256 Π±ΠΈΡ‚ с парамсСтом A)

--id: pengecam objek (CKA_ID) sebagai nombor aksara heks dua digit daripada jadual ASCII. Gunakan hanya kod ASCII untuk aksara boleh cetak, kerana... id perlu dihantar ke OpenSSL sebagai rentetan. Sebagai contoh, kod ASCII "3132" sepadan dengan rentetan "12". Untuk kemudahan, anda boleh menggunakan perkhidmatan dalam talian untuk menukar rentetan kepada kod ASCII.

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

Seterusnya kita akan membuat sijil. Dua cara akan diterangkan di bawah: yang pertama adalah melalui CA (kami akan menggunakan CA ujian), yang kedua adalah ditandatangani sendiri. Untuk melakukan ini, anda perlu memasang dan mengkonfigurasi OpenSSL versi 1.1 atau lebih baru untuk bekerja dengan Rutoken melalui modul rtengine khas menggunakan manual. Memasang dan mengkonfigurasi OpenSSL.
Contohnya: untuk '--id 3132' dalam OpenSSL anda perlu menentukan "pkcs11:id=12".

Anda boleh menggunakan perkhidmatan CA ujian, yang mana terdapat banyak, contohnya, di sini, di sini ΠΈ di sini, untuk ini kami akan membuat permintaan untuk sijil

Pilihan lain ialah menyerah kepada kemalasan dan membuat tandatangan sendiri
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Memuat naik sijil ke peranti
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Daftar sijil dalam sistem

Pastikan sijil anda kelihatan seperti fail base64:

Cara menggunakan modul PAM untuk pengesahan tempatan di Linux menggunakan kekunci GOST-2012 pada Rutoken

Jika sijil anda kelihatan seperti ini:

Cara menggunakan modul PAM untuk pengesahan tempatan di Linux menggunakan kekunci GOST-2012 pada Rutoken

maka anda perlu menukar sijil daripada format DER kepada format PEM (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Kami menyemak semula bahawa semuanya teratur sekarang.

Tambahkan sijil pada senarai sijil yang dipercayai
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

Baris terakhir melindungi senarai sijil yang dipercayai daripada diubah secara tidak sengaja atau sengaja oleh pengguna lain. Ini menghalang seseorang daripada menambah sijil mereka di sini dan boleh log masuk bagi pihak anda.

7) Sediakan pengesahan

Menyediakan modul PAM kami adalah standard sepenuhnya dan dilakukan dengan cara yang sama seperti menyediakan modul lain. Buat untuk fail /usr/share/pam-configs/rutoken-gost-pam mengandungi nama penuh modul, sama ada ia didayakan secara lalai, keutamaan modul dan parameter pengesahan.
Parameter pengesahan mengandungi keperluan untuk kejayaan operasi:

  • diperlukan: Modul sedemikian mesti mengembalikan respons positif. Jika hasil panggilan modul mengandungi respons negatif, ini akan mengakibatkan ralat pengesahan. Permintaan akan digugurkan, tetapi modul yang selebihnya akan dipanggil.
  • diperlukan: Sama seperti yang diperlukan, tetapi serta-merta gagal pengesahan dan mengabaikan modul lain.
  • mencukupi: Jika tiada modul yang diperlukan atau mencukupi sebelum modul sedemikian mengembalikan hasil negatif, maka modul akan mengembalikan respons positif. Modul yang selebihnya akan diabaikan.
  • pilihan: Jika tiada modul yang diperlukan pada tindanan dan tiada modul yang mencukupi mengembalikan hasil yang positif, maka sekurang-kurangnya satu daripada modul pilihan mesti mengembalikan hasil yang positif.

Kandungan fail penuh /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

Cara menggunakan modul PAM untuk pengesahan tempatan di Linux menggunakan kekunci GOST-2012 pada Rutoken

simpan fail, kemudian laksanakan
$ sudo pam-auth-update
dalam tetingkap yang muncul, letakkan asterisk di sebelahnya Rutoken PAM GOST dan klik OK

Cara menggunakan modul PAM untuk pengesahan tempatan di Linux menggunakan kekunci GOST-2012 pada Rutoken

8) Semak tetapan

Untuk memahami bahawa segala-galanya dikonfigurasikan, tetapi pada masa yang sama tidak kehilangan keupayaan untuk log masuk ke sistem, masukkan arahan
$ sudo login
Masukkan nama pengguna anda. Semuanya dikonfigurasikan dengan betul jika sistem memerlukan kod PIN peranti.

Cara menggunakan modul PAM untuk pengesahan tempatan di Linux menggunakan kekunci GOST-2012 pada Rutoken

9) Konfigurasikan komputer untuk disekat apabila token diekstrak

Termasuk dalam pakej libpam-pkcs11 utiliti disertakan pkcs11_eventmgr, yang membolehkan anda melakukan pelbagai tindakan apabila peristiwa PKCS#11 berlaku.
Untuk tetapan pkcs11_eventmgr berfungsi sebagai fail konfigurasi: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Untuk pengedaran Linux yang berbeza, perintah yang menyebabkan akaun dikunci apabila kad pintar atau token dialih keluar akan berbeza. Cm. event card_remove.
Contoh fail konfigurasi ditunjukkan di bawah:

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";
    }
}

Selepas itu tambah aplikasi pkcs11_eventmgr untuk memulakan. Untuk melakukan ini, edit fail .bash_profile:
$ nano /home/<имя_ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>/.bash_profile
Tambahkan baris pkcs11_eventmgr ke penghujung fail dan but semula.

Langkah-langkah yang diterangkan untuk menyediakan sistem pengendalian boleh digunakan sebagai arahan dalam mana-mana pengedaran Linux moden, termasuk yang domestik.

Cara menggunakan modul PAM untuk pengesahan tempatan di Linux menggunakan kekunci GOST-2012 pada Rutoken

Kesimpulan

PC Linux menjadi semakin popular di agensi kerajaan Rusia, dan menyediakan pengesahan dua faktor yang boleh dipercayai dalam OS ini tidak selalu mudah. Kami berbesar hati untuk membantu anda menyelesaikan "masalah kata laluan" dengan panduan ini dan melindungi akses kepada PC anda dengan pasti tanpa menghabiskan banyak masa padanya.

Sumber: www.habr.com

Tambah komen