[Linux] ์šฐ๋ถ„ํˆฌ(Ubuntu) Google Authenticator OTP(๊ตฌ๊ธ€ OTP ์ธ์ฆ) ์„ค์น˜ ๋ฐ ์„ค์ •

2023. 7. 8. 17:07ใ†System ์ž‘์—…์‹ค/LINUX

728x90
๋ฐ˜์‘ํ˜•

 




 

์šฐ๋ถ„ํˆฌ ๋ฆฌ๋ˆ…์Šค -ํ•œ๋น›์•„์นด๋ฐ๋ฏธ-IT COOKBOOK ์‹œ์Šคํ…œ amp; ๋„คํŠธ์›Œํฌ (3ํŒ)

COUPANG

www.coupang.com

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

๐Ÿš€ Google Authenticator OTP(๊ตฌ๊ธ€ OTP ์ธ์ฆ) ์„ค์น˜ ๋ฐ ์„ค์ •

    ๐Ÿ”ฝ ๊ฐœ์š”

        ๐Ÿ“ฆ ์†Œ๊ฐœ

์ฃผ๋‹ˆ์˜ ๋‚ด๋ถ€ ์„œ๋ฒ„๋Š” ๋ชจ๋‘ ์šฐ๋ถ„ํˆฌ 22.04 LTS๋กœ ์ค€๋น„๊ฐ€ ๋˜์–ด ์žˆ๊ณ , VPN์„ ํ†ตํ•ด ์ ‘์†ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๊ตฌ์„ฑ ๋˜์–ด ์žˆ์–ด์š”.

๋‹น์—ฐํžˆ ์‚ฌ์šฉ์ž๋“ค์€ ํ•ด๋‹น ์„œ๋ฒ„๋“ค์— ์ ‘์†ํ•˜๊ธฐ ์œ„ํ•ด SSH๋ฅผ ์ด์šฉํ•ด์„œ ๋กœ๊ทธ์ธ(Login)์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋•Œ, ๋ณด๋‹ค ์•ˆ์ „ํ•œ ์ ‘๊ทผ์„ ์œ„ํ•ด SSH ๋กœ๊ทธ์ธ ์‹œ OTP ์ธ์ฆ์„ ์ถ”๊ฐ€๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•ด ๋ณด๋ ค๊ณ  ํ•ด์š”.

 

์ผ๋ฐ˜์ ์œผ๋กœ SSH ๋กœ๊ทธ์ธ ์‹œ ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ณ„์ • ID์™€ ๋น„๋ฐ€๋ฒˆํ˜ธ(Password)๋ฅผ ๋ฌป๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์ธ์ฆํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ผ์š”. ์ด ๋ฐฉ๋ฒ•์„ password authentication ๋ฐฉ๋ฒ•์ด๋ผ ํ•œ๋‹ต๋‹ˆ๋‹ค.

์ด๋Š” ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์ด๊ณ , ์‚ฌ์šฉ๋„ ์‰ฌ์›Œ์š”. ํ•˜์ง€๋งŒ, ๋ณด์•ˆ์  ์ž…์žฅ์œผ๋กœ ๋ดค์„ ๋•, ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆœ ์—†์–ด์š”.

๋งŒ์•ฝ ๋‚ด๋ถ€ ์‚ฌ์šฉ์ž๋“ค ์ค‘ ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฐ„๋‹จํ•œ ํŒจ์Šค์›Œ๋“œ (์˜ˆ: abc123)์„ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฌด์ž‘์œ„ ๋Œ€์ž… ๊ณต๊ฒฉ(Brute force Attack) ํ˜น์€ ์‚ฌ์ „ ๋Œ€์ž… ๊ณต๊ฒฉ์— ๊ต‰์žฅํžˆ ์ทจ์•ฝํ•ด ์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

๋˜ํ•œ, ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•ด์•ผ๋งŒ ์ธ์ฆ์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Shoulder Surfing(์–ด๊นจ๋„˜์–ด ํ›”์ณ๋ณด๊ธฐ - ๊ณต๊ฒฉ์ž๊ฐ€ ํ”ผํ•ด์ž๊ฐ€ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ, ๋ชฐ๋ž˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณด๋Š” ๋ฐฉ๋ฒ•) ๋“ฑ์˜ ์‚ฌ์šฉ์ž ๋ถ€์ฃผ์˜๋กœ ์ธํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋…ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

