LinOTP เจฆเฉ‹-เจ•เจพเจฐเจ• เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจธเจฐเจตเจฐ

LinOTP เจฆเฉ‹-เจ•เจพเจฐเจ• เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจธเจฐเจตเจฐ

เจ…เฉฑเจœ เจฎเฉˆเจ‚ เจ‡เจน เจธเจพเจ‚เจเจพ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจ‡เฉฑเจ• เจ•เจพเจฐเจชเฉ‹เจฐเฉ‡เจŸ เจจเฉˆเจŸเจตเจฐเจ•, เจธเจพเจˆเจŸเจพเจ‚, เจธเฉ‡เจตเจพเจตเจพเจ‚, ssh เจฆเฉ€ เจธเฉเจฐเฉฑเจ–เจฟเจ† เจฒเจˆ เจฆเฉ‹-เจ•เจพเจฐเจ• เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจธเจฐเจตเจฐ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ เจนเฉˆเฅค เจธเจฐเจตเจฐ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจธเฉเจฎเฉ‡เจฒ เจจเฉ‚เฉฐ เจšเจฒเจพเจเจ—เจพ: LinOTP + FreeRadiusเฅค

เจธเจพเจจเฉ‚เฉฐ เจ‡เจธ เจฆเฉ€ เจฒเฉ‹เฉœ เจ•เจฟเจ‰เจ‚ เจนเฉˆ?
เจ‡เจน เจ‡เฉฑเจ• เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจฎเฉเจซเจค, เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉฑเจฒ เจนเฉˆ, เจ‡เจธเจฆเฉ‡ เจ†เจชเจฃเฉ‡ เจจเฉˆเจŸเจตเจฐเจ• เจฆเฉ‡ เจ…เฉฐเจฆเจฐ, เจคเฉ€เจœเฉ€-เจงเจฟเจฐ เจชเฉเจฐเจฆเจพเจคเจพเจตเจพเจ‚ เจคเฉ‹เจ‚ เจธเฉเจคเฉฐเจคเจฐเฅค

เจ‡เจน เจธเฉ‡เจตเจพ เจนเฉ‹เจฐ เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจ‰เจคเจชเจพเจฆเจพเจ‚ เจฆเฉ‡ เจ‰เจฒเจŸ, เจฌเจนเฉเจค เจนเฉ€ เจธเฉเจตเจฟเจงเจพเจœเจจเจ•, เจ•เจพเจซเจผเฉ€ เจตเจฟเจœเจผเฉ‚เจ…เจฒ เจนเฉˆ, เจ…เจคเฉ‡ เจฌเจนเฉเจค เจธเจพเจฐเฉ‡ เจซเฉฐเจ•เจธเจผเจจเจพเจ‚ เจ…เจคเฉ‡ เจจเฉ€เจคเฉ€เจ†เจ‚ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจตเฉ€ เจ•เจฐเจฆเฉ€ เจนเฉˆ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจฒเฉŒเจ—เจฟเจจ+เจชเจพเจธเจตเจฐเจก+(PIN+OTPToken))เฅค API เจฐเจพเจนเฉ€เจ‚, เจ‡เจน sms เจญเฉ‡เจœเจฃ เจธเฉ‡เจตเจพเจตเจพเจ‚ (LinOTP Config->Provider Config->SMS เจชเฉเจฐเฉ‹เจตเจพเจˆเจกเจฐ) เจจเจพเจฒ เจเจ•เฉ€เจ•เฉเจฐเจฟเจค เจ•เจฐเจฆเจพ เจนเฉˆ, เจฎเฉ‹เจฌเจพเจˆเจฒ เจเจชเจฒเฉ€เจ•เฉ‡เจธเจผเจจเจพเจ‚ เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ Google Authentificator เจ…เจคเฉ‡ เจนเฉ‹เจฐ เจฌเจนเฉเจค เจ•เฉเจ เจฒเจˆ เจ•เฉ‹เจก เจคเจฟเจ†เจฐ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจฎเฉˆเจจเฉ‚เฉฐ เจฒเจ—เจฆเจพ เจนเฉˆ เจ•เจฟ เจ‡เจน เจธเฉ‡เจตเจพ เจตเจฟเฉฑเจš เจšเจฐเจšเจพ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ‡เจตเจพ เจจเจพเจฒเฉ‹เจ‚ เจตเจงเฉ‡เจฐเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉˆ เจฒเฉ‡เจ–.

เจ‡เจน เจธเจฐเจตเจฐ Cisco ASA, OpenVPN เจธเจฐเจตเจฐ, Apache2, เจ…เจคเฉ‡ เจ†เจฎ เจคเฉŒเจฐ 'เจคเฉ‡ เจฒเจ—เจญเจ— เจนเจฐ เจšเฉ€เจœเจผ เจฆเฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจœเฉ‹ เจ‡เฉฑเจ• RADIUS เจธเจฐเจตเจฐ เจฆเฉเจ†เจฐเจพ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเจพ เจนเฉˆ (เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจกเฉ‡เจŸเจพ เจธเฉˆเจ‚เจŸเจฐ เจตเจฟเฉฑเจš SSH เจฒเจˆ)เฅค

