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



Kata sandi sederhana tidak melindungi, dan kata sandi kompleks tidak dapat diingat. Karena itu, mereka begitu sering ditemukan pada stiker di bawah keyboard atau di monitor. Agar kata sandi tetap berada di kepala pengguna "pelupa" dan keandalan perlindungan tidak akan hilang, ada otentikasi dua faktor (2FA).

Karena kombinasi faktor kepemilikan perangkat dan pengetahuan tentang kode PIN-nya, kode PIN itu sendiri bisa lebih sederhana dan lebih mudah diingat. Kekurangan dalam panjang atau keacakan kode PIN dikompensasi oleh persyaratan kepemilikan fisik dan pembatasan pencarian kode PIN.

Selain itu, di lembaga-lembaga negara, mereka ingin semuanya berjalan sesuai dengan GOST. Tentang opsi ini 2FA untuk memasuki Linux dan akan dibahas. Saya akan mulai dari jauh.

Modul PAM


Pluggable Authentication Modules (PAMs) 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 mengotentikasi pengguna.
Dalam praktiknya, ini berfungsi seperti ini: perintah login berubah menjadi PAM, yang melakukan semua pemeriksaan yang diperlukan menggunakan modul yang ditentukan dalam file konfigurasi dan mengembalikan hasilnya ke perintah login.

librtpam


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

Pertimbangkan prinsip kerjanya:
  • token menyimpan sertifikat pengguna dan kunci privasinya;
  • Sertifikat disimpan di direktori home pengguna sebagai tepercaya.


Proses otentikasi adalah 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 diterima diverifikasi menggunakan kunci publik dari sertifikat pengguna.
  5. Modul mengembalikan hasil verifikasi tanda tangan ke aplikasi panggilan.


Anda dapat mengautentikasi menggunakan tombol GOST R 34.10-2012 (panjang 256 atau 512 bit) atau usang GOST R 34.10-2001.

Tidak perlu khawatir tentang keamanan kunci - kunci dibuat langsung di Rutoken dan tidak pernah meninggalkan ingatannya selama operasi kriptografi.



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

Penggunaan praktis


Hampir semua Linux modern cocok, 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 libpam-pkcs11 paket libpam-pkcs11 .

2) Tambahkan modul PAM dengan dukungan untuk GOST


Unduh perpustakaan dari https://download.rutoken.ru/Rutoken/PAM/
Salin isi folder PAM librtpam.so.1.0.0 ke folder sistem
/usr/lib/ atau /usr/lib/x86_64-linux-gnu/ atau /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) Kami memverifikasi bahwa Rutoken EDS 2.0 berfungsi dalam sistem


Di terminal, jalankan
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Jika Anda melihat baris Rutoken ECP <no label> - maka semuanya baik-baik saja.

5) Baca sertifikat


Periksa apakah perangkat memiliki sertifikat
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Jika setelah baris:
Using slot 0 with a present token (0x0)
  • Jika informasi tentang kunci dan sertifikat ditampilkan , maka Anda perlu membaca sertifikat dan menyimpannya ke disk. Untuk melakukan ini, jalankan perintah berikut, di mana alih-alih {id} Anda perlu mengganti sertifikat ID yang Anda lihat di output dari perintah sebelumnya:
    $ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
    Jika file cert.crt dibuat, lanjutkan ke langkah 6).
  • tidak ada apa-apa , maka perangkat kosong. Hubungi administrator Anda atau buat sendiri kunci dan sertifikat dengan mengikuti langkah berikutnya.


5.1) Buat sertifikat uji


Perhatian! Metode yang dijelaskan untuk membuat kunci dan sertifikat cocok untuk pengujian dan tidak dimaksudkan untuk digunakan dalam mode pertempuran. Untuk melakukan ini, Anda perlu menggunakan kunci dan sertifikat yang dikeluarkan oleh otoritas sertifikasi tepercaya dari organisasi Anda atau otoritas sertifikasi terakreditasi.
Modul PAM dirancang untuk melindungi komputer lokal dan melibatkan pekerjaan di organisasi kecil. Karena ada beberapa pengguna, Administrator sendiri dapat memantau pencabutan sertifikat dan memblokir akun secara manual, serta masa berlaku sertifikat. Modul PAM belum dapat memverifikasi sertifikat oleh CRL dan membangun rantai kepercayaan.


Cara mudah (melalui browser)


Untuk mendapatkan sertifikat pengujian, gunakan layanan web Pusat Pendaftaran Rootoken . Prosesnya akan memakan waktu tidak lebih dari 5 menit.

Geek path (via console dan mungkin compiler)


Periksa Versi OpenSC
$ opensc-tool --version
Jika versinya kurang dari 0,20, maka tingkatkan atau kumpulkan cabang pkcs11-tool dengan dukungan GOST-2012 dari GitHub kami (pada saat artikel ini dirilis, 0,20 belum dirilis) atau dari cabang utama proyek OpenSC paling lambat daripada melakukan 8cf1e6f

