본문 바로가기
Linux

How to Use Multi-Factor in SSH on Ubuntu/CentOS

by 올엠 2020. 11. 18.
반응형

https://www.youtube.com/watch?v=MExM0EIe80k

1. Install Google OTP

CentOS

#yum install google-authenticator

Ubuntu

#apt-get install libpam-google-authenticator

패키지 설치 관련해서 에러가 나타난다면,  Ubuntu는 atp-get update, CentOS는 yum install epel-release 를 진행한후 다시 시도해보자.

 

2. Activate Google OTP

CentOS/Ubuntu 모두 동일하게 설정한다.

VI 편집기를 이용해서 /etc/pam.d/sshd에 pam_google_authenticator.so 를 추가하도록 한다.

# vi /etc/pam.d/sshd

내용은 아래와 같다.

#%PAM-1.0
auth       required     pam_google_authenticator.so nullok 

 

3. SSH Configuration

이제 SSH에서 Google OTP 사용 설정을 하면 된다.

#vi /etc/ssh/sshd_config

 

ChallengeResponseAuthentication yes
ChallengeResponseAuthentication : 응답 인증 방식을 사용 (2FA인증)

 

정상적으로 설정되었다면 SSH를 재시작하자.

systemctl reload sshd
systemctl restart sshd

 

Configuring 2FA for a User

Google OTP 사용 준비가 완료되었다. OTP 사용자 인증을 위해서는 Google Authenticator 인증 파일을 생성해야 Google OTP 이용이 가능하다. (각 사용자 홈디렉토리의 .google_authenticator 파일 필요)

개별 유저별로 로그인하여, 아래 명령을 실행하여, Google OTP 설정을 진행하도록 하자.

$google-authenticator

 

파일 생성 위치
# Do you want me to update your "/root/.google_authenticator" file? (y/n) y
.google_authenticator 기본 생성하는 파일입니다.

 

중간자공격(man-in-middle-attack) 옵션 - Yes 추천
# 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
30초 이내 2회 이상 인증이 완료된 이후에도 시도가 가능하도록 할 것인지
일반적으로 인증 완료되었다면 다시 시도할 일이 없다. 다만 30초 이내에 다시 로그인하는 것이 빈번하다면 n를 선택

 

시간상 오차 방지하는 옵션 - Yes 추천
# 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
30초마다 OTP 코드가 변경되는데, 앞뒤로 가지고 있는 OTP 코드를 사용할 수 있도록 할 것인지
타임 서버 관련해서 오차가 생각보다 많이 발생하기 때문에 Y를 하기를 추천한다.

 

TroubleShooting

마지막으로 정상적으로 사용이 되지 않을때 트러블 슈팅이 필요할 수 있다.

 

check ssh logon log

로그인 관련된 인증 문제시 /var/log/secure 에서 확인할 수 있다. 

tail /var/log/secure -f

 

check Pam configuration

vi /etc/pam.d/sshd

 

.google_authenticator File Check

Google OTP를 사용하기 위해서는  ${HOME}/.google_authenticator 파일이 위치해야 한다. 해당 파일이 정상적인지 확인해야 한다.

 

Check the server time and synchronize with the time server with the following command.

ntpdate -q pool.ntp.org

반응형