CentOS 6 SSH OTP 접속방법

| 2017년 6월 9일 | 0 Comments

평소에 여러분은 어떤 방식으로 리눅스 ssh 접속을 진행하시나요?
보통 유저와 패스워드로 접속하시는 분도 있을것이고 keyzen 설정으로 인증키를
생성후 패스워드를 칠 필요없이 바로 접속하시는 분도 있을거라고 생각합니다.

이번 글에서는 조금 색다르게 접속하는 방법에 대해 정리하고자합니다.
이야기를 조금 벗어나면 사람들은 온라인 게임을 접속하거나 또는 포털사이트, 은행등에 로그인 할때 
좀더 보안을 강화하기위해 OTP를 이용하기도 하는데요.

금일 리눅스에 관해 구글링을 하던중 리눅스의 ssh에 OTP를 걸어 접속하는 방법이 있는것을 알수있었습니다.
그 방법은 google-authenticator를 설치후 이용하는것으로 자세한 내용은 아래를 봐주시기 바랍니다.

서버 사양
OS : CentOS 6.9 64bit
CPU : 1코어
메모리 :1GB
하드디스크 : 30GB

사용한 스마트폰 
기종 : 갤럭시노트 4
어플 : Google OTP

google-authenticator 설치

1.png

먼저 yum의 업데이트를 진행합니다. (무조건 해야하는사항은 아닙니다.)

# yum 업데이트

yum update

2.png

google-authenticator를 설치하기위해 필요한 패키지를 설치합니다.

# google-authenticator를 설치하기위해 필요한 패키지 설치

yum install libtool pam-devel ntp git

3.png

google의 OTP를 정상적으로 이용하려면 ntp 서비스가 구동되어야합니다.
시작후 리부팅이될때 자동적으로 올라오게끔 설정해줍니다.
(rdate 설치 및 스크립트로 시간을 자동적으로 잡아주면 될것같습니다만 실험이 필요합니다.)

# ntpd 시작 및 리부팅시 자동 서비스 시작

/etc/init.d/ntpd start

chkconfig ntpd on

 
4.png
 
src로 이동후 git에서 google-authenticator-libpam를 내려받습니다.
 
# src이동후 git으로 필요한 폴더 다운로드
cd /usr/local/src
git clone https://github.com/google/google-authenticator-libpam
 
5.png
 
bootstrap.sh를 실행합니다.
 
# google-authenticator-libpam 디렉토리로 이동 후 bootstrap.sh를 실행
cd google-authenticator-libpam
./bootstrap.sh
 
6.png
 
설정을 진행합니다. 여기서 –libdir=/lib64를 설정하는 이유는 아래와 같습니다.
이 설정을 진행하지 않고 그냥 설정할시 OTP 부분을 담당하는 pam_google_authenticator.so가
/usr/local/lib/security/pam_google_authenticator.so에 설치되는 문제점이 있기 때문에
이 부분을 lib64로 설치 되게끔 설정을 진행하는겁니다.
 
# 설정 진행
./configure –libdir=/lib64
 
7.png
8.png
 
google-authenticator의 설치를 진행합니다.
 
# google-authenticato 소스 설치 진행 
 make install
 
/etc/pam.d/sshd 설정
 
9.png
 
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
 
10.png
11.png
 
sshd_config에서 아래의 설정을 변경해준후 sshd를 재시작합니다.
 
# sshd_config 설정
vi /etc/ssh/sshd_config
PasswordAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes
 
/etc/init.d/sshd restart
 
유저계정 OTP 설정
 
12.png
 
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 어플리케이션 설치 및 설정

 
13.png
 
OTP를 이용하기위해 Google OTP를 설치합니다. 본 기기는 안드로이드 기반의 갤럭시 노트4입니다.
 
14.png
 
설치가 완료되면 어플을 시작하여 시작을 누른뒤 다음 페이지가 나오면 넘어가기를 누릅니다.
 