๋ฌผ๋ก  ๋‚ด๋ถ€ ์„œ๋ฒ„๋Š” VPN์„ ์ด์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ๋ถ™์„ ์ˆ˜ ์—†๊ณ , VPN์€ ๊ด€๋ฆฌ์ž๋งŒ์ด ๋ถ™์„ ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •ํ•ด์ค˜์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๊ณต๊ฒฉ์„ ๋‹นํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋…ธ์ถœ๋œ๋‹ค๊ณ  ํ•ด๋„ ์„œ๋ฒ„์— ์ ‘์†ํ•  ์ˆœ ์—†๊ฒ ์ง€๋งŒ, ๋ณด๋‹ค ์•ˆ์ „ํ•œ ๋ณด์•ˆ์„ ์œ„ํ•ด ๊ตฌ๊ธ€ OTP๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•˜์˜€์–ด์š”.

SSH key authentication์€ ์œ„ ๋ฐฉ๋ฒ•๋ณด๋‹จ ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ผ ์ˆ˜ ์žˆ์–ด์š”. Client(ํด๋ผ์ด์–ธํŠธ)์˜ ํ—ˆ๋ฝ๋œ ssh pubilc key(ssh ๊ณต๊ฐœํ‚ค)๋ฅผ Server(์„œ๋ฒ„)์— ๋ฏธ๋ฆฌ ๋„ฃ์–ด๋‘์–ด ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ์—†์ด ์„œ๋ฒ„์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด์—์š”. ์ด์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์€ Ansible์„ ํ†ตํ•ด Linux(๋ฆฌ๋ˆ…์Šค) ๊ณ„์ • ์ƒ์„ฑ ๋•Œ, ์ •๋ฆฌ๋ฅผ ํ•ด ๋‘์—ˆ๋Š”๋ฐ, ์ด ๊ณณ์— ๊ด€์‹ฌ์„ ์ฃผ์„ธ์š”.

์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— Key Logger(ํ‚ค๋กœ๊ฑฐ)๋‚˜, ์œ„์—์„œ ์ด์•ผ๊ธฐ ํ–ˆ๋˜ ์–ด๊นจ๋„˜์–ด ํ›”์ณ๋ณด๊ธฐ ๊ณต๊ฒฉ ๋“ฑ์—์„œ ๋ณด๋‹ค ์•ˆ์ „ํ•  ์ˆ˜ ์žˆ๊ณ , ์‚ฌ์šฉ์ž๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ธฐ์–ตํ•  ํ•„์š”๋„ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ์ ์–ด๋‘˜ ํ•„์š”๋„ ์—†๋Š” ๋ฐฉ์‹์ด์—์š”. ๊ทธ๋ž˜์„œ ์™ธ๋ถ€์— ๋…ธ์ถœ๋  ๊ฐ€๋Šฅ์„ฑ์ด ํ˜„์ €ํžˆ ์ค„์–ด๋“ค๊ฒŒ ๋˜์š”.

ํ•˜์ง€๋งŒ, ๋งŽ์€ ์„œ๋ฒ„๋“ค๋กœ ๊ตฌ์„ฑ๋œ ๋Œ€๊ทœ๋ชจ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ์ž๋“ค์˜ ๊ณต๊ฐœํ‚ค(authorized_keys) ๊ด€๋ฆฌ๋Š” ์˜ˆ์ƒ๋ณด๋‹ค ์–ด๋ ค์›Œ์š”.
๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ์ž์˜ Private Key(๋น„๋ฐ€ํ‚ค)๊ฐ€ ์œ ์ถœ๋œ๋‹ค๋ฉด ์˜คํžˆ๋ ค ๋”์šฑ ์œ„ํ—˜ํ•œ ์ƒํ™ฉ์— ์ฒ˜ํ•ด์งˆ ์œ„ํ—˜์ด ์žˆ์–ด์š”.

