
Oddiy parollar xavfsiz emas va murakkab parollarni eslab qolish mumkin emas. Shuning uchun ular tez-tez klaviatura yoki monitor ostidagi yopishqoq yozuvga tushadilar. Parollar "unutuvchi" foydalanuvchilarning ongida qolishi va himoyaning ishonchliligi yo'qolmasligi uchun ikki faktorli autentifikatsiya (2FA) mavjud.
Qurilmaga egalik qilish va uning PIN-kodini bilish kombinatsiyasi tufayli PIN-kodning o'zi sodda va eslab qolish osonroq bo'lishi mumkin. PIN-kod uzunligi yoki tasodifiyligidagi kamchiliklar jismoniy egalik talabi va PIN-kodning qo'pol kuchiga cheklovlar bilan qoplanadi.
Bundan tashqari, davlat idoralarida hamma narsa GOST bo'yicha ishlashini xohlashlari sodir bo'ladi. Linuxga kirish uchun ushbu 2FA varianti muhokama qilinadi. Men uzoqdan boshlayman.
PAM modullari
Pluggable autentifikatsiya modullari (PAM) standart API va ilovalarda turli autentifikatsiya mexanizmlarini amalga oshirishga ega modullardir.
PAM bilan ishlay oladigan barcha yordamchi dasturlar va ilovalar ularni tanlab oladi va ulardan foydalanuvchi autentifikatsiyasi uchun foydalanishi mumkin.
Amalda, u shunday ishlaydi: login buyrug'i PAMni chaqiradi, u konfiguratsiya faylida ko'rsatilgan modullar yordamida barcha kerakli tekshiruvlarni amalga oshiradi va natijani login buyrug'iga qaytaradi.
librtpam
Aktiv kompaniyasi tomonidan ishlab chiqilgan modul mahalliy kriptografiyaning eng so'nggi standartlariga muvofiq assimetrik kalitlardan foydalangan holda smart-kartalar yoki USB tokenlar yordamida foydalanuvchilarning ikki faktorli autentifikatsiyasini qo'shadi.
Keling, uning ishlash printsipini ko'rib chiqaylik:
- Token foydalanuvchi sertifikati va uning shaxsiy kalitini saqlaydi;
- Sertifikat foydalanuvchining uy katalogida ishonchli sifatida saqlanadi.
Autentifikatsiya jarayoni quyidagicha amalga oshiriladi:
- Rutoken foydalanuvchining shaxsiy sertifikatini qidiradi.
- Token PIN-kodi soβraladi.
- Tasodifiy ma'lumotlar Rutoken chipida shaxsiy kalitda imzolanadi.
- Olingan imzo foydalanuvchi sertifikatidagi ochiq kalit yordamida tekshiriladi.
- Modul imzoni tekshirish natijasini chaqiruvchi ilovaga qaytaradi.
Siz GOST R 34.10-2012 kalitlari (uzunligi 256 yoki 512 bit) yoki eskirgan GOST R 34.10-2001 yordamida autentifikatsiya qilishingiz mumkin.
Kalitlarning xavfsizligi haqida tashvishlanishingiz shart emas - ular to'g'ridan-to'g'ri Rutoken-da yaratiladi va kriptografik operatsiyalar paytida uning xotirasini hech qachon tark etmaydi.