15.png
아까 URL을 복사해놓으셨다면 바코드 스캔을 터치하여 OTP의 계정을 추가합니다.
바코드 스캔이 안될경우 다른방법이 있습니다. 그건 밑에서 다시 설명하겠습니다.
 
16.png
17.png
 
허용을 누르면 컴퓨터에 URL을 붙여넣어 이동한뒤 QR코드를 확인하고
스마트폰으로 모니터에 나와있는 QR코드를 찍습니다. 보통 가까이 가져가면 알아서 인식합니다.
 
18.png
 
준비 완료를 누르면 6자리의 코드가 나오는것을 확인할수 있습니다.
 
원격접속 
 
19.png
 
ssh로 접속을 진행해보면 처음에는 로그인할 유저를 묻고 그 다음 OTP의 코드를
물은뒤 비밀번호를 물어봅니다. 그렇게해서 접속이 잘되면 성공입니다.
 
# 로그인 계정
login as : root 
# 구글 OTP에 나오는 6자리의 코드를 입력
Verification code:
# 패스워드
Password :
 
추가 유저 계정 접속 확인 및 OTP 설정
 
20.png
21.png
 
이번에는 root가 아닌 다른 유저계정을 하나 생성하여 접속해보겠습니다.
접속을 하면 평소 접속하시던 방법 그대로 접속할수 있다는것을 알수있습니다.
그 이유는 위에서 설명하였듯이 /etc/pam.d/sshd에서 아래와 같이 설정하였기 때문입니다.
 
# .google_authenticator가 있는 유저만 OTP 방식으로 접속하게끔 하는 설정
vi /etc/pam.d/sshd
auth       required     pam_google_authenticator.so nullok
 
그렇다면 새로 만든 유저계정 testuser에 OTP를 적용하려면 어떻게 해야할까요.
방법은 아까와 같습니다.
 
22.png
 
아까와 같이 google-authenticator 명령어를 이용하여 OTP를 설정하여야합니다.
단 설정할 계정에 로그인하여 이 명령어를 사용하여야합니다.
앞으로 새롭게 만들계정에 OTP가 필요하면 로그인이 필요하다는것이죠.
 
설정 부분은 모두 y를 누른뒤 설정을 완료하면 되며
이번에는 Your new secret key is: 부분을 잘 봐주시기 바랍니다.
 

# 계정 OTP 설정

google-authenticator

# secret key  복사 (아래는 예시입니다.)

Your new secret key is: MEL

23.png

24.png

다시 스마트폰으로 이동한후 빨간색 버튼으로 되어있는 +를 터치합니다.
이번에는 바코드 스캔이 아닌 제공된 키 입력을 터치합니다.

25.png

계정 이름 입력에는 계정 이름을 입력한후 키를 입력하세요는 Your new secret key is 부분의 키를 적어줍니다.
개인적인 생각으로는 손가락이 큰 사람은 이 방법이 매우 불편합니다.
저걸 적는데만 시간이 좀 많이 걸렸네요.
스마트폰이 괜찮다면 바코드로 QR코드를 찍는게 시간이 매우 절약됩니다.

26.png

추가하면 이번에는 testuser의 OTP 번호가 생성됩니다.

27.png

생성한 유저 계정인 testuser로 접속을 진행해보면 아까 root로 접속했을때와 같이 접속할수가 있습니다.

후기

이렇게 google-authenticator를 이용하여 리눅스 SSH에 OTP 접속을 진행하는 방법에 관해
정리해보았습니다. 이렇게 좋은 기능도 있지만 단점이 있다면 스마트폰이 초기화 또는 분실시
어플에 저장되어있던 OTP 계정이 사라지게되어 SSH 접속을 정상적으로 할수 없는 문제점이 있습니다.
이점은 좀더 확인을 해봐야할것같습니다.
장단점이 확실하지만 한번 이용해보셔도 괜찮지않을까 생각합니다.

Category: LINUX, 보안이슈

About the Author ()