์ด๋ฅผ ๋Œ€์ฒ˜ํ•  ๋ฐฉ๋ฒ•์€ ๋งŽ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์ฃผ๋‹ˆ๋Š” Google Authenticator๋ฅผ ์ด์šฉํ•˜์—ฌ OTP(one-time password)๋ฅผ ์ด์šฉํ•˜์—ฌ 2์ฐจ ์ธ์ฆ์— ๋Œ€ํ•œ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•ด๋ณด๋ ค ํ•ด์š”.

2์ฐจ ์ธ์ฆ(Two-Factor Authentication: 2FA) ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณด์•ˆ์  ์ž…์žฅ์—์„œ ๋” ์•ˆ์ „ํ•  ์ˆ˜ ์žˆ์–ด์š”.

ํ•˜์ง€๋งŒ, ์šฐ๋ฆฌ ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„  ๋ถˆํŽธํ•ด์งˆ ์ˆ˜ ์žˆ์–ด์š”.

์™œ๋ƒํ•˜๋ฉด ์—ฌ๋Ÿฌ ์‹œ์Šคํ…œ์— OTP๋ฅผ ์„ค์น˜ํ•ด ๋’€๊ธฐ ๋•Œ๋ฌธ์— ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๊ณ , OTP ๊ฐ’์„ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ํ•ธ๋“œํฐ ๋“ฑ์„ ํ†ตํ•ด OTP ๊ฐ’์„ ํ™•์ธํ•˜๊ณ , ์ž…๋ ฅํ•ด์•ผ ํ•˜๋Š” ์ˆ˜๊ณ ๋ฅผ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

์ด๋Š” ๋ณด์•ˆ๊ณผ ํŽธ์˜๋Š” ๋ฐ˜๋น„๋ก€ํ•˜๋Š” ๊ด€๊ณ„์ด๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ๋‹ˆ๋Š” ํŽธ์˜๋ณด๋‹จ ๋ณด์•ˆ์„ ์„ ํƒํ•˜๊ธฐ๋กœ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

        ๐Ÿ“ฆ OTP๋ž€?

One Time Password ์ฆ‰, ์ผํšŒ์„ฑ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋งํ•ด์š”. ์•„๋งˆ ์˜จ๋ผ์ธ ๋ฑ…ํ‚น ์„œ๋น„์Šค ๋“ฑ์—์„œ ์ด๋ฏธ ์—ฌ๋Ÿฌ๋ถ„๋“ค์€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„์ง€๋„ ๋ชฐ๋ผ์š”. ์ผ๋ฐ˜์ ์œผ๋กœ ์ธ์ฆ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋“ค์€ ๊ณ ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ถœ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๋Š” ๋‹จ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์š”.

ํ•˜์ง€๋งŒ, OTP๋Š” ๊ทธ ๊ฐ’์ด ๋™์ ์œผ๋กœ ๊ณ„์† ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์œ ์ถœ์‹œ์—๋„ ์ผ์ • ์‹œ๊ฐ„์ด๋‚˜, ์ผ์ • Event(์ด๋ฒคํŠธ)๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์ „ํ•œ ๋ฐฉ๋ฒ•์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.

์—ฌ๋Ÿฌ OTP Service(์„œ๋น„์Šค) ์ค‘์—์„œ ์ฃผ๋‹ˆ๋Š” ๊ตฌ๊ธ€ authenticator๋ฅผ ์„ ํƒํ–ˆ์–ด์š”. ์ผ๋‹จ Open Source Project(์˜คํ”ˆ์†Œ์Šค ํ”„๋กœ์ ํŠธ - Apache License 2)์ด๊ณ , ํ˜„์žฌ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ์ค‘์ธ OPT์ด๊ธฐ ๋•Œ๋ฌธ์ด์—์š”. ๋Œ€๋ถ€๋ถ„์˜ Mobile(๋ชจ๋ฐ”์ผ) OS(ios, android, window)๋“ฑ ๋ชจ๋‘ ์ง€์› ๊ฐ€๋Šฅํ•˜๊ณ , ์„œ๋ฒ„ Package(ํŒจํ‚ค์ง€) ์—ญ์‹œ ๋Œ€๋ถ€๋ถ„์˜ OS(Debian, redaht)์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—์š”.