Kami menghasilkan pasangan kunci dengan parameter:
--key-type: GOSTR3410-2012-512: (-2012 512 c ), GOSTR3410-2012-256:A (-2012 256 A)

--id: pengidentifikasi objek (CKA_ID) sebagai angka karakter dua digit dalam hex dari tabel ASCII. Gunakan hanya kode ASCII untuk karakter yang dicetak, sebagai id harus lulus OpenSSL sebagai string. Misalnya, kode ASCII "3132" sesuai dengan string "12". Untuk kenyamanan, Anda dapat menggunakan layanan online untuk mengonversi string ke 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 melalui CA (kami akan menggunakan tes CA), yang kedua - ditandatangani sendiri. Untuk melakukan ini, Anda harus terlebih dahulu menginstal dan mengkonfigurasi OpenSSL versi 1.1 atau yang lebih baru untuk bekerja dengan Rutoken melalui modul rtengine khusus menggunakan manual Instalasi dan Konfigurasi OpenSSL .
Sebagai contoh: 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 dan di sini , untuk ini kami akan membuat permintaan sertifikat

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

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

6) Daftarkan sertifikat dalam sistem


Pastikan sertifikat Anda terlihat seperti file base64:



Jika sertifikat Anda terlihat seperti ini:



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

$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Sekali lagi kami periksa bahwa sekarang semuanya beres.

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 dari perubahan yang tidak disengaja atau disengaja oleh pengguna lain. Ini menghilangkan situasi ketika seseorang menambahkan sertifikat mereka di sini dan dapat masuk atas nama Anda.

7) Konfigurasikan otentikasi


Konfigurasi modul PAM kami sepenuhnya standar dan dilakukan seperti pengaturan modul lainnya. Kami membuat di file /usr/share/pam-configs/rutoken-gost-pam berisi nama lengkap modul, apakah itu diaktifkan secara default, prioritas modul dan parameter otentikasi.
Dalam parameter otentikasi ada persyaratan untuk keberhasilan operasi:
  • diperlukan: modul tersebut harus mengembalikan respons positif. Jika hasil panggilan modul berisi jawaban negatif, ini akan menyebabkan kesalahan otentikasi. Permintaan akan diatur ulang, tetapi modul-modul lainnya akan dipanggil.
  • requisite (wajib): mirip dengan yang disyaratkan, tetapi segera mengarah pada kegagalan otentikasi dan mengabaikan sisa modul.
  • cukup: jika di depan modul seperti itu tidak ada modul yang diperlukan atau cukup mengembalikan hasil negatif, modul akan mengembalikan jawaban positif. Modul yang tersisa akan diabaikan.
  • opsional (opsional): jika tidak ada modul yang diperlukan dalam tumpukan dan tidak ada modul yang memadai mengembalikan hasil positif, maka setidaknya salah satu modul opsional harus mengembalikan jawaban positif.

Isi lengkap file /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




simpan file, lalu jalankan
$ sudo pam-auth-update
di jendela yang muncul, letakkan tanda bintang di dekat Rutoken PAM GOST dan klik OK



8) Periksa pengaturan


Untuk memahami bahwa semuanya sudah dikonfigurasi, tetapi tidak kehilangan kemampuan untuk masuk, masukkan perintah
$ sudo login
Masukkan nama pengguna Anda. Semuanya dikonfigurasi dengan benar jika sistem membutuhkan PIN perangkat.



9) Konfigurasikan kunci komputer saat mengekstraksi token


Paket libpam-pkcs11 termasuk utilitas pkcs11_eventmgr, yang memungkinkan Anda untuk melakukan berbagai tindakan saat peristiwa PKCS # 11 terjadi.
Untuk mengkonfigurasi pkcs11_eventmgr gunakan file konfigurasi: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Untuk berbagai distribusi Linux, perintah yang menyebabkan akun dikunci saat mengeluarkan kartu pintar atau token akan berbeda. Lihat event card_remove .
Contoh file konfigurasi disajikan 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 aplikasi pkcs11_eventmgr ke pkcs11_eventmgr otomatis. Untuk melakukan ini, edit file .bash_profile:
$ nano /home/<_>/.bash_profile
Tambahkan baris pkcs11_eventmgr ke akhir file dan reboot.

Langkah-langkah yang dijelaskan untuk mengonfigurasi sistem operasi dapat digunakan sebagai petunjuk dalam distribusi Linux modern apa pun, termasuk yang domestik.



Kesimpulan


PC Linux menjadi semakin populer di lembaga pemerintah Rusia, dan mengatur otentikasi dua faktor yang andal dalam OS ini tidak selalu mudah. Kami akan senang dengan panduan ini untuk membantu menyelesaikan "masalah kata sandi" dan secara andal melindungi akses ke PC Anda tanpa menghabiskan banyak waktu untuk hal itu.

Source: https://habr.com/ru/post/id461199/


All Articles