Cara menggunakan modul PAM untuk otentikasi lokal di Linux menggunakan kunci GOST-2012 di Rutoken

Cara menggunakan modul PAM untuk otentikasi lokal di Linux menggunakan kunci GOST-2012 di Rutoken

Kata sandi yang sederhana tidak aman, dan kata sandi yang rumit tidak mungkin diingat. Itu sebabnya mereka sering kali berakhir di catatan tempel di bawah keyboard atau di monitor. Untuk memastikan kata sandi tetap diingat oleh pengguna yang β€œlupa” dan keandalan perlindungan tidak hilang, ada otentikasi dua faktor (2FA).

Karena kombinasi kepemilikan perangkat dan mengetahui PIN-nya, PIN itu sendiri bisa lebih sederhana dan mudah diingat. Kerugian dalam panjang atau keacakan PIN diimbangi dengan persyaratan kepemilikan fisik dan pembatasan kekerasan PIN.

Selain itu, di instansi pemerintah mereka ingin semuanya berjalan sesuai dengan Gost. Opsi 2FA untuk masuk ke Linux ini akan dibahas. Saya akan mulai dari jauh.

Modul PAM

Modul Otentikasi Pluggable (PAM) adalah modul dengan API standar dan implementasi berbagai mekanisme otentikasi dalam aplikasi.
Semua utilitas dan aplikasi yang dapat bekerja dengan PAM mengambilnya dan dapat menggunakannya untuk otentikasi pengguna.
Dalam praktiknya, cara kerjanya seperti ini: perintah login memanggil PAM, yang melakukan semua pemeriksaan yang diperlukan menggunakan modul yang ditentukan dalam file konfigurasi dan mengembalikan hasilnya ke perintah login.

perpustakaan

Modul yang dikembangkan oleh perusahaan Aktiv menambahkan otentikasi dua faktor pengguna menggunakan kartu pintar atau token USB menggunakan kunci asimetris sesuai dengan standar kriptografi domestik terbaru.

Mari kita lihat prinsip pengoperasiannya:

  • Token menyimpan sertifikat pengguna dan kunci pribadinya;
  • Sertifikat disimpan di direktori home pengguna sebagai tepercaya.

Proses otentikasi terjadi sebagai berikut:

  1. Rutoken mencari sertifikat pribadi pengguna.
  2. PIN token diminta.
  3. Data acak ditandatangani pada kunci pribadi langsung di chip Rutoken.
  4. Tanda tangan yang dihasilkan diverifikasi menggunakan kunci publik dari sertifikat pengguna.
  5. Modul mengembalikan hasil verifikasi tanda tangan ke aplikasi pemanggil.

Anda dapat mengautentikasi menggunakan kunci gost r 34.10-2012 (panjang 256 atau 512 bit) atau gost r 34.10-2001 yang sudah ketinggalan zaman.

Anda tidak perlu khawatir tentang keamanan kunci - kunci tersebut dibuat langsung di Rutoken dan tidak pernah meninggalkan memorinya selama operasi kriptografi.

Cara menggunakan modul PAM untuk otentikasi lokal di Linux menggunakan kunci GOST-2012 di Rutoken

Rutoken EDS 2.0 disertifikasi oleh FSB dan FSTEC menurut NDV 4, sehingga dapat digunakan dalam sistem informasi yang memproses informasi rahasia.

Penggunaan praktis

Hampir semua Linux modern bisa digunakan, misalnya kita akan menggunakan xUbuntu 18.10.

1) Instal paket yang diperlukan

sudo apt-get install libccid pcscd opensc
Jika Anda ingin menambahkan kunci desktop dengan screensaver, instal paket tambahan libpam-pkcs11.

2) Tambahkan modul PAM dengan dukungan Gost

Memuat perpustakaan dari https://download.rutoken.ru/Rutoken/PAM/
Salin isi folder PAM librtpam.so.1.0.0 ke folder sistem
/usr/lib/ ΠΈΠ»ΠΈ /usr/lib/x86_64-linux-gnu/ΠΈΠ»ΠΈ /usr/lib64

3) Instal paket dengan librtpkcs11ecp.so

Unduh dan instal paket DEB atau RPM dari tautan: https://www.rutoken.ru/support/download/pkcs/

4) Periksa apakah Rutoken EDS 2.0 berfungsi di sistem