๋‹ค๋ฅธ ๋Œ€์ฒด Solution(์†”๋ฃจ์…˜)์€ ๋ฌด๋ฃŒ๋กœ๋Š” FreeOTP, ์ƒ์šฉ ์ œํ’ˆ์œผ๋กœ๋Š” authy๊ฐ€ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฑธ๋กœ ์•Œ๊ณ  ์žˆ์–ด์š”.

 

 

 

 

    ๐Ÿ”ฝ Google Authenticator OTP

        ๐Ÿ“ฆ ์„ค์น˜ ๋ฐ ์„ค์ •

์ตœ์ดˆ ์„ค์น˜๋ฅผ ์œ„ํ•ด ํŒจํ‚ค์ง€๋ฅผ ์ตœ์‹ ํ™” ํ•˜๋Š” ์ž‘์—…์„ ํ•ด ์ค„๊ฒŒ์š”.

apt-get update && apt-get upgrade -y

 


๊ทธ๋Ÿฐ ๋’ค ๊ตฌ๊ธ€ authenticator PAM ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜๋„๋ก ํ• ๊ฒŒ์š”.

Pluggable Authentication Module ์•ฝ์ž์ธ PAM์€ ๋ฆฌ๋ˆ…์Šค Platform(ํ”Œ๋žซํผ)์—์„œ ์ถ”๊ฐ€ ์ธ์ฆ ๊ณ„์ฒญ์„ ์ œ๊ณตํ•˜๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์ด์—์š”.


apt-get install libpam-google-authenticator -y

 

google-authenticator

 


goggle-authenticator ์„ค์ •์„ ์ง„ํ–‰ํ•ด ๋ณผ๊ฒŒ์š”. ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ด์šฉํ•ด์„œ google-authenticator ์„ค์ •์„ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์งˆ๋ฌธ์ด ์‹œ์ž‘ ๋ผ์š”.

์ฐธ๊ณ ๋กœ google-authenticator๋Š” OS ์‚ฌ์šฉ์ž๋งˆ๋‹ค ๋‹ค๋ฅธ ์„ค์ •์„ ํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด์š”. ์„ค์ •์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๊ฐ ์‚ฌ์šฉ์ž Home Directory($HOME)/.google-authenticator ํŒŒ์ผ๋กœ ์ €์žฅ์ด ๋˜๊ณ , ์œ„์™€ ๊ฐ™์ด ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ƒ์„ฑํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด์š”.

์ฃผ๋‹ˆ๋Š” TOTP ๋ฐฉ์‹์„ ์ด์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— y๋ฅผ ์ž…๋ ฅํ•ด ์ค„๊ฑฐ์—์š”.

๋˜ํ•œ, root ๊ณ„์ •์œผ๋กœ ํ•˜๋ฉด root ๊ณ„์ •์ด ์ž ๊ธธ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋‹ค๋ฅธ ๊ณ„์ •์œผ๋กœ ์„ค์ •ํ•˜๋Š” ๊ฑธ ์ถ”์ฒœํ•ด์š”.

๐Ÿ’ก ์ฐธ๊ณ  ์‚ฌํ•ญ
Goggle Authenticator์˜ 2๊ฐ€์ง€ ์ธ์ฆ ๋ฐฉ๋ฒ•

์ด ์ธ์ฆ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ ์ธ์ฆ์— ๋Œ€ํ•œ Algorithm(์•Œ๊ณ ๋ฆฌ์ฆ˜)์ธ๋ฐ, ์‹œ๊ฐ„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ๊ฒƒ์ธ์ง€ Event(google-authenticator๋Š” counter ์‚ฌ์šฉ) ๊ธฐ๋ฐ˜์œผ๋กœ ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ฐจ์ด.

1. TOTP(Time-Based)
Server-Client(ํ•ธ๋“œํฐ OTP App ๋“ฑ) ๊ฐ„ ์„œ๋กœ ์–ด๋– ํ•œ ์ •๋ณด๋„ ์ฃผ๊ณ  ๋ฐ›์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ผํ•œ ์ธ์ž๊ฐ’(input)์œผ๋กœ ๋™์ผํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ, ๊ฒฐ๊ณผ๊ฐ’์ธ Token(ํ† ํฐ)์ด ์„œ๋กœ ๊ฐ™์€์ง€ ํ˜น์€ ๋‹ค๋ฅธ์ง€๋งŒ ํŒ๋‹จํ•˜์—ฌ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹.