Rutoken EDS 2.0 NDV 4 ga muvofiq FSB va FSTEC tomonidan sertifikatlangan, shuning uchun uni maxfiy ma'lumotlarni qayta ishlaydigan axborot tizimlarida qo'llash mumkin.
Amaliy foydalanish
Deyarli har qanday zamonaviy Linux mos keladi, masalan, biz x dan foydalanamizUbuntu 18.10.
1) Kerakli paketlarni o'rnating
sudo apt-get install libccid pcscd opensc
Agar siz ekran pardasi bilan ish stoli blokirovkasini qo'shmoqchi bo'lsangiz, paketni qo'shimcha ravishda o'rnating libpam-pkcs11.
2) GOST qo'llab-quvvatlashi bilan PAM modulini qo'shing
Kutubxona yuklanmoqda
librtpam.so.1.0.0 PAM jildining tarkibini tizim papkasiga nusxalash
/usr/lib/ yoki /usr/lib/x86_64-linux-gnu/yoki /usr/lib64
3) Paketni librtpkcs11ecp.so bilan o'rnating
DEB yoki RPM paketini havoladan yuklab oling va o'rnating:
4) Rutoken EDS 2.0 tizimda ishlashini tekshiring
Terminalda biz bajaramiz
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -T
Agar siz chiziqni ko'rsangiz Rutoken ECP <no label> - bu hammasi joyida degani.
5) Sertifikatni o'qing
Qurilmada sertifikat borligini tekshirish
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -O
Agar qatordan keyin:
Using slot 0 with a present token (0x0)
- ma'lumotlar ko'rsatiladi kalitlar va sertifikatlar haqida siz sertifikatni o'qib chiqishingiz va uni diskda saqlashingiz kerak. Buni amalga oshirish uchun quyidagi buyruqni bajaring, bu erda {id} o'rniga oldingi buyruqning chiqishida ko'rgan sertifikat identifikatorini almashtirishingiz kerak:
$ pkcs11-tool --module /usr/lib/librtpkcs11ecp.so -r -y cert --id {id} --output-file cert.crt
Agar cert.crt fayli yaratilgan bo'lsa, 6-bosqichga o'ting). - hech narsa mavjud emas, keyin qurilma bo'sh. Administratoringizga murojaat qiling yoki keyingi bosqichga amal qilib, kalit va sertifikatni oΚ»zingiz yarating.
5.1) Test sertifikatini yaratish
Diqqat! Kalitlar va sertifikatlarni yaratishning tavsiflangan usullari sinov uchun mos va jangovar rejimda foydalanish uchun mo'ljallanmagan. Buning uchun tashkilotingizning ishonchli sertifikatlashtirish organi yoki akkreditatsiyalangan sertifikatlashtirish organi tomonidan berilgan kalit va sertifikatlardan foydalanishingiz kerak.
PAM moduli mahalliy kompyuterlarni himoya qilish uchun mo'ljallangan va kichik tashkilotlarda ishlash uchun mo'ljallangan. Foydalanuvchilar kam bo'lganligi sababli, Administrator sertifikatlarning bekor qilinishini kuzatishi va hisoblarni qo'lda blokirovka qilish, shuningdek sertifikatlarning amal qilish muddatini kuzatishi mumkin. PAM moduli CRL yordamida sertifikatlarni qanday tekshirishni va ishonch zanjirlarini yaratishni hali bilmaydi.
Oson yo'l (brauzer orqali)
Sinov sertifikatini olish uchun foydalaning . Jarayon 5 daqiqadan ko'proq vaqtni oladi.
Geekning yo'li (konsol va ehtimol kompilyator orqali)
OpenSC versiyasini tekshiring
$ opensc-tool --version
Agar versiya 0.20 dan kam bo'lsa, yangilang yoki yarating bizning GitHub-dan (ushbu maqola nashr etilganda, 0.20 versiyasi hali chiqarilmagan) yoki asosiy OpenSC loyihasining asosiy filialidan kechiktirmasdan.
Quyidagi parametrlar bilan kalit juftligini yarating:
--key-type: GOSTR3410-2012-512:Π (ΠΠΠ‘Π’-2012 512 Π±ΠΈΡ c ΠΏΠ°ΡΠ°ΠΌΡΠ΅ΡΠΎΠΌ Π), GOSTR3410-2012-256:A (ΠΠΠ‘Π’-2012 256 Π±ΠΈΡ Ρ ΠΏΠ°ΡΠ°ΠΌΡΠ΅ΡΠΎΠΌ A)
--id: ob'ekt identifikatori (CKA_ID) ASCII jadvalidagi ikki xonali olti burchakli belgilar raqamlari sifatida. Chop etiladigan belgilar uchun faqat ASCII kodlaridan foydalaning, chunki... identifikator OpenSSL ga string sifatida uzatilishi kerak. Masalan, "3132" ASCII kodi "12" qatoriga mos keladi. Qulaylik uchun siz foydalanishingiz mumkin .
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
Keyinchalik biz sertifikat yaratamiz. Quyida ikkita usul tasvirlanadi: birinchisi CA orqali (biz test CAlaridan foydalanamiz), ikkinchisi o'z-o'zidan imzolanadi. Buni amalga oshirish uchun siz avval Rutoken bilan ishlash uchun OpenSSL 1.1 yoki undan keyingi versiyasini qo'llanma yordamida maxsus rtengine moduli orqali o'rnatishingiz va sozlashingiz kerak. .
Masalan: '- uchun-id 3132' OpenSSL'da siz belgilashingiz kerak "pkcs11:id=12".
Siz test CA xizmatlaridan foydalanishingiz mumkin, ularning ko'plari, masalan, , ΠΈ , buning uchun biz sertifikat uchun so'rov yaratamiz
Yana bir variant - dangasalikka berilish va o'z-o'zidan imzo qo'yishdir
$ openssl req -utf8 -new -keyform engine -key "pkcs11:id=12" -engine rtengine -out req.csr
Sertifikat qurilmaga yuklanmoqda
$ openssl req -utf8 -x509 -keyform engine -key "pkcs11:id=12" -engine rtengine -out cert.cer
6) Sertifikatni tizimda ro'yxatdan o'tkazing
Sertifikatingiz base64 fayliga o'xshashligiga ishonch hosil qiling:

Agar sizning sertifikatingiz quyidagicha ko'rinsa:

keyin siz sertifikatni DER formatidan PEM formatiga (base64) aylantirishingiz kerak.
$ openssl x509 -in cert.crt -out cert.pem -inform DER -outform PEM
Hozir hamma narsa tartibda ekanligini yana bir bor tekshiramiz.
Sertifikatni ishonchli sertifikatlar ro'yxatiga qo'shing
$ mkdir ~/.eid
$ chmod 0755 ~/.eid
$ cat cert.pem >> ~/.eid/authorized_certificates
$ chmod 0644 ~/.eid/authorized_certificates
Oxirgi qator ishonchli sertifikatlar ro'yxatini boshqa foydalanuvchilar tomonidan tasodifiy yoki ataylab o'zgartirishdan himoya qiladi. Bu kimningdir sertifikatini bu yerga qoβshishiga va sizning nomingizdan tizimga kirishiga toβsqinlik qiladi.
7) Autentifikatsiyani sozlang
PAM modulimizni o'rnatish butunlay standart va boshqa modullarni o'rnatish bilan bir xil tarzda amalga oshiriladi. Faylga yaratish /usr/share/pam-configs/rutoken-gost-pam modulning to'liq nomini, sukut bo'yicha yoqilganligini, modulning ustuvorligini va autentifikatsiya parametrlarini o'z ichiga oladi.
Autentifikatsiya parametrlari operatsiyaning muvaffaqiyati uchun talablarni o'z ichiga oladi:
- zarur: Bunday modullar ijobiy javob qaytarishi kerak. Agar modul chaqiruvining natijasi salbiy javobni o'z ichiga olsa, bu autentifikatsiya xatosiga olib keladi. So'rov bekor qilinadi, ammo qolgan modullar chaqiriladi.
- rekvizit: talab qilinganga o'xshaydi, lekin darhol autentifikatsiyadan o'tmaydi va boshqa modullarga e'tibor bermaydi.
- etarli: Agar bunday moduldan oldin kerakli yoki etarli modullardan hech biri salbiy natija bermasa, modul ijobiy javob qaytaradi. Qolgan modullar e'tiborga olinmaydi.
- ixtiyoriy: Agar stekda kerakli modullar bo'lmasa va yetarli modullarning hech biri ijobiy natija bermasa, ixtiyoriy modullardan kamida bittasi ijobiy natija berishi kerak.
To'liq fayl mazmuni /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

faylni saqlang, keyin bajaring
$ sudo pam-auth-update
paydo bo'lgan oynada uning yoniga yulduzcha qo'ying Rutoken PAM GOST va bosing OK

8) Sozlamalarni tekshiring
Hamma narsa sozlanganligini tushunish uchun, lekin shu bilan birga tizimga kirish qobiliyatini yo'qotmaslik uchun buyruqni kiriting.
$ sudo login
Foydalanuvchi nomingizni kiriting. Tizim qurilma PIN kodini talab qilsa, hamma narsa to'g'ri sozlangan.

9) Token chiqarilganda blokirovka qilinadigan kompyuterni sozlang
Paketga kiritilgan libpam-pkcs11 yordamchi dastur kiritilgan pkcs11_eventmgr, PKCS # 11 hodisalari sodir bo'lganda turli harakatlarni amalga oshirish imkonini beradi.
Sozlamalar uchun pkcs11_eventmgr konfiguratsiya fayli sifatida xizmat qiladi: /etc/pam_pkcs11/pkcs11_eventmgr.conf
Turli xil Linux distributivlari uchun smart-karta yoki token olib tashlanganida hisobni blokirovka qilishga olib keladigan buyruq boshqacha bo'ladi. Sm. event card_remove.
Misol konfiguratsiya fayli quyida ko'rsatilgan:
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";
}
}
Shundan so'ng dasturni qo'shing pkcs11_eventmgr ishga tushirish uchun. Buning uchun .bash_profile faylini tahrirlang:
$ nano /home/<ΠΈΠΌΡ_ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ>/.bash_profile
Faylning oxiriga pkcs11_eventmgr qatorini qo'shing va qayta ishga tushiring.
Operatsion tizimni sozlash bo'yicha tavsiflangan bosqichlar har qanday zamonaviy distributivda ko'rsatmalar sifatida ishlatilishi mumkin. Linux, shu jumladan, mahalliy.

xulosa
Kompyuter bilan Linux Rossiya davlat idoralarida tobora ommalashib bormoqda, ammo ushbu operatsion tizimda xavfsiz ikki faktorli autentifikatsiyani o'rnatish har doim ham oson emas. Ushbu qo'llanma yordamida sizga "parol muammosi"ni hal qilishda va ko'p vaqt sarflamasdan kompyuteringizga kirishni xavfsiz himoya qilishda yordam berishdan mamnun bo'lamiz.
Manba: www.habr.com
