ืกืืกืืืืช ืคืฉืืืืช ืืื ื ืืืืืืืืช, ืืื ืืคืฉืจ ืืืืืจ ืกืืกืืืืช ืืืจืืืืช. ืืื ืืขืชืื ืงืจืืืืช ืื ืืืืขืื ืืคืชืง ื ืืืง ืืชืืช ืืืงืืืช ืื ืขื ืืืกื. ืืื ืืืืืื ืฉืกืืกืืืืช ืืืฉืืจื ืืืืื ืฉื ืืฉืชืืฉืื "ืฉืืื ืื" ืืฉืืืื ืืช ืืืื ื ืื ืชืืื, ืืฉ ืืืืืช ืื-ืืืจืื (2FA).
ืืฉื ืืฉืืืื ืฉื ืืขืืืช ืขื ืืืฉืืจ ืืืืจืช ื-PIN ืฉืื, ื-PIN ืขืฆืื ืืืื ืืืืืช ืคืฉืื ืืงื ืืืชืจ ืืืืืจ. ืืืกืจืื ืืช ืืืืจื ืื ืืืงืจืืืืช ืฉื PIN ืืงืืืืื ืขื ืืื ืืจืืฉืช ืืืืืงื ืืคืืืืช ืืืืืืืืช ืขื ืืื ืืก PIN.
ืื ืืกืฃ, ืื ืงืืจื ืืกืืื ืืืืช ืืืฉืืชืืืช ืฉืื ืจืืฆืื ืฉืืื ืืขืืื ืืคื GOST. ืืคืฉืจืืช 2FA ืื ืืื ืืกื ืืืื ืืงืก ืชืืืื. ืื ื ืืชืืื ืืจืืืง.
ืืืืืื PAM
ืืืืืื ืืืืืช ื ืืชื ืื ืืืืืืจ (PAM) ืื ืืืืืืื ืขื API ืกืื ืืจืื ืืืืืขืืช ืฉื ืื ืื ืื ื ืืืืืช ืฉืื ืื ืืืืฉืืืื.
ืื ืืื ืืฉืืจืืช ืืืืืฉืืืื ืฉืืืืืื ืืขืืื ืขื PAM ืงืืืืื ืืืชื ืืืืืืื ืืืฉืชืืฉ ืืื ืืืืืืช ืืฉืชืืฉืื.
ืืคืืขื ืื ืขืืื ืืขืจื ืื: ืคืงืืืช ื-login ืงืืจืืช ื-PAM, ืฉืืืฆืขืช ืืช ืื ืืืืืงืืช ืื ืืจืฉืืช ืืืืฆืขืืช ืืืืืืืื ืืืฆืืื ืื ืืงืืืฅ ืืชืฆืืจื ืืืืืืจื ืืช ืืชืืฆืื ืืคืงืืืช ื-login.
librtpam
ืืืืืื ืฉืคืืชื ืขื ืืื ืืืจืช Aktiv ืืืกืืฃ ืืืืืช ืื-ืืืจืื ืฉื ืืฉืชืืฉืื ืืืืฆืขืืช ืืจืืืกืื ืืืืื ืื ืืกืืืื ื USB ืืืืฆืขืืช ืืคืชืืืช ืืกืืืืจืืื ืืคื ืืกืื ืืจืืื ืืขืืื ืืื ืืืืชืจ ืฉื ืงืจืืคืืืืจืคืื ืืงืืืืช.
ืืื ื ืกืชืื ืขื ืขืืงืจืื ืคืขืืืชื:
- ืืืกืืืื ืืืืกื ืืช ืืืืฉืืจ ืฉื ืืืฉืชืืฉ ืืืืคืชื ืืคืจืื ืฉืื;
- ืืืืฉืืจ ื ืฉืืจ ืืกืคืจืืืช ืืืืช ืฉื ืืืฉืชืืฉ ืืืืื.
ืชืืืื ืืืืืืช ืืชืจืืฉ ืืืืคื ืืื:
- Rutoken ืืืคืฉ ืืช ืืืืฉืืจ ืืืืฉื ืฉื ืืืฉืชืืฉ.
- ื-PIN ืืืกืืืื ืืชืืงืฉ.
- ื ืชืื ืื ืืงืจืืืื ืืชืืืื ืขื ืืืคืชื ืืคืจืื ืืฉืืจืืช ืืฉืื Rutoken.
- ืืืชืืื ืืืชืงืืืช ืืืืืชืช ืืืืฆืขืืช ืืืคืชื ืืฆืืืืจื ืืืืืฉืืจ ืฉื ืืืฉืชืืฉ.
- ืืืืืื ืืืืืจ ืืช ืชืืฆืืช ืืืืืช ืืืชืืื ืืืืฉืื ืืืชืงืฉืจ.
ืืชื ืืืื ืืืืช ืืืืฆืขืืช ืืคืชืืืช GOST R 34.10-2012 (ืืืจื 256 ืื 512 ืกืืืืืช) ืื GOST R 34.10-2001 ืืืืืฉื.
ืืชื ืื ืฆืจืื ืืืืื ืืืื ืืืืืื ืฉื ืืืคืชืืืช - ืื ื ืืฆืจืื ืืฉืืจืืช ื- Rutoken ืืืขืืื ืื ืขืืืืื ืืช ืืืืืจืื ืฉืื ืืืืื ืคืขืืืืช ืงืจืืคืืืืจืคืืืช.
Rutoken EDS 2.0 ืืืืฉืจ ืขื ืืื ื-FSB ืื-FSTEC ืืคื NDV 4, ืืื ื ืืชื ืืืฉืชืืฉ ืื ืืืขืจืืืช ืืืืข ืืืขืืืืช ืืืืข ืกืืื.
ืฉืืืืฉ ืืขืฉื
ืืืขื ืื ืืื ืืงืก ืืืืจื ืืช ืชืชืืื, ืืืฉื ื ืฉืชืืฉ ื-xUbuntu 18.10.
1) ืืชืงื ืืช ืืืืืืืช ืืืจืืฉืืช
sudo apt-get install libccid pcscd opensc
ืื ืืจืฆืื ื ืืืืกืืฃ ื ืขืืืช ืฉืืืื ืขืืืื ืขื ืฉืืืจ ืืกื, ืืชืงื ืืช ืืืืืื ืื ืืกืฃ libpam-pkcs11
.
2) ืืืกืฃ ืืืืื PAM ืขื ืชืืืืช GOST
ืืืขื ืืช ืืกืคืจืืื ื
ืืขืชืง ืืช ืืชืืื ืฉื ืชืืงืืืช PAM librtpam.so.1.0.0 ืืชืืงืืืช ืืืขืจืืช
/usr/lib/
ืื /usr/lib/x86_64-linux-gnu/
ืื /usr/lib64
3) ืืชืงื ืืช ืืืืืื ืขื librtpkcs11ecp.so
ืืืจื ืืืชืงื ืืช ืืืืืช DEB ืื RPM ืืืงืืฉืืจ:
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 ืืืื ืืช ืฉืจืฉืจืืืช ืืืื.
ืืืจื ืืงืื (ืืจื ืืืคืืคื)
ืืงืืืช ืชืขืืืช ืืืื, ืืฉืชืืฉ
ืืจืื ืฉื ืืืืง (ืืจื ืืงืื ืกืืื ืืืืื ืืืืืจ)
ืืืืง ืืช ืืจืกืช OpenSC
$ opensc-tool --version
ืื ืืืจืกื ืืื ืคืืืช ื-0.20, ืื ืขืืื ืื ืื ื
ืฆืืจ ืืื ืืคืชืืืช ืขื ืืคืจืืืจืื ืืืืื:
--key-type: GOSTR3410-2012-512:ะ (ะะะกะข-2012 512 ะฑะธั c ะฟะฐัะฐะผัะตัะพะผ ะ), GOSTR3410-2012-256:A (ะะะกะข-2012 256 ะฑะธั ั ะฟะฐัะฐะผัะตัะพะผ A)
--id:
ืืืื ืืืืืืงื (CKA_ID) ืืืกืคืจื ืชื hex ืื ืกืคืจืชืืื ืืืืืช ASCII. ืืฉืชืืฉ ืจืง ืืงืืื ASCII ืขืืืจ ืชืืืื ืื ืืชื ืื ืืืืคืกื, ืื... id ืืืื ืฆืืจื ืืืขืืืจ ื-OpenSSL ืืืืจืืืช. ืืืืืื, ืงืื ASCII "3132" ืืชืืื ืืืืจืืืช "12". ืื ืืืืช, ืืชื ืืืื ืืืฉืชืืฉ
$ ./pkcs11-tool --module /usr/lib/librtpkcs11ecp.so --keypairgen --key-type GOSTR3410-2012-512:A -l --id 3132
ืืฉืื ืืื ื ืืฆืืจ ืชืขืืื. ืฉืชื ืืจืืื ืืชืืืจื ืืืื: ืืจืืฉืื ื ืืื ืืืืฆืขืืช CA (ื ืฉืชืืฉ ื-CAs ืืืื), ืืฉื ืืื ืืืชืืื ืขืฆืืืช. ืืื ืืขืฉืืช ืืืช, ืชืืืื ืขืืื ืืืชืงืื ืืืืืืืจ ืืช OpenSSL ืืจืกื 1.1 ืืืืื ืืขืืื ืขื Rutoken ืืืืฆืขืืช ืืืืื rtengine ืืืืื ืืืืฆืขืืช ืืืืจืื
ืืืืืื: ืขืืืจ '--id 3132
' ื-OpenSSL ืืชื ืฆืจืื ืืฆืืื "pkcs11:id=12
".
ืืชื ืืืื ืืืฉืชืืฉ ืืฉืืจืืชืื ืฉื CA ืืืืงื, ืฉืืฉ ืืจืื ืืื, ืืืฉื,
ืืคืฉืจืืช ื ืืกืคืช ืืื ืืืืื ืข ืืขืฆืื ืืช ืืืืฆืืจ ืืชืืื ืขืฆืืืช
$ 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:
ืื ืืชืขืืื ืฉืื ื ืจืืืช ืื:
ืื ืืชื ืฆืจืื ืืืืืจ ืืช ืืืืฉืืจ ืืคืืจืื 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
ืืืืื ืืช ืืฉื ืืืื ืฉื ืืืืืื, ืืื ืื ืืื ืืืคืขื ืืืจืืจืช ืืืื, ืขืืืคืืช ืืืืืื ืืคืจืืืจื ืืืืืช.
ืคืจืืืจื ืืืืืืช ืืืืืื ืืจืืฉืืช ืืืฆืืืช ืืคืขืืื:
- ื ืืจืฉ: ืืืืืืื ืืืื ืืืืืื ืืืืืืจ ืชืืืื ืืืืืืช. ืื ืืชืืฆืื ืฉื ืงืจืืืช ืืืืื ืืืืื ืชืืืื ืฉืืืืืช, ืืืืจ ืืืจืื ืืฉืืืืช ืืืืืช. ืืืงืฉื ืชืืืื, ืื ืฉืืจ ืืืืืืืื ืืืงืจืื.
- ื ืืจืฉ: ืืืื ืื ืืจืฉ, ืื ื ืืฉื ืืื ืืืืืืช ืืืชืขืื ืืืืืืืื ืืืจืื.
- ืืกืคืืง: ืื ืืฃ ืืื ืืืืืืืืื ืื ืืจืฉืื ืื ืืืกืคืืงืื ืืคื ื ืืืืื ืืื ืื ืืืืืจ ืชืืฆืื ืฉืืืืืช, ืื ืืืืืื ืืืืืจ ืชืืืื ืืืืืืช. ืืชืขืืื ืืืืืืืืื ืื ืืชืจืื.
- ืืืคืฆืืื ืื: ืื ืืื ืืืืืืื ื ืืจืฉืื ืืขืจืืื ืืืฃ ืืื ืืืืืืืืื ืืืกืคืืงืื ืื ืืืืืจ ืชืืฆืื ืืืืืืช, ืื ืืคืืืช ืืื ืืืืืืืืื ืืืืคืฆืืื ืืืื ืืืื ืืืืืืจ ืชืืฆืื ืืืืืืช.
ืชืืื ืืงืืืฅ ืืืื /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
ืฉืืืจ ืืช ืืงืืืฅ ืืืืืจ ืืื ืืฆืข
$ sudo pam-auth-update
ืืืืื ืฉืืืคืืข, ืฉืื ืืืืืืช ืืืื Rutoken PAM GOST ืืืืฅ OK
8) ืืืืง ืืช ืืืืืจืืช
ืืื ืืืืื ืฉืืื ืืืืืจ, ืืื ืืืืชื ืืื ืื ืืืื ืืช ืืืืืืช ืืืืื ืก ืืืขืจืืช, ืืื ืืช ืืคืงืืื
$ sudo login
ืืื ืก ืฉื ืืฉืชืืฉ. ืืื ืืืืืจ ืืืืื ืื ืืืขืจืืช ืืืจืฉืช ืงืื PIN ืฉื ืืชืงื.
9) ืืืืจ ืืช ืืืืฉื ืื ืฉืืืืกื ืืขืช ืืืืืฅ ืืืกืืืื
ืืืื ืืืืืื libpam-pkcs11
ืฉืืจืืช ืืืื pkcs11_eventmgr,
ืืืืคืฉืจ ืื ืืืฆืข ืคืขืืืืช ืฉืื ืืช ืืืฉืจ ืืชืจืืฉืื ืืืจืืขื PKCS#11.
ืืืืืจืืช pkcs11_eventmgr
ืืฉืืฉ ืืงืืืฅ ืชืฆืืจื: /etc/pam_pkcs11/pkcs11_eventmgr.conf
ืขืืืจ ืืคืฆืืช ืืื ืืงืก ืฉืื ืืช, ืืคืงืืื ืฉืืืจืืช ืืืฉืืื ืืืื ืขื ืืขืช ืืกืจืช ืืจืืืก ืืื ืื ืืกืืืื ืชืืื ืฉืื ื. ืก"ื. 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 ืืืคืืื ืคืืคืืืจืืื ืืืชืจ ืืืืชืจ ืืกืืื ืืืืช ืืืฉืืชืืืช ืืจืืกืื, ืืืืืจืช ืืืืืช ืื-ืืืจืื ืืืื ืืืขืจืืช ืืคืขืื ืื ืืื ื ืชืืื ืงืื. ื ืฉืื ืืขืืืจ ืื ืืคืชืืจ ืืช "ืืขืืืช ืืกืืกืื" ืืืืฆืขืืช ืืืจืื ืื ืืืืื ืืฆืืจื ืืืืื ื ืขื ืืืืฉื ืืืืฉื ืืืืฉื ืฉืื ืืืื ืืืืื ืขื ืื ืืื ืจื.
ืืงืืจ: www.habr.com