TOTP ๋ฐฉ์‹์˜ ๊ฒฝ์šฐ Secret Key(๋น„๋ฐ€ํ‚ค)์™€ ์‹œ๊ฐ„์„ ์ธ์ž๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋™์ผํ•œ ๋น„๋ฐ€ํ‚ค์™€ ์‹œ๊ฐ„์ด๋ผ๋ฉด ๊ฐ™์€ ํ† ํฐ์ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ์ด ํ†ต๊ณผํ•˜๋Š” ๋ฐฉ์‹.

TOTP๋Š” NTP(Network Time Protocol) ๋“ฑ์˜ ์‹œ๊ฐ„ ๋™๊ธฐํ™”๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๋ฉฐ, ์‹œ๊ฐ„์ด ๋‹ค๋ฅผ ๊ฒฝ์šฐ ํ† ํฐ์ด ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ์ธ์ฆ์„ ํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค. (์‹œ๊ฐ„์ฐจ ๋Œ€๋น„ ์„ค์ • ๊ฐ€๋Šฅ)

2. HTOP(HMAC-based; Hash-based Message Authentication Code)
๋น„๋ฐ€ํ‚ค์™€ ํ•จ๊ป˜ counter(์นด์šดํ„ฐ)๋ฅผ ์ด์šฉํ•˜์—ฌ ์ธ์ฆํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์นด์šดํ„ฐ๋Š” 1๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋ฉฐ, ์ธ์ฆ์ด ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜, ํด๋ผ์ด์–ธํŠธ์˜ ์ฆ๊ฐ€ ์š”์ฒญ(Reload Button)์ด ์žˆ์„ ๊ฒฝ์šฐ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋˜๋Š” ๋ฐฉ์‹์ด๋ฉฐ, 30์ดˆ๋งˆ๋‹ค ํ† ํฐ์ด ๋ณ€๊ฒฝ๋˜๋Š” TOTP ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅด๊ฒŒ HOTP๋Š” ์ด๋ฒคํŠธ(์š”์ฒญ)์ด ์—†์„ ๊ฒฝ์šฐ ํ† ํฐ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— TOTP๊ฐ€ ๋ณด๋‹ค ๋ณด์•ˆ์ƒ ์•ˆ์ „.

 

728x90

์œ„์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’๋“ค์ด ์ƒ์„ฑ๋˜๊ณ  ํ‘œ์‹œ ๋˜์—ˆ์–ด์š”.

๋˜ํ•œ, QR Code๊ฐ€ ํ™”๋ฉด์— ์—„์ฒญ ํฌ๊ฒŒ ๋‚˜์™€์š”! ํด๋ผ์ด์–ธํŠธ App์—์„œ ์ด QR Code์„ Scan(์Šค์บ”)ํ•˜๊ฒŒ ๋˜๋ฉด ์ž๋™์œผ๋กœ ์„ค์ •์ด ์ง„ํ–‰๋  ๊ฑฐ์—์š”.

์œ„์—์„œ ๋‚˜์˜จ ๋น„๋ฐ€ํ‚ค ๊ฐ’์€ ์‹œ๊ฐ„๊ณผ ํ•จ๊ป˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธ์ž๊ฐ’์œผ๋กœ ์‚ฌ์šฉ๋  ์ค‘์š”ํ•œ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ํ•ด์ฃผ์•ผ์•ผํ•ด์š”.

๋˜ํ•œ verification code๋Š” ํ† ํฐ ๊ฐ’์ด์—์š”. ์ฃผ๋‹ˆ์ฒ˜๋Ÿผ TOTP ์„ค์ •์ด๋ผ๋ฉด 30์ดˆ๋งˆ๋‹ค OTP ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๊ฑฐ์—์š”.