เจฒเฉ‹เฉœเฉ€เจ‚เจฆเจพ:

1) เจกเฉ‡เจฌเฉ€เจ…เจจ 8 (เจœเฉ‡เจธเฉ€) - เจœเจผเจฐเฉ‚เจฐเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡! (เจฒเฉ‡เจ– เจฆเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจกเฉ‡เจฌเฉ€เจ…เจจ 9 'เจคเฉ‡ เจ…เจœเจผเจฎเจพเจ‡เจธเจผ เจฆเฉ€ เจธเจฅเจพเจชเจจเจพ เจฆเจพ เจตเจฐเจฃเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ)

เจ…เจฐเฉฐเจญ เจ•เจฐเฉ‹:

เจกเฉ‡เจฌเฉ€เจ…เจจ 8 เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจเจพ.

LinOTP เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจธเจผเจพเจฎเจฒ เจ•เจฐเฉ‹:

# echo 'deb http://www.linotp.org/apt/debian jessie linotp' > /etc/apt/sources.list.d/linotp.list

เจ•เฉเฉฐเจœเฉ€เจ†เจ‚ เจœเฉ‹เฉœ เจฐเจนเฉ€เจ†เจ‚ เจนเจจ:

# gpg --search-keys 913DFF12F86258E5

เจ•เจˆ เจตเจพเจฐ "เจธเจพเจซเจผ" เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจฆเฉ‡ เจฆเฉŒเจฐเจพเจจ, เจ‡เจธ เจ•เจฎเจพเจ‚เจก เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ, เจกเฉ‡เจฌเฉ€เจ…เจจ เจกเจฟเจธเจชเจฒเฉ‡ เจ•เจฐเจฆเจพ เจนเฉˆ:

gpg: ัะพะทะดะฐะฝ ะบะฐั‚ะฐะปะพะณ `/root/.gnupg'
gpg: ัะพะทะดะฐะฝ ะฝะพะฒั‹ะน ั„ะฐะนะป ะฝะฐัั‚ั€ะพะตะบ `/root/.gnupg/gpg.conf'
gpg: ะ’ะะ˜ะœะะะ˜ะ•: ะฟะฐั€ะฐะผะตั‚ั€ั‹ ะฒ `/root/.gnupg/gpg.conf' ะตั‰ะต ะฝะต ะฐะบั‚ะธะฒะฝั‹ ะฟั€ะธ ัั‚ะพะผ ะทะฐะฟัƒัะบะต
gpg: ัะพะทะดะฐะฝะฐ ั‚ะฐะฑะปะธั†ะฐ ะบะปัŽั‡ะตะน `/root/.gnupg/secring.gpg'
gpg: ัะพะทะดะฐะฝะฐ ั‚ะฐะฑะปะธั†ะฐ ะบะปัŽั‡ะตะน `/root/.gnupg/pubring.gpg'
gpg: ะฝะต ะทะฐะดะฐะฝั‹ ัะตั€ะฒะตั€ั‹ ะบะปัŽั‡ะตะน (ะธัะฟะพะปัŒะทัƒะนั‚ะต --keyserver)
gpg: ัะฑะพะน ะฟั€ะธ ะฟะพะธัะบะต ะฝะฐ ัะตั€ะฒะตั€ะต ะบะปัŽั‡ะตะน: ะฟะปะพั…ะพะน URI

เจ‡เจน เจธเจผเฉเจฐเฉ‚เจ†เจคเฉ€ gnupg เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจนเฉˆเฅค เจ เฉ€เจ• เจนเฉˆ. เจฌเฉฑเจธ เจฆเฉเจฌเจพเจฐเจพ เจ•เจฎเจพเจ‚เจก เจšเจฒเจพเจ“เฅค
เจกเฉ‡เจฌเฉ€เจ…เจจ เจฆเฉ‡ เจธเจตเจพเจฒ เจฒเจˆ:

gpg: ะฟะพะธัะบ "913DFF12F86258E5" ะฝะฐ hkp ัะตั€ะฒะตั€ะต keys.gnupg.net
(1)	LSE LinOTP2 Packaging <[email protected]>
	  2048 bit RSA key F86258E5, ัะพะทะดะฐะฝ: 2010-05-10
Keys 1-1 of 1 for "913DFF12F86258E5".  ะ’ะฒะตะดะธั‚ะต ั‡ะธัะปะฐ, N) ะกะปะตะดัƒัŽั‰ะธะน ะธะปะธ Q) ะ’ั‹ั…ะพะด>

เจ…เจธเฉ€เจ‚ เจœเจตเจพเจฌ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚: 1

เจ…เจ—เจฒเจพ:

# gpg --export 913DFF12F86258E5 | apt-key add -

# apt-get update

mysql เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹. เจธเจฟเจงเจพเจ‚เจค เจตเจฟเฉฑเจš, เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจนเฉ‹เจฐ sql เจธเจฐเจตเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจธเจฐเจฒเจคเจพ เจฒเจˆ เจฎเฉˆเจ‚ เจ‡เจธเจจเฉ‚เฉฐ LinOTP เจฒเจˆ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เฉ€เจคเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจตเจฐเจคเจพเจ‚เจ—เจพ.

(เจตเจงเฉ€เจ• เจœเจพเจฃเจ•เจพเจฐเฉ€, เจœเจฟเจธ เจตเจฟเฉฑเจš LinOTP เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจจเฉ‚เฉฐ เจฎเฉเฉœ เจธเฉฐเจฐเจšเจฟเจค เจ•เจฐเจจเจพ เจธเจผเจพเจฎเจฒ เจนเฉˆ, เจฒเจˆ เจ…เจงเจฟเจ•เจพเจฐเจค เจฆเจธเจคเจพเจตเฉ‡เจœเจผเจพเจ‚ เจตเจฟเฉฑเจš เจชเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ เจฒเจฟเฉฐเจ• เจจเฉ‚เฉฐ. เจ‰เฉฑเจฅเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ•เจฎเจพเจ‚เจก เจตเฉ€ เจฒเฉฑเจญ เจธเจ•เจฆเฉ‡ เจนเฉ‹: dpkg-reconfigure linotp เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฆเจฒเจฃ เจฒเจˆ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ mysql เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เฉ€เจคเจพ เจนเฉˆ)เฅค

# apt-get install mysql-server

# apt-get update

(เจ…เจชเจกเฉ‡เจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฆเฉเจฌเจพเจฐเจพ เจตเฉ‡เจ–เจฃเจพ เจฆเฉเจ–เฉ€ เจจเจนเฉ€เจ‚ เจนเฉ‹เจตเฉ‡เจ—เจพ)
LinOTP เจ…เจคเฉ‡ เจตเจพเจงเฉ‚ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹:

# apt-get install linotp

เจ…เจธเฉ€เจ‚ เจ‡เฉฐเจธเจŸเจพเจฒเจฐ เจฆเฉ‡ เจธเจตเจพเจฒเจพเจ‚ เจฆเฉ‡ เจœเจตเจพเจฌ เจฆเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚:
เจ…เจชเจพเจšเฉ‡ 2 เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹: เจนเจพเจ‚
เจเจกเจฎเจฟเจจ เจฒเจฟเจจเฉ‹เจŸเจช เจฒเจˆ เจ‡เฉฑเจ• เจชเจพเจธเจตเจฐเจก เจฌเจฃเจพเจ“: โ€œเจคเฉเจนเจพเจกเจพ เจชเจพเจธเจตเจฐเจกโ€
เจธเจตเฉˆ-เจฆเจธเจคเจ–เจค เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจคเจฟเจ†เจฐ เจ•เจฐเฉ‹?: เจนเจพเจ‚
MySQL เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹?: เจนเจพเจ‚
เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจ•เจฟเฉฑเจฅเฉ‡ เจธเจฅเจฟเจค เจนเฉˆ: เจฒเฉ‹เจ•เจฒเจนเฉ‹เจธเจŸ
เจธเจฐเจตเจฐ เจ‰เฉฑเจคเฉ‡ เจ‡เฉฑเจ• LinOTP เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ (เจฌเฉ‡เจธ เจจเจพเจฎ) เจฌเจฃเจพเจ“: LinOTP2
เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจฒเจˆ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเจพ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฌเจฃเจพเจ“: LinOTP2
เจ…เจธเฉ€เจ‚ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฒเจˆ เจ‡เฉฑเจ• เจชเจพเจธเจตเจฐเจก เจธเฉˆเฉฑเจŸ เจ•เฉ€เจคเจพ เจนเฉˆ: "เจคเฉเจนเจพเจกเจพ เจชเจพเจธเจตเจฐเจก"
เจ•เฉ€ เจฎเฉˆเจจเฉ‚เฉฐ เจนเฉเจฃ เจ‡เฉฑเจ• เจกเจพเจŸเจพเจฌเฉ‡เจธ เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ? (เจ•เฉเจ เจœเจฟเจตเฉ‡เจ‚ "เจ•เฉ€ เจคเฉเจธเฉ€เจ‚ เจฏเจ•เฉ€เจจเจจ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹..."): เจนเจพเจ‚
MySQL เจฐเฉ‚เจŸ เจชเจพเจธเจตเจฐเจก เจฆเจฐเจœ เจ•เจฐเฉ‹ เจœเฉ‹ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจฌเจฃเจพเจ‡เจ† เจธเฉ€: "เจคเฉเจนเจพเจกเจพ เจชเจพเจธเจตเจฐเจก"
เจนเฉ‹ เจ—เจฟเจ†

(เจตเจฟเจ•เจฒเจชเจฟเจ•, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ)

# apt-get install linotp-adminclient-cli 

(เจตเจฟเจ•เจฒเจชเจฟเจ•, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจธเจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚ เจนเฉˆ)

# apt-get install libpam-linotp  

เจ…เจคเฉ‡ เจ‡เจธ เจฒเจˆ เจธเจพเจกเจพ Linotp เจตเฉˆเฉฑเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจนเฉเจฃ เจ‡เฉฑเจฅเฉ‡ เจ‰เจชเจฒเจฌเจง เจนเฉˆ:

"<b>https</b>: //IP_ัะตั€ะฒะตั€ะฐ/manage"

เจฎเฉˆเจ‚ เจตเฉˆเฉฑเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจฆเฉ€เจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจฌเจพเจฐเฉ‡ เจฅเฉ‹เฉœเฉ€ เจฆเฉ‡เจฐ เจฌเจพเจ…เจฆ เจ—เฉฑเจฒ เจ•เจฐเจพเจ‚เจ—เจพเฅค

เจนเฉเจฃ, เจธเจญ เจคเฉ‹เจ‚ เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจฃ เจšเฉ€เจœเจผ! เจ…เจธเฉ€เจ‚ FreeRadius เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ Linotp เจจเจพเจฒ เจฒเจฟเฉฐเจ• เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค

LinOTP เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจจ เจฒเจˆ FreeRadius เจ…เจคเฉ‡ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเฉ‹

# apt-get install freeradius linotp-freeradius-perl

เจ•เจฒเจพเจ‡เฉฐเจŸ เจ…เจคเฉ‡ เจฏเฉ‚เจœเจผเจฐ เจฐเฉ‡เจกเฉ€เจ…เจธ เจ•เฉŒเจ‚เจซเจฟเจ—เจธ เจฆเจพ เจฌเฉˆเจ•เจ…เฉฑเจช เจฒเจ“เฅค

# mv /etc/freeradius/clients.conf  /etc/freeradius/clients.old

# mv /etc/freeradius/users  /etc/freeradius/users.old

เจ‡เฉฑเจ• เจ–เจพเจฒเฉ€ เจ•เจฒเจพเจ‡เฉฐเจŸ เจซเจพเจˆเจฒ เจฌเจฃเจพเจ“:

# touch /etc/freeradius/clients.conf

เจธเจพเจกเฉ€ เจจเจตเฉ€เจ‚ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเจจเจพ (เจฌเฉˆเจ•เจ…เฉฑเจช เจ•เฉ€เจคเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจ‰เจฆเจพเจนเจฐเจฃ เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ)

# nano /etc/freeradius/clients.conf

client 192.168.188.0/24 {
secret  = passwd # ะฟะฐั€ะพะปัŒ ะดะปั ะฟะพะดะบะปัŽั‡ะตะฝะธั ะบะปะธะตะฝั‚ะพะฒ
}

เจ…เฉฑเจ—เฉ‡, เจ‡เฉฑเจ• เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจซเจพเจˆเจฒ เจฌเจฃเจพเจ“:

# touch /etc/freeradius/users

เจ…เจธเฉ€เจ‚ เจฐเฉ‡เจกเฉ€เจ…เจธ เจจเฉ‚เฉฐ เจฆเฉฑเจธเจฆเฉ‡ เจนเฉ‹เจ เจซเจพเจˆเจฒ เจจเฉ‚เฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจฒเจˆ เจชเจฐเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

# nano /etc/freeradius/users

DEFAULT Auth-type := perl

เจ…เฉฑเจ—เฉ‡, เจซเจพเจ‡เจฒ เจจเฉ‚เฉฐ เจธเฉ‹เจงเฉ‹ /etc/freeradius/modules/perl

# nano /etc/freeradius/modules/perl

เจธเจพเจจเฉ‚เฉฐ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจตเจฟเฉฑเจš เจชเจฐเจฒ เจฒเจฟเจจเฉ‹เจŸเจช เจธเจ•เฉเจฐเจฟเจชเจŸ เจฆเจพ เจฎเจพเจฐเจ— เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ:

Perl { .......
.........
<source lang="bash">module = /usr/lib/linotp/radius_linotp.pm

... ..
เจ…เฉฑเจ—เฉ‡, เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ…เจธเฉ€เจ‚ เจ‡เจน เจ•เจนเจฟเฉฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจ•เจฟเจธ (เจกเฉ‹เจฎเฉ‡เจจ, เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจœเจพเจ‚ เจซเจพเจˆเจฒ) เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจฒเฉˆเจฃเจพ เจนเฉˆ.

# touch /etc/linotp2/rlm_perl.ini

# nano /etc/linotp2/rlm_perl.ini

URL=https://IP_ะฒะฐัˆะตะณะพ_LinOTP_ัะตั€ะฒะตั€ะฐ(192.168.X.X)/validate/simplecheck
REALM=webusers1c
RESCONF=LocalUser
Debug=True
SSL_CHECK=False

เจฎเฉˆเจ‚ เจ‡เฉฑเจฅเฉ‡ เจฅเฉ‹เฉœเจพ เจนเฉ‹เจฐ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจœเจพเจตเจพเจ‚เจ—เจพ เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจน เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจนเฉˆ:

เจŸเจฟเฉฑเจชเจฃเฉ€เจ†เจ‚ เจฆเฉ‡ เจจเจพเจฒ เจซเจพเจˆเจฒ เจฆเจพ เจชเฉ‚เจฐเจพ เจตเฉ‡เจฐเจตเจพ:
linOTP เจธเจฐเจตเจฐ เจฆเจพ #IP (เจธเจพเจกเฉ‡ LinOTP เจธเจฐเจตเจฐ เจฆเจพ IP เจชเจคเจพ)
URL=https://172.17.14.103/validate/simplecheck
#เจธเจพเจกเจพ เจ–เฉ‡เจคเจฐ เจœเฉ‹ เจ…เจธเฉ€เจ‚ LinOTP เจตเฉˆเฉฑเจฌ เจ‡เฉฐเจŸเจฐเจซเฉ‡เจธ เจตเจฟเฉฑเจš เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡เฅค)
REALM = rearm1
#เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจธเจฎเฉ‚เจน เจฆเจพ เจจเจพเจฎ เจœเฉ‹ LinOTP เจตเฉˆเฉฑเจฌ เจฎเจœเจผเจฒ เจตเจฟเฉฑเจš เจฌเจฃเจพเจ‡เจ† เจ—เจฟเจ† เจนเฉˆเฅค
RESCONF=flat_file
# เจตเจฟเจ•เจฒเจชเจฟเจ•: เจŸเจฟเฉฑเจชเจฃเฉ€ เจ•เจฐเฉ‹ เจœเฉ‡เจ•เจฐ เจธเจญ เจ•เฉเจ เจ เฉ€เจ• เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจœเจพเจชเจฆเจพ เจนเฉˆ
เจกเฉ€เจฌเจ— = เจธเฉฑเจšเจพ
#เจตเจฟเจ•เจฒเจชเจฟเจ•: เจ‡เจธ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹, เจœเฉ‡เจ•เจฐ เจคเฉเจนเจพเจกเฉ‡ เจ•เฉ‹เจฒ เจธเจตเฉˆ-เจฆเจธเจคเจ–เจค เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจนเจจ, เจจเจนเฉ€เจ‚ เจคเจพเจ‚ เจŸเจฟเฉฑเจชเจฃเฉ€ เจ•เจฐเฉ‹ (SSL เจœเฉ‡เจ•เจฐ เจ…เจธเฉ€เจ‚ เจ†เจชเจฃเจพ เจธเจฐเจŸเฉ€เจซเจฟเจ•เฉ‡เจŸ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจชเฉเจธเจผเจŸเฉ€ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚)
SSL_CHECK=เจ—เจฒเจค

เจ…เฉฑเจ—เฉ‡, เจซเจพเจ‡เจฒ เจฌเจฃเจพเจ“ /etc/freeradius/sites-available/linotp

# touch /etc/freeradius/sites-available/linotp

# nano /etc/freeradius/sites-available/linotp

เจ…เจคเฉ‡ เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจ‡เจธ เจตเจฟเฉฑเจš เจ•เจพเจชเฉ€ เจ•เจฐเฉ‹ (เจ•เฉเจ เจตเฉ€ เจธเฉ‹เจงเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจจเจนเฉ€เจ‚):

authorize {
#normalizes maleformed client request before handed on to other modules (see '/etc/freeradius/modules/preprocess')
preprocess
#  If you are using multiple kinds of realms, you probably
#  want to set "ignore_null = yes" for all of them.
#  Otherwise, when the first style of realm doesn't match,
#  the other styles won't be checked.
#allows a list of realm (see '/etc/freeradius/modules/realm')
IPASS
#understands something like USER@REALM and can tell the components apart (see '/etc/freeradius/modules/realm')
suffix
#understands USERREALM and can tell the components apart (see '/etc/freeradius/modules/realm')
ntdomain
#  Read the 'users' file to learn about special configuration which should be applied for
# certain users (see '/etc/freeradius/modules/files')
files
# allows to let authentification to expire (see '/etc/freeradius/modules/expiration')
expiration
# allows to define valid service-times (see '/etc/freeradius/modules/logintime')
logintime
# We got no radius_shortname_map!
pap
}
#here the linotp perl module is called for further processing
authenticate {
perl
}

เจ…เฉฑเจ—เฉ‡ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจธเจฟเจฎ เจฒเจฟเฉฐเจ• เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡:

# ln -s ../sites-available/linotp /etc/freeradius/sites-enabled

เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจคเฉŒเจฐ 'เจคเฉ‡, เจฎเฉˆเจ‚ เจกเจฟเจซเฉŒเจฒเจŸ เจฐเฉ‡เจกเฉ€เจ…เจธ เจธเจพเจˆเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฎเจพเจฐเจฆเจพ เจนเจพเจ‚, เจชเจฐ เจœเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ, เจคเจพเจ‚ เจคเฉเจธเฉ€เจ‚ เจœเจพเจ‚ เจคเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€ เจธเฉฐเจฐเจšเจจเจพ เจจเฉ‚เฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจœเจพเจ‚ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจฏเฉ‹เจ— เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเฉ‹.

# rm /etc/freeradius/sites-enabled/default

# rm /etc/freeradius/sites-enabled/inner-tunnel

# service freeradius reload

เจ†เจ‰ เจนเฉเจฃ เจตเฉˆเจฌ เจซเฉ‡เจธ เจคเฉ‡ เจตเจพเจชเจธ เจ†เจ“ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจฅเฉ‹เฉœเฉ‡ เจนเฉ‹เจฐ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจตเฉ‡เจ–เฉ€เจ:
เจ‰เฉฑเจชเจฐเจฒเฉ‡ เจธเฉฑเจœเฉ‡ เจ•เฉ‹เจจเฉ‡ เจตเจฟเฉฑเจš LinOTP Config -> UserIdResolvers -> New 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹
เจ…เจธเฉ€เจ‚ เจ‰เจน เจšเฉเจฃเจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‹ เจ…เจธเฉ€เจ‚ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเจพเจ‚: LDAP (AD win, LDAP samba), เจœเจพเจ‚ SQL, เจœเจพเจ‚ Flatfile เจธเจฟเจธเจŸเจฎ เจฆเฉ‡ เจธเจฅเจพเจจเจ• เจ‰เจชเจญเฉ‹เจ—เจคเจพเฅค

เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจญเจฐเฉ‹เฅค

เจ…เฉฑเจ—เฉ‡ เจ…เจธเฉ€เจ‚ REALMS เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚:
เจ‰เฉฑเจชเจฐ เจธเฉฑเจœเฉ‡ เจ•เฉ‹เจจเฉ‡ เจตเจฟเฉฑเจš, LinOTP เจธเฉฐเจฐเจšเจจเจพ -> เจ–เฉ‡เจคเจฐ -> เจจเจตเจพเจ‚ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹เฅค
เจ…เจคเฉ‡ เจธเจพเจกเฉ‡ REALMS เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจจเจพเจฎ เจฆเจฟเจ“, เจ…เจคเฉ‡ เจชเจนเจฟเจฒเจพเจ‚ เจฌเจฃเจพเจ UserIdResolvers 'เจคเฉ‡ เจตเฉ€ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹เฅค

FreeRadius เจจเฉ‚เฉฐ เจ‡เจน เจธเจพเจฐเจพ เจกเจพเจŸเจพ /etc/linotp2/rlm_perl.ini เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจฎเฉˆเจ‚ เจ‰เฉฑเจชเจฐ เจฒเจฟเจ–เจฟเจ† เจธเฉ€, เจ‡เจธ เจฒเจˆ เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจนเฉˆ, เจคเจพเจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจนเฉเจฃเฉ‡ เจ•เจฐเฉ‹เฅค

เจธเจฐเจตเจฐ เจธเจญ เจ•เฉŒเจ‚เจซเจฟเจ—เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจตเจงเฉ€เจ•:

เจกเฉ‡เจฌเฉ€เจ…เจจ 9 'เจคเฉ‡ LinOTP เจธเฉˆเจŸ เจ…เจช เจ•เจฐเจจเจพ:

เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ:

# echo 'deb http://linotp.org/apt/debian stretch linotp' > /etc/apt/sources.list.d/linotp.list 
# apt-get install dirmngr

# apt-key adv --recv-keys 913DFF12F86258E5
# apt-get update

# apt-get install mysql-server

(เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจกเฉ‡เจฌเฉ€เจ…เจจ 9 เจตเจฟเฉฑเจš mysql (mariaDB) เจ‡เฉฑเจ• เจฐเฉ‚เจŸ เจชเจพเจธเจตเจฐเจก เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆ, เจฌเฉ‡เจธเจผเจ• เจคเฉเจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ–เจพเจฒเฉ€ เจ›เฉฑเจก เจธเจ•เจฆเฉ‡ เจนเฉ‹, เจชเจฐ เจœเฉ‡ เจคเฉเจธเฉ€เจ‚ เจ–เจผเจฌเจฐเจพเจ‚ เจชเฉœเฉเจนเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ‡เจน เจ…เจ•เจธเจฐ "เจเจชเจฟเจ• เจซเฉ‡เจฒ" เจตเฉฑเจฒ เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจธเฉˆเฉฑเจŸ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค เจซเจฟเจฐ เจตเฉ€)

# mysql -u root -p
use mysql;
UPDATE user SET Password = PASSWORD('ั‚ัƒั‚_ะฟะฐั€ะพะปัŒ') WHERE User = 'root';
exit
# apt-get install linotp
# apt-get install linotp-adminclient-cli
# apt-get install python-ldap
# apt install freeradius
# nano /etc/freeradius/3.0/sites-enabled/linotp

เจ•เฉ‹เจก เจชเฉ‡เจธเจŸ เจ•เจฐเฉ‹ (เจœเฉ‚เจฐเฉ€เจเจฎ เจฆเฉเจ†เจฐเจพ เจญเฉ‡เจœเจฟเจ† เจ—เจฟเจ†, เจ‡เจธเจฆเฉ‡ เจฒเจˆ เจ‰เจธเจฆเจพ เจงเฉฐเจจเจตเจพเจฆ!):

เจธเจฐเจตเจฐ linotp {
เจธเฉเจฃเฉ‹ {
ipaddr = *
เจชเฉ‹เจฐเจŸ = 1812
เจ•เจฟเจธเจฎ = เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ
}
เจธเฉเจฃเฉ‹ {
ipaddr = *
เจชเฉ‹เจฐเจŸ = 1813
เจ•เจฟเจธเจฎ = เจเจ•เจŸ
}
เจ…เจงเจฟเจ•เจพเจฐเจค {
เจชเฉเจฐเฉ€เจชเฉเจฐเฉ‹เจธเฉˆเฉฑเจธ
เจ…เฉฑเจชเจกเฉ‡เจŸ {
&control:Auth-Type:= Perl
}
}
เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจ•เจฐเฉ‹ {
เจชเฉเจฐเจฎเจพเจฃ-เจ•เจฟเจธเจฎ เจชเจฐเจฒ {
เจชเจฐเจฒ
}
}
เจฒเฉ‡เจ–เจพเจ•เจพเจฐเฉ€ {
เจฏเฉ‚เจจเจฟเจ•เจธ
}
}

เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเฉ‹ /etc/freeradius/3.0/mods-enabled/perl

เจชเจฐเจฒ {
เจซเจพเจˆเจฒ เจจเจพเจฎ = /usr/share/linotp/radius_linotp.pm
func_authenticate = เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจ•เจฐเฉ‹
func_authorize = เจ…เจงเจฟเจ•เจพเจฐเจค เจ•เจฐเฉ‹
}

เจฌเจฆเจ•เจฟเจธเจฎเจคเฉ€ เจจเจพเจฒ, เจกเฉ‡เจฌเฉ€เจ…เจจ 9 เจตเจฟเฉฑเจš เจฐเฉ‡เจกเฉ€เจ…เจธ_linotp.pm เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€เจ†เจ‚ เจคเฉ‹เจ‚ เจธเจฅเจพเจชเจค เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจนเฉˆ, เจ‡เจธเจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‡เจธเจจเฉ‚เฉฐ เจ—เจฟเจฅเจฌ เจคเฉ‹เจ‚ เจฒเจตเจพเจ‚เจ—เฉ‡เฅค

# apt install git
# git clone https://github.com/LinOTP/linotp-auth-freeradius-perl
# cd linotp-auth-freeradius-perl/
# cp radius_linotp.pm /usr/share/linotp/radius_linotp.pm

เจนเฉเจฃ เจ†เจ‰ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเฉ€เจ /etc/freeradius/3.0/clients.conf

เจ•เจฒเจพเจ‡เฉฐเจŸ เจธเจฐเจตเจฐ {
ipaddr = 192.168.188.0/24
เจ—เฉเจชเจค = เจคเฉเจนเจพเจกเจพ เจชเจพเจธเจตเจฐเจก
}

เจนเฉเจฃ เจจเฉˆเจจเฉ‹ /etc/linotp2/rlm_perl.ini เจจเฉ‚เฉฐ เจ เฉ€เจ• เจ•เจฐเฉ€เจ

เจ…เจธเฉ€เจ‚ เจ‰เฉฑเจฅเฉ‡ เจ‰เจนเฉ€ เจ•เฉ‹เจก เจชเฉ‡เจธเจŸ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจœเจฟเจตเฉ‡เจ‚ เจกเฉ‡เจฌเฉ€เจ…เจจ 8 (เจ‰เฉฑเจชเจฐ เจตเจฐเจฃเจจ เจ•เฉ€เจคเจพ เจ—เจฟเจ†) 'เจคเฉ‡ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡

เจ‡เจน เจธเจญ เจตเจฟเจšเจพเจฐ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจนเฉˆ. (เจ…เจœเฉ‡ เจคเฉฑเจ• เจŸเฉˆเจธเจŸ เจจเจนเฉ€เจ‚ เจ•เฉ€เจคเจพ เจ—เจฟเจ†)

เจฎเฉˆเจ‚ เจธเจฟเจธเจŸเจฎ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฒเจˆ เจ•เฉเจ เจฒเจฟเฉฐเจ• เจนเฉ‡เจ เจพเจ‚ เจ›เฉฑเจกเจพเจ‚เจ—เจพ เจœเจฟเจจเฉเจนเจพเจ‚ เจจเฉ‚เฉฐ เจ…เจ•เจธเจฐ เจฆเฉ‹-เจ•เจพเจฐเจ• เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจจเจพเจฒ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ:
เจตเจฟเฉฑเจš เจฆเฉ‹-เจ•เจพเจฐเจ• เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจธเฉˆเจŸ เจ…เจช เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ Apache2

Cisco ASA เจจเจพเจฒ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจ•เจฐเฉ‹(เจ‰เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเจพ เจŸเฉ‹เจ•เจจ เจœเจจเจฐเฉ‡เจธเจผเจจ เจธเจฐเจตเจฐ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ, เจชเจฐ ASA เจฆเฉ€เจ†เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจ†เจชเจฃเฉ‡ เจ†เจช เจตเจฟเฉฑเจš เจ‡เฉฑเจ•เฉ‹ เจœเจฟเจนเฉ€เจ†เจ‚ เจนเจจ)เฅค

เจฆเฉ‹-เจ•เจพเจฐเจ• เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจฆเฉ‡ เจจเจพเจฒ VPN

เจตเจฟเจตเจธเจฅเจพ ssh เจตเจฟเฉฑเจš เจฆเฉ‹ เจ•เจพเจฐเจ• เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ (เจ‰เจฅเฉ‡ LinOTP เจตเฉ€ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ) - เจฒเฉ‡เจ–เจ• เจฆเจพ เจงเฉฐเจจเจตเจพเจฆเฅค เจ‰เฉฑเจฅเฉ‡ เจคเฉเจธเฉ€เจ‚ LiOTP เจจเฉ€เจคเฉ€เจ†เจ‚ เจธเจฅเจพเจชเจค เจ•เจฐเจจ เจฌเจพเจฐเฉ‡ เจฆเจฟเจฒเจšเจธเจช เจšเฉ€เจœเจผเจพเจ‚ เจตเฉ€ เจฒเฉฑเจญ เจธเจ•เจฆเฉ‡ เจนเฉ‹เฅค

เจจเจพเจฒ เจนเฉ€, เจฌเจนเฉเจค เจธเจพเจฐเฉ€เจ†เจ‚ เจธเจพเจˆเจŸเจพเจ‚ เจฆเฉ‡ cm เจฆเฉ‹-เจ•เจพเจฐเจ• เจชเฉเจฐเจฎเจพเจฃเจฟเจ•เจคเจพ เจฆเจพ เจธเจฎเจฐเจฅเจจ เจ•เจฐเจฆเฉ‡ เจนเจจ (เจตเจฐเจกเจชเจฐเฉˆเจธ เจฒเจˆ, LinOTP เจฆเจพ เจ†เจชเจฃเจพ เจตเจฟเจธเจผเฉ‡เจธเจผ เจฎเฉ‹เจกเฉ€เจŠเจฒ เจตเฉ€ เจนเฉˆ GitHub), เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ•เฉฐเจชเจจเฉ€ เจฆเฉ‡ เจ•เจฐเจฎเจšเจพเจฐเฉ€เจ†เจ‚ เจฒเจˆ เจ†เจชเจฃเฉ€ เจ•เจพเจฐเจชเฉ‹เจฐเฉ‡เจŸ เจตเฉˆเฉฑเจฌเจธเจพเจˆเจŸ 'เจคเฉ‡ เจ‡เฉฑเจ• เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจธเฉˆเจ•เจธเจผเจจ เจฌเจฃเจพเจ‰เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹เฅค
เจฎเจนเฉฑเจคเจตเจชเฉ‚เจฐเจจ เจคเฉฑเจฅ! เจ—เฉ‚เจ—เจฒ เจชเฉเจฐเจฎเจพเจฃเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฒเจˆ "เจ—เฉ‚เจ—เจฒ เจชเฉเจฐเจฎเจพเจฃเฉ€เจ•เจฐเจฃ" เจฌเจพเจ•เจธ เจจเฉ‚เฉฐ เจจเจพ เจšเฉเจฃเฉ‹! เจซเจฟเจฐ QR เจ•เฉ‹เจก เจชเฉœเฉเจนเจจเจฏเฉ‹เจ— เจจเจนเฉ€เจ‚ เจนเฉˆ... (เจ…เจœเฉ€เจฌ เจคเฉฑเจฅ)

เจ‡เจธ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจฒเจฟเจ–เจฃ เจฒเจˆ, เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจธเฉ€:
itnan.ru/post.php?c=1&p=270571
www.digitalbears.net/?p=469

เจฒเฉ‡เจ–เจ•เจพเจ‚ เจฆเจพ เจงเฉฐเจจเจตเจพเจฆเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