Di terminal kami mengeksekusi
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Jika Anda melihat garisnya Rutoken ECP <no label> - itu berarti semuanya baik-baik saja.

5) Baca sertifikatnya

Memeriksa apakah perangkat memiliki sertifikat
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Jika setelah baris:
Using slot 0 with a present token (0x0)

  • informasi ditampilkan tentang kunci dan sertifikat, Anda perlu membaca sertifikat dan menyimpannya ke disk. Untuk melakukannya, jalankan perintah berikut, dan alih-alih {id} Anda harus mengganti ID sertifikat yang Anda lihat di keluaran perintah sebelumnya:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Jika file cert.crt sudah dibuat, lanjutkan ke langkah 6).
  • tidak ada apa-apa, maka perangkat tersebut kosong. Hubungi administrator Anda atau buat sendiri kunci dan sertifikatnya dengan mengikuti langkah berikutnya.

5.1) Buat sertifikat tes

Perhatian! Metode yang dijelaskan untuk membuat kunci dan sertifikat cocok untuk pengujian dan tidak dimaksudkan untuk digunakan dalam mode pertempuran. Untuk melakukannya, Anda perlu menggunakan kunci dan sertifikat yang dikeluarkan oleh otoritas sertifikasi tepercaya organisasi Anda atau otoritas sertifikasi terakreditasi.
Modul PAM dirancang untuk melindungi komputer lokal dan dirancang untuk bekerja di organisasi kecil. Karena penggunanya sedikit, Administrator dapat memantau pencabutan sertifikat dan memblokir akun secara manual, serta masa berlaku sertifikat. Modul PAM belum mengetahui cara memverifikasi sertifikat menggunakan CRL dan membangun rantai kepercayaan.

Caranya mudah (melalui browser)

Untuk mendapatkan sertifikat tes, gunakan layanan web "Pusat Pendaftaran Rutoken". Prosesnya akan memakan waktu tidak lebih dari 5 menit.

Cara geek (melalui konsol dan mungkin kompiler)

Periksa versi OpenSC
$ opensc-tool --version
Jika versinya kurang dari 0.20, perbarui atau buat cabang alat pkcs11 dengan dukungan Gost-2012 dari GitHub kami (pada saat artikel ini diterbitkan, rilis 0.20 belum dirilis) atau dari cabang master proyek OpenSC utama paling lambat melakukan 8cf1e6f

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

--id: pengidentifikasi objek (CKA_ID) sebagai dua digit angka karakter hex dari tabel ASCII. Gunakan hanya kode ASCII untuk karakter yang dapat dicetak, karena... id harus diteruskan ke OpenSSL sebagai string. Misalnya, kode ASCII β€œ3132” sesuai dengan string β€œ12”. Untuk kenyamanan, Anda bisa menggunakan layanan online untuk mengonversi string menjadi kode ASCII.

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

Selanjutnya kita akan membuat sertifikat. Dua cara akan dijelaskan di bawah ini: yang pertama adalah melalui CA (kita akan menggunakan CA uji), yang kedua adalah dengan ditandatangani sendiri. Untuk melakukan ini, Anda harus terlebih dahulu menginstal dan mengkonfigurasi OpenSSL versi 1.1 atau lebih baru agar dapat bekerja dengan Rutoken melalui modul rtengine khusus menggunakan manual Menginstal dan mengkonfigurasi OpenSSL.
Misalnya: untuk '--id 3132' di OpenSSL Anda perlu menentukan "pkcs11:id=12".

Anda dapat menggunakan layanan tes CA, yang jumlahnya banyak, misalnya, di sini, di sini ΠΈ di sini, untuk ini kita akan membuat permintaan sertifikat

Pilihan lainnya adalah menyerah pada kemalasan dan membuat tanda tangan sendiri
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr

Mengunggah sertifikat ke perangkat
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer

6) Daftarkan sertifikat di sistem

Pastikan sertifikat Anda terlihat seperti file base64:

Cara menggunakan modul PAM untuk otentikasi lokal di Linux menggunakan kunci GOST-2012 di Rutoken

Jika sertifikat Anda terlihat seperti ini:

Cara menggunakan modul PAM untuk otentikasi lokal di Linux menggunakan kunci GOST-2012 di Rutoken