๋งˆ์ง€๋ง‰์œผ๋กœ emergency scratch code 5๊ฐœ๊ฐ€ ๋ณด์ด๋Š”๋ฐ, ์ด๊ฒƒ์€ ๋‹จ๋ง๊ธฐ ๋“ฑ์„ ์žƒ์–ด๋ฒ„๋ ธ์„ ์‘๊ธ‰ํ•œ ์ƒํ™ฉ์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’๋“ค๋กœ ์‹œ๊ฐ„๋“ฑ๊ณผ ๊ด€๊ณ„์—†์ด ์œ„ code ๊ฐ’์„ ์ž…๋ ฅํ•˜๊ฒŒ ๋˜๋ฉด ์ธ์ฆ์„ ์„ฑ๊ณตํ•˜๊ฒŒ ๋ผ์š”.

๋˜ํ•œ, ํ•œ๋ฒˆ ์ธ์ฆ์ด ์ง„ํ–‰๋œ code๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ด ๋•Œ๋ฌธ์— ๋„‰๋„‰ํ•˜๊ฒŒ ์ค€๋น„ํ•ด ์ฃผ๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์–ด์š”.

emergency scratch code๋Š” ๋”ฐ๋กœ Memo(๋ฉ”๋ชจ) ํ•ด ๋‘๋Š”๊ฒŒ ์ข‹์„ ๊ฑฐ ๊ฐ™์•„์š”.

์ด์ œ ๋‹จ๋ง๊ธฐ์—์„œ OTP App์„ ์‹คํ–‰ํ•˜๊ณ , QR Code Scan ๋“ฑ์„ ํ†ตํ•ด QR Code๋ฅผ ์Šค์บ”ํ•˜๊ฑฐ๋‚˜, secret key๋ฅผ ํ†ตํ•ด ์ ‘์†ํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด์š”.

QR Code๋ฅผ ์Šค์บ”ํ•˜๋ฉด 30์ดˆ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋˜๋Š” 6์ž๋ฆฌ OTP ๊ฐ’์ด ๋‚˜์˜ค๊ฒŒ ๋˜๋Š”๋ฐ, ์—ฌ๊ธฐ๊นŒ์ง€ ๋˜์—ˆ๋‹ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์–ด์š”.





์ด ์ƒํ™ฉ์—์„œ y๋ฅผ ์ž…๋ ฅํ•˜์—ฌ Home Directory(ํ™ˆ ๋””๋ ‰ํ„ฐ๋ฆฌ)์— ์žˆ๋Š” ๊ตฌ๊ธ€ ์ธ์ฆ ํŒŒ์ผ์„ ์ตœ์‹ ํ™” ํ•ด์ค˜์•ผ ํ•ด์š”.


์œ„์™€ ๊ฐ™์ด ๋‚˜์˜ค๋ฉด ์ค‘๊ฐ„์ž ๊ณต๊ฒฉ(Main-inthe-middle Attack) ๊ณต๊ฒฉ์œผ๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฒฉ ๋ฐฉ์–ด๋ฅผ ์œ„ํ•ด ๋กœ๊ทธ์ธ์„ 30์ดˆ๋งˆ๋‹ค ํ•œ๋ฒˆ๋งŒ ๊ฐ€๋Šฅํ•˜๋„๋ก ๋กœ๊ทธ์ธ์„ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด y์„ ์ž…๋ ฅํ•˜์—ฌ ์ค๋‹ˆ๋‹ค.



๊ทธ๋Ÿฐ ๋’ค ์ด ๊ณณ์—์„œ n์„ ์ž…๋ ฅํ•˜์—ฌ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„ ์‹œ๊ฐ„ ํŽธ์ฐจ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์‹œ๊ฐ„ ๊ธฐ๊ฐ„์˜ ํ™•์žฅ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ณด๋‹ค ์•ˆ์ „ํ•œ ๋ณด์•ˆ์„ ๊ตฌ์ถ•ํ•ด ์ฃผ๋„๋ก ํ• ๊ฑฐ์—์š”.

TOTP์˜ ๊ฒฝ์šฐ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ์˜ ์‹œ๊ฐ„์ด ํ‹€์–ด์ง€๊ฒŒ๋˜๋ฉด ์ธ์ฆ์ด ์‹คํŒจํ•˜๊ฒŒ ๋˜๋Š” ๋ฐฉ์‹์ด์—์š”. ์ด๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ํ˜„์žฌ ์‹œ๊ฐ„ ์•ž, ๋’ค๋กœ ์—ฌ์œ ์‹œ๊ฐ„์„ ๋‘ฌ์„œ ์œ ํšจ๊ธฐ๊ฐ„์„ ๋Š˜๋ฆด์ˆ˜ ์žˆ์–ด์š”.

