메뉴 건너뛰기

imitator

평소에 여러분은 어떤 방식으로 리눅스 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 접속을 정상적으로 할수 없는 문제점이 있습니다.

이점은 좀더 확인을 해봐야할것같습니다.

장단점이 확실하지만 한번 이용해보셔도 괜찮지않을까 생각합니다.


번호 제목 글쓴이 날짜 조회 수
88 Ubuntu 16.04 apt-get 패키지 설치 오류 발생시 해결방법 file 관리자 2017.10.10 98
87 Ubuntu 16.04 단축 URL을 생성하는 YOURLS 설치 방법 file 관리자 2017.08.11 64
86 Ubuntu 16.04 jar 디컴파일 툴 JD-GUI 설치 file 관리자 2017.08.01 96
85 linux apk를 jar로 디컴파일하는 dex2jar 설치 및 사용 방법 file 관리자 2017.08.01 101
84 우분투 16.04 /var/lib/dpkg/lock 잠금 파일을 얻을 수 없습니다 해결법 [1] file 관리자 2017.07.20 524
83 우분투 16.04 LTS 서버 보안 강화를 위한 knockd 설치 방법 file 관리자 2017.07.06 75
82 CentOS 6 comodo Antivirus for Linux 백신 설치 방법 file 관리자 2017.06.15 90
» CentOS 6 ssh google-authenticator로 OTP 접속하는 방법 file 관리자 2017.06.09 94
80 vsftpd 호스트로갈 루트가 없음(No route to host) 에러 처리 방법 file 관리자 2017.05.08 633
79 오픈스택 qcow2 이미지 가져오기 secret 관리자 2017.04.17 0
78 let’s Encrypt SSL 무료 인증서 certbot을 통해 설치 및 설정하는 방법 file 관리자 2017.04.13 1148
77 VPN를 악용하는 xe 광고글 작성자를 iptables로 차단하는 방법 [2] file 관리자 2017.03.31 100
76 리눅스 CentOS 마인크래프트 서버 spigot 1.11.2 설치(셋팅)방법 file 관리자 2017.02.27 519
75 CentOS 6.8 네트워크 간혈적으로 끊김 현상 해결 방법 file 관리자 2017.02.20 903
74 오픈스택 미타카 NoValidHost: No valid host was found. There are not enough hosts available. file 관리자 2017.02.15 421
73 umount target is busy 강제 해제하는 방법 관리자 2017.02.10 262
72 리눅스 centos6에서 java 버전 변경하기 관리자 2016.12.26 753
71 ssh-keygen secret 관리자 2016.12.23 0
70 centos 6 tomcat 설치 file 관리자 2016.12.09 745
69 CentOS 6 sendmail 설치 하는 방법 file 관리자 2016.11.16 1018