# google-authenticator-libpam 디렉토리로 이동 후 bootstrap.sh를 실행
cd google-authenticator-libpam
./bootstrap.sh
설정을 진행합니다. 여기서 –libdir=/lib64를 설정하는 이유는 아래와 같습니다.
이 설정을 진행하지 않고 그냥 설정할시 OTP 부분을 담당하는 pam_google_authenticator.so가
/usr/local/lib/security/pam_google_authenticator.so에 설치되는 문제점이 있기 때문에
이 부분을 lib64로 설치 되게끔 설정을 진행하는겁니다.
# 설정 진행
./configure –libdir=/lib64
google-authenticator의 설치를 진행합니다.
# google-authenticato 소스 설치 진행
make install
/etc/pam.d/sshd 설정
OTP를 정상적으로 이용하기위해 pam 설정을 진행합니다.
pam_google_authenticator.so를 맨 위에 설정하면 되며 nullok는 유저계정에
.google_authenticator가 없는 경우 일반 패스워드로 접속이 되게끔 하는 설정입니다.
정리하면
1. 설정한 유저계정만 OTP를 쓰게 하겠다 : nullok를 넣으면 됩니다.
2. 전체 유저계정 모두 OTP를 쓰게 하겠다. : nullok를 넣지 않으면 됩니다.
# ssh pam 설정 진행
vi /etc/pam.d/sshd
auth required pam_google_authenticator.so nullok
sshd_config에서 아래의 설정을 변경해준후 sshd를 재시작합니다.
# sshd_config 설정
vi /etc/ssh/sshd_config
PasswordAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes
/etc/init.d/sshd restart
유저계정 OTP 설정
google-authenticator로 유저에 OTP 설정을 걸어주고 나오는 문구에는 y를 눌러주어
설정을 완료…하는게 좋겠지만 이대로는 찜찜하죠? 오늘도 그분을 모시고 올때가 왔습니다.
하루에 한번은 사용하는 구글 번역을 말이죠!
한번 본 후 https쪽의 URL를 복사해둡니다.
원문
Do you want me to update your “/root/.google_authenticator” file? (y/n) y
Do you want to disallow multiple uses of the same authentication token? This restricts you to one login about every 30s, but it increases your chances to notice or even prevent man-in-the-middle attacks (y/n) y
By default, a new token is generated every 30 seconds by the mobile app. In order to compensate for possible time-skew between the client and the server, we allow an extra token before and after the current time. This allows for a time skew of up to 30 seconds between authentication server and client. If you experience problems with poor time synchronization, you can increase the window from its default size of 3 permitted codes (one previous code, the current code, the next code) to 17 permitted codes (the 8 previous codes, the current code, and the 8 next codes). This will permit for a time skew of up to 4 minutes between client and server. Do you want to do so? (y/n) y
If the computer that you are logging into isn’t hardened against brute-force login attempts, you can enable rate-limiting for the authentication module. By default, this limits attackers to no more than 3 login attempts every 30s. Do you want to enable rate-limiting? (y/n) y
번역
“/root/.google_authenticator”파일을 업데이트 하시겠습니까? (y / n) y
동일한 인증 토큰을 여러 번 사용하지 못하게 하시겠습니까? 30 초마다 하나의 로그인으로 제한되지만, 중간자 (man-in-the-middle) 공격을 통지하거나 방지 할 가능성이 높아집니다. (y / n) y 기본적으로 새 토큰은 모바일 앱에서 30 초마다 생성됩니다. 클라이언트와 서버 간의 가능한 시간 – 왜곡을 보상하기 위해 현재 시간 전후에 여분의 토큰을 허용합니다. 이를 통해 인증 서버와 클라이언트 사이의 시간 차이를 최대 30 초까지 허용합니다. 시간 동기화가 잘 못된 경우 문제가 발생하면 기본 허용 크기 3 개의 허용 코드 (이전 코드, 현재 코드, 다음 코드)를 17 개의 허용 코드 (이전 코드 8 개, 현재 코드 및 이전 코드)로 늘릴 수 있습니다. 이렇게하면 클라이언트와 서버간에 최대 4 분의 시간 왜곡이 허용됩니다. 그렇게하고 하시겠습니까? (y / n) y
로그인하는 컴퓨터가 brute-force 로그인 시도에 대해 강화되지 않으면 인증 모듈에 속도 제한을 사용할 수 있습니다. 기본적으로이 옵션은 공격자가 30 초마다 3 번 이상 로그인을 시도하지 못하도록 제한합니다. 속도 제한을 사용 하시겠습니까? (y / n) y
# 계정 OTP 설정
google-authenticator
# 계정 URL 복사 (아래는 예시입니다.)
https://www.google.com/chart?chs=
스마트폰 Google OTP 어플리케이션 설치 및 설정
OTP를 이용하기위해 Google OTP를 설치합니다. 본 기기는 안드로이드 기반의 갤럭시 노트4입니다.
설치가 완료되면 어플을 시작하여 시작을 누른뒤 다음 페이지가 나오면 넘어가기를 누릅니다.
아까 URL을 복사해놓으셨다면 바코드 스캔을 터치하여 OTP의 계정을 추가합니다.
바코드 스캔이 안될경우 다른방법이 있습니다. 그건 밑에서 다시 설명하겠습니다.
허용을 누르면 컴퓨터에 URL을 붙여넣어 이동한뒤 QR코드를 확인하고
스마트폰으로 모니터에 나와있는 QR코드를 찍습니다. 보통 가까이 가져가면 알아서 인식합니다.
준비 완료를 누르면 6자리의 코드가 나오는것을 확인할수 있습니다.
원격접속
ssh로 접속을 진행해보면 처음에는 로그인할 유저를 묻고 그 다음 OTP의 코드를
물은뒤 비밀번호를 물어봅니다. 그렇게해서 접속이 잘되면 성공입니다.
# 로그인 계정
login as : root
# 구글 OTP에 나오는 6자리의 코드를 입력
Verification code:
# 패스워드
Password :
추가 유저 계정 접속 확인 및 OTP 설정
이번에는 root가 아닌 다른 유저계정을 하나 생성하여 접속해보겠습니다.
접속을 하면 평소 접속하시던 방법 그대로 접속할수 있다는것을 알수있습니다.
그 이유는 위에서 설명하였듯이 /etc/pam.d/sshd에서 아래와 같이 설정하였기 때문입니다.
# .google_authenticator가 있는 유저만 OTP 방식으로 접속하게끔 하는 설정
vi /etc/pam.d/sshd
auth required pam_google_authenticator.so nullok
그렇다면 새로 만든 유저계정 testuser에 OTP를 적용하려면 어떻게 해야할까요.
방법은 아까와 같습니다.
아까와 같이 google-authenticator 명령어를 이용하여 OTP를 설정하여야합니다.
단 설정할 계정에 로그인하여 이 명령어를 사용하여야합니다.
앞으로 새롭게 만들계정에 OTP가 필요하면 로그인이 필요하다는것이죠.
설정 부분은 모두 y를 누른뒤 설정을 완료하면 되며
이번에는 Your new secret key is: 부분을 잘 봐주시기 바랍니다.
# 계정 OTP 설정
google-authenticator
# secret key 복사 (아래는 예시입니다.)
Your new secret key is: MEL
다시 스마트폰으로 이동한후 빨간색 버튼으로 되어있는 +를 터치합니다. 이번에는 바코드 스캔이 아닌 제공된 키 입력을 터치합니다.
계정 이름 입력에는 계정 이름을 입력한후 키를 입력하세요는 Your new secret key is 부분의 키를 적어줍니다. 개인적인 생각으로는 손가락이 큰 사람은 이 방법이 매우 불편합니다. 저걸 적는데만 시간이 좀 많이 걸렸네요. 스마트폰이 괜찮다면 바코드로 QR코드를 찍는게 시간이 매우 절약됩니다.
추가하면 이번에는 testuser의 OTP 번호가 생성됩니다.
생성한 유저 계정인 testuser로 접속을 진행해보면 아까 root로 접속했을때와 같이 접속할수가 있습니다.
후기
이렇게 google-authenticator를 이용하여 리눅스 SSH에 OTP 접속을 진행하는 방법에 관해 정리해보았습니다. 이렇게 좋은 기능도 있지만 단점이 있다면 스마트폰이 초기화 또는 분실시 어플에 저장되어있던 OTP 계정이 사라지게되어 SSH 접속을 정상적으로 할수 없는 문제점이 있습니다. 이점은 좀더 확인을 해봐야할것같습니다. 장단점이 확실하지만 한번 이용해보셔도 괜찮지않을까 생각합니다.
When you login first time using a Social Login button, we collect your account public profile information shared by Social Login provider, based on your privacy settings. We also get your email address to automatically create an account for you in our website. Once your account is created, you'll be logged-in to this account.
DisagreeAgree
I allow to create an account
When you login first time using a Social Login button, we collect your account public profile information shared by Social Login provider, based on your privacy settings. We also get your email address to automatically create an account for you in our website. Once your account is created, you'll be logged-in to this account.
[…] 6 SSH OTP 접속방법 http://idchowto.com/?p=35166구글 검색 […]
[…] 익히 알려진 google-authenticator 를 이용한 방식이 아닌 .bashrc + pwgen (패스워드 랜덤생성) + Telegram_api 를 […]
[…] , OPEN VPN 의 OTP 기능을 조합하여 이용 할수 있습니다. http://idchowto.com/?p=35480 http://idchowto.com/?p=35166 jQuery(document).ready(function($) { $.post('http://idchowto.com/wp-admin/admin-ajax.php', […]