OTP ์ธ์ฆ์—์„œ window size๋ผ๋Š” ๊ฐ’์œผ๋กœ ์„ค์ •ํ• ์ˆ˜ ์žˆ๋Š”๋ฐ, default window size๋Š” 3์ด์—์š”. ์ด ์—ฌ์œ  ํญ์„ ๋Š˜๋ ค 4๋ถ„ ์ฐจ์ด๊นŒ์ง€ ์œ ํšจ ์ธ์ฆ์„ ์ฒ˜๋ฆฌํ• ์ง€, ์ฆ‰ 17๋กœ ๋ณ€๊ฒฝํ•˜๊ฒ ๋Š๋ƒ๋Š” ์„ค์ •์„ ํ•˜๋Š” ๋ถ€๋ถ„์ด์—์š”. TOTP์—์„œ window size 1์€ 30์ดˆ์—์š”. ํ˜„์žฌ์‹œ๊ฐ„์„ ๊ธฐ์ค€์œผ๋กœ ์•ž, ๋’ค๋กœ “8(์•ž) + 1(ํ˜„์žฌ) + 8(๋’ค)”์˜ ์—ฌ์œ  ์ธ์ฆ์‹œ๊ฐ„, 4๋ถ„์ด ๋˜๋Š” ๋ฐฉ์‹์ด์—์š”. ๋ฐ˜๋ฉด HOTP๋Š” window size 1๋Š” count 1์ด ๋œ๋‹ต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” ๋งˆ์ง€๋ง‰์œผ๋กœ ์ธ์ฆ์ด ์„ฑ๊ณตํ•œ counter๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ทธ ์ดํ›„ window size๋งŒํผ counter๋ฅผ ์ฆ๊ฐ€ํ•˜๋ฉด์„œ token๊ฐ’์ด ์ผ์น˜ ์œ ๋ฌด๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”. ์ด window size๊ฐ€ ํฌ๋‹ค๋ฉด? ๋‹น์—ฐํžˆ ๋ณด์•ˆ์ƒ ์•ˆ์ „ํ•  ์ˆ˜ ์—†์–ด์š”.





์ด ๊ณณ์—์„  y๋ฅผ ์ž…๋ ฅํ•˜์—ฌ ๋กœ๊ทธ์ธ ์‹œ๋„ ํšŒ์ˆ˜๋ฅผ 3ํšŒ๋กœ ์ œํ•œํ•ด ์ฃผ๋„๋ก ํ• ๊ฒŒ์š”.

์ด๋ ‡๊ฒŒ 2๋‹จ๊ณ„ ์ธ์ฆ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•ด ์ฃผ์—ˆ์–ด์š”.


cat ~/.google_authenticator

 


์œ„ ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์„ค์ • ๋‚ด์šฉ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ํ•ด๋‹น ํŒŒ์ผ์˜ ๊ถŒํ•œ์€ 400์ด์—์š”.

์œ„์—์„œ ์ƒ์„ฑ๋œ Secret key(๋น„๋ฐ€ํ‚ค)์™€ ์„ค์ •๋“ค์ด ๋ชจ๋‘ ์ €์žฅ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„๊ฑฐ์—์š”.

์ฒซ๋ฒˆ์งธ ๋ผ์ธ์ด Secret key(๋น„๋ฐ€ํ‚ค)์ด๊ณ  ๋’ค์ด์–ด “๋กœ ์‹œ์ž‘๋˜๋Š”OTP์˜ ์„ค์ •์ด ์œ„์น˜ํ•˜๊ณ  ์žˆ์–ด์š”.
๊ฐ ์„ค์ •์˜ ์˜๋ฏธ๋Š” ์œ„์—์„œ ์–ธ๊ธ‰ํ•ด ๋ชจ๋‘ ์•Œ ์ˆ˜ ์žˆ์„๊ฑฐ์—์š”.
๋งˆ์ง€๋ง‰ 5๋ผ์ธ์€
emergency scratch code์—์š”. ํ•ด๋‹น ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ๋  ๋•Œ๋งˆ๋‹ค ์„ค์ • ํŒŒ์ผ์—์„œ ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์‚ญ์ œ ๋˜๊ฒŒ ๋ผ์š”.

 

 

 

        ๐Ÿ“ฆ PAM ์„ค์ •

