ΠΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ΅Π΄Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π²ΡΠ΅ ΡΠ°ΡΠ΅ ΠΈ ΡΠ°ΡΠ΅, Π½Π΅ Π²Π°ΠΆΠ½ΠΎ, Π±ΡΠ΄Ρ ΡΠΎ ΡΠ²ΠΎΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡΠ½Π΅ΡΡ, ΠΊΠΎΡΠΎΡΡΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠΎΠΌΡ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΌΡ ΡΠ΅ΡΠ²Π΅ΡΡ Π² Π²Π°ΡΠ΅ΠΉ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠ»Ρ ΡΡΠΈΡ ΡΠ΅Π»Π΅ΠΉ, Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ VPN, Π·Π°ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π²ΡΡΡ ΡΠ΅Π±Ρ, ΠΊΠ°ΠΊ Π½Π°Π΄Π΅ΠΆΠ½ΠΎ Π·Π°ΡΠΈΡΠ΅Π½Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌ ΡΠ΅ΡΡΡΡΠ°ΠΌ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ.
ΠΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Π½Π΅ ΡΡΠ°Π»Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ, ΠΈ ΠΌΡ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅, ΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠΎΠΉ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠ΅ΠΉ. Π, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ, Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ»ΡΠ·Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎΡΡΡΠΏΠ° β Cisco ASA 55xx.
ΠΡΠΈ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΄Π°Π»Π΅Π½Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎΡΡΡ Π² ΠΎΠ±Π»Π΅Π³ΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ Π²ΡΠ΄Π°ΡΠΈ ΡΡΠ΅ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ . ΠΠΎ Π² ΡΠΎ ΠΆΠ΅ Π²ΡΠ΅ΠΌΡ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π½Π΅ Π² ΡΡΠ΅ΡΠ± Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ.
ΠΠ»Ρ ΡΠ΅Π±Ρ ΠΌΡ Π½Π°ΡΠ»ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π΄Π²ΡΡ ΡΠ°ΠΊΡΠΎΡΠ½ΠΎΠΉ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ Cisco SSL VPN, Ρ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΡ ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ. Π ΡΡΠ° ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΡ ΡΠ°ΡΡΠΊΠ°ΠΆΠ΅Ρ, ΠΊΠ°ΠΊ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΌΠΈ Π·Π°ΡΡΠ°ΡΠ°ΠΌΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΈ Ρ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ Π·Π°ΡΡΠ°ΡΠ°ΠΌΠΈ Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠΉ ΡΠΎΡΡ (Ρ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ, ΡΡΠΎ Cisco ASA Π² Π²Π°ΡΠ΅ΠΉ ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΡΡΡ).
Π ΡΠ½ΠΎΠΊ ΠΈΠ·ΠΎΠ±ΠΈΠ»ΡΠ΅Ρ ΠΊΠΎΡΠΎΠ±ΠΎΡΠ½ΡΠΌΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΡ
ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ ΠΌΠ°ΡΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΠΎ ΠΈΡ
ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ, Π±ΡΠ΄Ρ ΡΠΎ ΠΎΡΡΡΠ»ΠΊΠ° ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ SMS ΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΎΠΊΠ΅Π½ΠΎΠ², ΠΊΠ°ΠΊ Β«ΠΆΠ΅Π»Π΅Π·Π½ΡΡ
Β», ΡΠ°ΠΊ ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ
(ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΠΎΠΌ ΡΠ΅Π»Π΅ΡΠΎΠ½Π΅). ΠΠΎ ΡΡΠ³Π° ΠΊ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΠΈ ΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅ ΡΠ±Π΅ΡΠ΅ΡΡ Π΄Π΅Π½Π΅Π³ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΡΠ°Π±ΠΎΡΠΎΠ΄Π°ΡΠ΅Π»Ρ, Π² ΡΡΠ»ΠΎΠ²ΠΈΡΡ
Π½ΡΠ½Π΅ΡΠ½Π΅Π³ΠΎ ΠΊΡΠΈΠ·ΠΈΡΠ° Π·Π°ΡΡΠ°Π²ΠΈΠ»ΠΈ ΠΌΠ΅Π½Ρ Π½Π°ΠΉΡΠΈ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ ΠΏΠΎ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΡ
ΠΏΠ°ΡΠΎΠ»Π΅ΠΉ. ΠΠΎΡΠΎΡΡΠΉ, ΠΏΡΠΈ ΡΠ²ΠΎΠ΅ΠΉ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΡΡΠΈ, ΠΌΠ°Π»ΠΎ ΡΠ΅ΠΌ ΡΡΡΡΠΏΠ°Π΅Ρ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌ (ΡΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΡΡΡΡ, ΠΎΡΠΌΠ΅ΡΠΈΠ², ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΈΠΌΠ΅Π΅Ρ ΠΈ ΠΊΠΎΠΌΠΌΠ΅ΡΡΠ΅ΡΠΊΡΡ Π²Π΅ΡΡΠΈΡ, Π½ΠΎ ΠΌΡ ΠΆΠ΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈΡΡ, ΡΡΠΎ Π·Π°ΡΡΠ°ΡΡ, Π² Π΄Π΅Π½ΡΠ³Π°Ρ
, Ρ Π½Π°Ρ Π±ΡΠ΄ΡΡ Π½ΡΠ»Π΅Π²ΡΠΌΠΈ).
ΠΡΠ°ΠΊ, Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΡΡΡΡ:
β ΠΠ±ΡΠ°Π· Linux ΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ Π½Π°Π±ΠΎΡΠΎΠΌ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠΎΠ² β multiOTP, FreeRADIUS ΠΈ nginx, Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ ΠΏΠΎ Π²Π΅Π± (http://download.multiotp.net/ β Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π³ΠΎΡΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ VMware)
β Π‘Π΅ΡΠ²Π΅Ρ Active Directory
β Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Cisco ASA (Ρ, Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ASDM)
β ΠΡΠ±ΠΎΠΉ ΡΠΎΡΡΠ²Π΅ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½, ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ TOTP (Π―, ΠΊ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Google Authenticator, Π½ΠΎ ΠΏΠΎΠ΄ΠΎΠΉΠ΄Π΅Ρ ΡΠΎΡ ΠΆΠ΅ FreeOTP)
ΠΠ΅ ΡΡΠ°Π½Ρ Π²Π΄Π°Π²Π°ΡΡΡΡ Π² ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΠ°Π·Π°. ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ Π²Ρ ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Debian Linux Ρ ΡΠΆΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌΠΈ multiOTP ΠΈ FreeRADIUS, Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Π² ΡΠ²ΡΠ·ΠΊΠ΅ ΠΈ web-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½ΠΈΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ OTP.
Π¨Π°Π³ 1. ΠΠ½ΠΈΡΠΈΠΈΡΡΠ΅ΠΌ ΡΠΈΡΡΠ΅ΠΌΡ ΠΈ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ΄ ΡΠ²ΠΎΡ ΡΠ΅ΡΡ
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΡΡΠ΅ΡΠ½ΡΠΌΠΈ Π΄Π°Π½Π½ΡΠΌΠΈ root root. ΠΡΠΌΠ°Ρ, Π²ΡΠ΅ Π΄ΠΎΠ³Π°Π΄Π°Π»ΠΈΡΡ, ΡΡΠΎ Π½Π΅ΠΏΠ»ΠΎΡ
ΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ root, ΠΏΠΎΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π»ΠΎΠ³ΠΈΠ½Π°. Π’Π°ΠΊ ΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ΅Π½ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΡΠ΅ΡΠΈ (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ‘192.168.1.44’ c ΡΠ»ΡΠ·ΠΎΠΌ ‘192.168.1.1’). ΠΠΎΡΠ»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°Π³ΡΡΠ·ΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ.
Π Active Directory ΡΠΎΠ·Π΄Π°Π΄ΠΈΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ otp, Ρ ΠΏΠ°ΡΠΎΠ»Π΅ΠΌ MySuperPassword.
Π¨Π°Π³ 2. ΠΠ°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Active Directory
ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ Π½Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ Π΄ΠΎΡΡΡΠΏ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ, ΠΈ, Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΡΠ°ΠΉΠ» multiotp.php, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π½Π°ΡΡΡΠΎΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Active Directory.
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠΌ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ /usr/local/bin/multiotp/ ΠΈ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
./multiotp.php -config default-request-prefix-pin=0
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π»ΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ (ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎΠ³ΠΎ) ΠΏΠΈΠ½Π° ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΈΠ½Π° (0 ΠΈΠ»ΠΈ 1)
./multiotp.php -config default-request-ldap-pwd=0
ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π»ΠΈ Π²Π²ΠΎΠ΄ Π΄ΠΎΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΡΠΈ Π²Π²ΠΎΠ΄Π΅ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΈΠ½Π° (0 ΠΈΠ»ΠΈ 1)
./multiotp.php -config ldap-server-type=1
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΈΠΏ LDAP-ΡΠ΅ΡΠ²Π΅Ρ (0 = ΠΎΠ±ΡΡΠ½ΡΠΉ LDAP-ΡΠ΅ΡΠ²Π΅Ρ, Π² Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ 1 = Active Directory)
./multiotp.php -config ldap-cn-identifier="sAMAccountName"
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (Π΄Π°Π½Π½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ²Π΅Π΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΡ, Π±Π΅Π· Π΄ΠΎΠΌΠ΅Π½Π°)
./multiotp.php -config ldap-group-cn-identifier="sAMAccountName"
Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ Π³ΡΡΠΏΠΏΡ
./multiotp.php -config ldap-group-attribute="memberOf"
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊ Π³ΡΡΠΏΠΏΠ΅
./multiotp.php -config ldap-ssl=1
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π»ΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ LDAP-ΡΠ΅ΡΠ²Π΅ΡΡ (ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ β Π΄Π°!)
./multiotp.php -config ldap-port=636
ΠΠΎΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ LDAP-ΡΠ΅ΡΠ²Π΅ΡΡ
./multiotp.php -config ldap-domain-controllers=adSRV.domain.local
ΠΠ΄ΡΠ΅Ρ Π²Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Active Directory
./multiotp.php -config ldap-base-dn="CN=Users,DC=domain,DC=local"
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ, ΠΎΡΠΊΡΠ΄Π° Π½Π°ΡΠΈΠ½Π°ΡΡ ΠΏΠΎΠΈΡΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π² Π΄ΠΎΠΌΠ΅Π½Π΅
./multiotp.php -config ldap-bind-dn="[email protected]"
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΅ΡΡΡ ΠΏΡΠ°Π²Π° ΠΏΠΎΠΈΡΠΊΠ° Π² Active Directory
./multiotp.php -config ldap-server-password="MySuperPassword"
Π£ΠΊΠ°Π·ΡΠ²Π°Π΅ΠΌ ΠΏΠ°ΡΠΎΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Active Directory
./multiotp.php -config ldap-network-timeout=10
ΠΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ°ΠΉΠΌΠ°ΡΡ Π΄Π»Ρ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Active Directory
./multiotp.php -config ldap-time-limit=30
ΠΡΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΈΠΌΠΏΠΎΡΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ
./multiotp.php -config ldap-activated=1
ΠΠΊΡΠΈΠ²ΠΈΡΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Active Directory
./multiotp.php -debug -display-log -ldap-users-sync
ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ ΠΈΠΌΠΏΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΠ· Active Directory
Π¨Π°Π³ 3. ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌ QR-ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠΊΠ΅Π½Π°
ΠΠ΄Π΅ΡΡ Π²ΡΠ΅ ΠΏΡΠ΅Π΄Π΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΡΠΎ. ΠΡΠΊΡΡΠ²Π°Π΅ΠΌ Π²Π΅Π±-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΠ’Π-ΡΠ΅ΡΠ²Π΅ΡΠ° Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅, Π»ΠΎΠ³ΠΈΠ½ΠΈΠΌΡΡ (Π½Π΅ Π·Π°Π±ΡΠ²Π°Π΅ΠΌ ΡΠΌΠ΅Π½ΠΈΡΡ ΠΏΠ°ΡΠΎΠ»Ρ Π΄Π»Ρ Π°Π΄ΠΌΠΈΠ½Π°, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ!), ΠΈ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡ Β«PrintΒ»:
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ ΡΡΠΎΠ³ΠΎ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π±ΡΠ΄Π΅Ρ ΡΡΡΠ°Π½ΠΈΡΠ°, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡΡΡ Π΄Π²Π° QR-ΠΊΠΎΠ΄Π°. ΠΡ ΡΠΌΠ΅Π»ΠΎ Π·Π°Π±ΠΈΠ²Π°Π΅ΠΌ Π½Π° ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈΠ· Π½ΠΈΡ
(Π½Π΅ ΡΠΌΠΎΡΡΡ Π½Π° ΠΏΡΠΈΠ²Π»Π΅ΠΊΠ°ΡΠ΅Π»ΡΠ½ΡΡ Π½Π°Π΄ΠΏΠΈΡΡ Google Authenticator / Authenticator / 2 Steps Authenticator), ΠΈ ΠΎΠΏΡΡΡ ΠΆΠ΅ ΡΠΌΠ΅Π»ΠΎ ΡΠΊΠ°Π½ΠΈΡΡΠ΅ΠΌ Π²ΡΠΎΡΠΎΠΉ ΠΊΠΎΠ΄ Π² ΡΠΎΡΡΠ²Π΅ΡΠ½ΡΠΉ ΡΠΎΠΊΠ΅Π½ Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π΅:
(Π΄Π°, Ρ Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΠΎ ΠΏΠΎΠ΄ΠΏΠΎΡΡΠΈΠ» QR-ΠΊΠΎΠ΄, ΡΡΠΎΠ± ΡΠ΄Π΅Π»Π°ΡΡ Π΅Π³ΠΎ Π½Π΅ΡΠΈΡΠ°Π±Π΅Π»ΡΠ½ΡΠΌ).
ΠΠΎΡΠ»Π΅ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ Ρ Π²Π°Ρ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΊΠ°ΠΆΠ΄ΡΠ΅ ΡΡΠΈΠ΄ΡΠ°ΡΡ ΡΠ΅ΠΊΡΠ½Π΄, Π½Π°ΡΠ½Π΅Ρ Π³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΡΠ΅ΡΡΠΈΡΠΈΡΠ΅ΡΠ½ΡΠΉ ΠΏΠ°ΡΠΎΠ»Ρ.
ΠΠ»Ρ Π²Π΅ΡΠ½ΠΎΡΡΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ΅:
ΠΠ±ΠΈΠ² ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΈ ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ ΠΏΠ°ΡΠΎΠ»Ρ ΠΈΠ· ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π΅. ΠΠΎΠ»ΡΡΠΈΠ»ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ? ΠΠ½Π°ΡΠΈΡ Π΄Π²ΠΈΠ³Π°Π΅ΠΌΡΡ Π΄Π°Π»ΡΡΠ΅.
Π¨Π°Π³ 4. ΠΠΎΠ½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌ ΠΈ ΡΠ΅ΡΡΠΈΡΡΠ΅ΠΌ ΡΠ°Π±ΠΎΡΡ FreeRADIUS
ΠΠ°ΠΊ Ρ ΡΠΏΠΎΠΌΠΈΠ½Π°Π» Π²ΡΡΠ΅ β multiOTP ΡΠΆΠ΅ Π½Π°ΡΡΡΠΎΠ΅Π½ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ FreeRADIUS, Π½Π° ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΡΠ΅ΡΡΡ ΠΈ Π²Π½Π΅ΡΡΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ°ΠΉΠ» FreeRADIUS ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π½Π°ΡΠ΅ΠΌ VPN-ΡΠ»ΡΠ·Π΅.
ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΡ Π² ΠΊΠΎΠ½ΡΠΎΠ»Ρ ΡΠ΅ΡΠ²Π΅ΡΠ°, Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ /usr/local/bin/multiotp/, Π²Π²ΠΎΠ΄ΠΈΠΌ:
./multiotp.php -config debug=1
./multiotp.php -config display-log=1
ΠΠΊΠ»ΡΡΠ°Ρ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ Π»ΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
Π ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² FreeRADIUS (/etc/freeradius/clinets.conf) ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΡΠ΅ΠΌ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΎΡΠ½ΠΎΡΡΡΠΈΠ΅ΡΡ ΠΊ localhost ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π΄Π²Π΅ Π·Π°ΠΏΠΈΡΠΈ:
client localhost {
ipaddr = 127.0.0.1
secret = testing321
require_message_authenticator = no
}
β Π΄Π»Ρ ΡΠ΅ΡΡΠ°
client 192.168.1.254/32 {
shortname = CiscoASA
secret = ConnectToRADIUSSecret
}
β Π΄Π»Ρ Π½Π°ΡΠ΅Π³ΠΎ VPN-ΡΠ»ΡΠ·Π°.
ΠΠ΅ΡΠ΅Π·Π°ΠΏΡΡΠΊΠ°Π΅ΠΌ FreeRADIUS ΠΈ ΠΏΡΠΎΠ±ΡΠ΅ΠΌ Π°Π²ΡΠΎΡΠΈΠ·ΠΎΠ²Π°ΡΡΡΡ:
radtest username 100110 localhost 1812 testing321
Π³Π΄Π΅ username = ΠΈΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, 100110 = ΠΏΠ°ΡΠΎΠ»Ρ, Π²ΡΠ΄Π°Π½Π½ΡΠΉ Π½Π°ΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π΅, localhost = Π°Π΄ΡΠ΅Ρ RADIUS-ΡΠ΅ΡΠ²Π΅ΡΠ°, 1812 β ΠΏΠΎΡΡ RADIUS-ΡΠ΅ΡΠ²Π΅ΡΠ°, testing321 β ΠΏΠ°ΡΠΎΠ»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° RADIUS-ΡΠ΅ΡΠ²Π΅ΡΠ° (ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ ΡΠΊΠ°Π·Π°Π»ΠΈ Π² ΠΊΠΎΠ½ΡΠΈΠ³Π΅).
Π Π΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ ΡΡΠ°Π½Π΅Ρ Π²ΡΠ²ΠΎΠ΄, ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΡΠΎΠ΄Π΅ΡΠΆΠ°Π½ΠΈΡ:
Sending Access-Request of id 44 to 127.0.0.1 port 1812
User-Name = "username"
User-Password = "100110"
NAS-IP-Address = 127.0.1.1
NAS-Port = 1812
Message-Authenticator = 0x00000000000000000000000000000000
rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=44, length=20
Π’Π΅ΠΏΠ΅ΡΡ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΠΈΡΡΡΡ, ΡΡΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΏΡΠΎΡΠ΅Π» Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ. ΠΠ»Ρ ΡΡΠΎΠ³ΠΎ ΠΌΡ Π·Π°Π³Π»ΡΠ½Π΅ΠΌ Π² Π»ΠΎΠ³ ΡΠ°ΠΌΠΎΠ³ΠΎ multiotp:
tail /var/log/multiotp/multiotp.log
Π Π΅ΡΠ»ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π·Π°ΠΏΠΈΡΡΡ ΡΠ°ΠΌ Π±ΡΠ΄Π΅Ρ:
2016-09-01 08:58:17 notice username User OK: User username successfully logged in from 127.0.0.1
2016-09-01 08:58:17 debug Debug Debug: 0 OK: Token accepted from 127.0.0.1
Π’ΠΎ Π²ΡΠ΅ ΠΏΡΠΎΡΠ»ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎ, ΠΈ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ
Π¨Π°Π³ 5. ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° Cisco ASA
Π£ΡΠ»ΠΎΠ²ΠΈΠΌΡΡ, ΡΡΠΎ ΠΌΡ ΡΠΆΠ΅ ΠΈΠΌΠ΅Π΅ΠΌ Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π³ΡΡΠΏΠΏΡ ΠΈ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΈ Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΏΠΎ SLL VPN, Π½Π°ΡΡΡΠΎΠ΅Π½Π½ΡΡ Π² ΡΠ²ΡΠ·ΠΊΠ΅ Ρ Active Directory, ΠΈ Π½Π°ΠΌ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π΄Π²ΡΡ
ΡΠ°ΠΊΡΠΎΡΠ½ΡΡ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄Π»Ρ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ°ΠΉΠ»Π°.
1. ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π½ΠΎΠ²ΡΡ Π³ΡΡΠΏΠΏΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² AAA:
2. ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² Π³ΡΡΠΏΠΏΡ Π½Π°Ρ multiOTP ΡΠ΅ΡΠ²Π΅Ρ:
3. ΠΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΡΠ°ΠΉΠ» ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ, Π²ΡΡΡΠ°Π²ΠΈΠ² Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π³ΡΡΠΏΠΏΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Active Directory:
4. ΠΠ° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Advanced -> Authentification ΡΠ°ΠΊ ΠΆΠ΅ Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ Π³ΡΡΠΏΠΏΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² Active Directory:
5. ΠΠ° Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Advanced -> Secondary authentification Π²ΡΠ±ΠΈΡΠ°Π΅ΠΌ ΡΠΎΠ·Π΄Π°Π½Π½ΡΡ Π³ΡΡΠΏΠΏΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ², Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΡΠΎΠΏΠΈΡΠ°Π½ multiOTP-ΡΠ΅ΡΠ²Π΅Ρ. ΠΡΠΌΠ΅ΡΠ°Π΅ΠΌ, ΡΡΠΎ Session username Π½Π°ΡΠ»Π΅Π΄ΡΠ΅ΡΡΡ ΠΈΠ· ΠΏΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠΉ Π³ΡΡΠΏΠΏΡ ΡΠ΅ΡΠ²Π΅ΡΠΎΠ² ΠΠΠ:
ΠΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΈ
Π¨Π°Π³ 6, ΠΎΠ½ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ
ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈ Ρ Π½Π°Ρ Π΄Π²ΡΡ
ΡΠ°ΠΊΡΠΎΡΠ½Π°Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ Π΄Π»Ρ SLL VPN:
ΠΡΠ°-Π»Ρ! ΠΡΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΈ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Cisco AnyConnect VPN Client ΡΠ°ΠΊ ΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π²ΡΠΎΡΠΎΠΉ, ΠΎΠ΄Π½ΠΎΡΠ°Π·ΠΎΠ²ΡΠΉ, ΠΏΠ°ΡΠΎΠ»Ρ.
ΠΠ°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π΄Π°Π½Π½Π°Ρ ΡΡΠ°ΡΡΡ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠΌΡ-ΡΠΎ, ΠΈ ΡΡΠΎ ΠΊΠΎΠΌΡ-ΡΠΎ ΠΎΠ½Π° Π΄Π°ΡΡ ΠΏΠΈΡΡ Π΄Π»Ρ ΡΠ°Π·ΠΌΡΡΠ»Π΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΉ, Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΡΠΉ ΠΠ’Π-ΡΠ΅ΡΠ²Π΅Ρ, Π΄Π»Ρ Π΄ΡΡΠ³ΠΈΡ
Π·Π°Π΄Π°Ρ. ΠΠ΅Π»ΠΈΡΠ΅ΡΡ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
, Π΅ΡΠ»ΠΈ Π±ΡΠ΄Π΅Ρ ΠΆΠ΅Π»Π°Π½ΠΈΠ΅.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: habr.com