maka Anda perlu mengonversi sertifikat dari format DER ke format PEM (base64)

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Kami memeriksa lagi apakah semuanya sudah beres sekarang.

Tambahkan sertifikat ke daftar sertifikat tepercaya
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates

Baris terakhir melindungi daftar sertifikat tepercaya agar tidak diubah secara tidak sengaja atau sengaja oleh pengguna lain. Hal ini mencegah seseorang menambahkan sertifikatnya di sini dan dapat masuk atas nama Anda.

7) Siapkan otentikasi

Menyiapkan modul PAM kami sepenuhnya standar dan dilakukan dengan cara yang persis sama seperti menyiapkan modul lainnya. Buat ke file /usr/share/pam-configs/rutoken-gost-pam berisi nama lengkap modul, apakah diaktifkan secara default, prioritas modul, dan parameter otentikasi.
Parameter otentikasi berisi persyaratan keberhasilan operasi:

  • diperlukan: Modul tersebut harus memberikan respons positif. Jika hasil pemanggilan modul berisi respon negatif, hal ini akan mengakibatkan kesalahan otentikasi. Permintaan akan dibatalkan, namun modul yang tersisa akan dipanggil.
  • syarat: Mirip dengan yang diperlukan, tetapi segera gagal dalam otentikasi dan mengabaikan modul lain.
  • cukup: Jika tidak ada modul yang diperlukan atau mencukupi sebelum modul tersebut memberikan hasil negatif, maka modul akan mengembalikan respons positif. Modul lainnya akan diabaikan.
  • opsional: Jika tidak ada modul yang diperlukan di tumpukan dan tidak ada modul yang memadai yang memberikan hasil positif, maka setidaknya salah satu modul opsional harus memberikan hasil positif.

Isi file lengkap /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 otentikasi lokal di Linux menggunakan kunci GOST-2012 di Rutoken

simpan filenya, lalu jalankan
$ sudo pam-auth-update
di jendela yang muncul, beri tanda bintang di sebelahnya Rutoken PAM Gost dan dorong OK

Cara menggunakan modul PAM untuk otentikasi lokal di Linux menggunakan kunci GOST-2012 di Rutoken

8) Periksa pengaturannya

Untuk memahami bahwa semuanya sudah dikonfigurasi, tetapi pada saat yang sama tidak kehilangan kemampuan untuk masuk ke sistem, masukkan perintah
$ sudo login
Masukkan nama pengguna Anda. Semuanya dikonfigurasi dengan benar jika sistem memerlukan kode PIN perangkat.

Cara menggunakan modul PAM untuk otentikasi lokal di Linux menggunakan kunci GOST-2012 di Rutoken

9) Konfigurasikan komputer untuk diblokir saat token diekstraksi

Termasuk dalam paket libpam-pkcs11 termasuk utilitas pkcs11_eventmgr, yang memungkinkan Anda melakukan berbagai tindakan ketika peristiwa PKCS#11 terjadi.
Untuk pengaturan pkcs11_eventmgr berfungsi sebagai file konfigurasi: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Untuk distribusi Linux yang berbeda, perintah yang menyebabkan akun dikunci ketika kartu pintar atau token dihapus akan berbeda. Cm. event card_remove.
Contoh file konfigurasi ditunjukkan di bawah ini:

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

Setelah itu tambahkan aplikasinya pkcs11_eventmgr Untuk memulai. Untuk melakukan ini, edit file .bash_profile:
$ nano /home/<имя_ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ>/.bash_profile
Tambahkan baris pkcs11_eventmgr di akhir file dan reboot.

Langkah-langkah pengaturan sistem operasi yang dijelaskan dapat digunakan sebagai petunjuk di distribusi Linux modern mana pun, termasuk distribusi domestik.

Cara menggunakan modul PAM untuk otentikasi lokal di Linux menggunakan kunci GOST-2012 di Rutoken

Kesimpulan

PC Linux menjadi semakin populer di lembaga pemerintah Rusia, dan menyiapkan otentikasi dua faktor yang andal di OS ini tidak selalu mudah. Kami akan dengan senang hati membantu Anda memecahkan β€œmasalah kata sandi” dengan panduan ini dan melindungi akses ke PC Anda dengan andal tanpa menghabiskan banyak waktu untuk itu.

Sumber: www.habr.com

Tambah komentar