์ด๋ฒˆ์—๋Š” ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” Service(์„œ๋น„์Šค)์— google_authenticator PAM Module(๋ชจ๋“ˆ)์„ ์ถ”๊ฐ€ํ•ด ์ฃผ๋„๋ก ํ•ด ๋ณผ๊ฒŒ์š”.
์ฃผ๋‹ˆ๋Š” SSH์— ์ ์šฉํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— /etc/pam.d/sshd Line(๋ผ์ธ)์— ์ถ”๊ฐ€ํ•ด ์ค„ ๊ฑฐ์—์š”. SSH๊ฐ€ ์•„๋‹Œ su, sudo, passwd ๋“ฑ๊ณผ ๊ฐ™์€ ๋ช…๋ น์—๋„ OTP๋ฅผ ์ ์šฉํ•ด ์ค„ ์ˆ˜ ์žˆ์–ด์š”.

vim /etc/pam.d/sshd

 

auth       required     pam_google_authenticator.so secret=${HOME}/google_authenticator
auth       required     pam_sepermit.so
๋ฐ˜์‘ํ˜•
 


์ฃผ๋‹ˆ๋Š” ๋‹ค์‹œ root๋กœ ์ „ํ™˜ํ•ด์„œ ์œ„์™€ ๊ฐ™์ด 58๋ฒˆ์งธ ์ค„์„ ์ถ”๊ฐ€ํ•ด ์ฃผ์—ˆ์–ด์š”.

pam_google_authenticator๊ฐ€ ์œ„์—์„œ ์ƒ์„ฑํ•œ ~/.google_authenticator ๋‚ด์šฉ์„ ์ฝ์€ ๋’ค ์ธ์ฆ์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด์—์š”.
๋งŒ์•ฝ ํ•ด๋‹น ํŒŒ์ผ์ด ์—†๋‹ค๋ฉด ์ธ์ฆ์€ ์‹คํŒจํ•˜๊ฒŒ ๋ ๊ฑฐ์—์š”.

pam_google_authenticator์˜ man page(์‚ฌ์šฉ ์„ค๋ช…์„œ)๋ฅผ ์ฝ์–ด๋ณด๋ฉด SSH์— ์ ์šฉ ์‹œ ssh_config ํŒŒ์ผ์— ChallengeResponseAuthentication yes๋ฅผ ์ถ”๊ฐ€ํ•˜๋ผ๊ณ  ๋‚˜์™€ ์žˆ์–ด์š”.

์ด ์„ค์ •์ด ์—†๋‹ค๋ฉด ๊ธฐ๋ณธ๊ฐ’์€ yes์ด์ง€๋งŒ, ๋ฐฐํฌํŒ์˜ ๊ธฐ๋ณธ ์„ค์ •์€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€ํ•˜๋Š”๊ฒŒ ์ข‹์•„์š”.

vim /etc/ssh/sshd_config

 

 

ChallengeResponseAuthentication yes


์œ„์™€ ๊ฐ™์ด ์„ค์ •ํ–ˆ๋‹ค๋ฉด SSH Daemon์„ ๋‚ด๋ ธ๋‹ค๊ฐ€ ๋‹ค์‹œ ์˜ฌ๋ ค์ฃผ์–ด์•ผ ํ•ด์š”.

systemctl restart ssh

 




 

์šฐ๋ถ„ํˆฌ ๋ฆฌ๋ˆ…์Šค -ํ•œ๋น›์•„์นด๋ฐ๋ฏธ-IT COOKBOOK ์‹œ์Šคํ…œ amp; ๋„คํŠธ์›Œํฌ (3ํŒ)

COUPANG

www.coupang.com

"์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค."

 

 

 

 

728x90
๋ฐ˜์‘ํ˜•