프로그래밍

Linux Two-Factor Authentication 적용하기

gooooooood 2021. 2. 15. 16:46
반응형

Two-factor authentication (2FA)는 Multi-factor authentication의 한 종류로 서버 접속을 위해서 기존에 사용하던 password 이외에 추가적인 OTP 또는 verification code를 요구하여 서버 보안을 더욱 강화하는 방법입니다.

 

5분만에! 간단하게 설정하는 방법에 대해서 알아보도록 하겠습니다.

 

 

Step 1 - Google PAM 모듈 설치

일단, 서버에 Google PAM 모듈을 설치해야합니다. 이 모듈은 사용자가 TOTP를 사용하여 Linux 시스템에서 인증할 수 있게 해줍니다.

# 먼저 Ubuntu repositories를 업데이트하고,
$ sudo apt-get update

# google pam을 설치합니다.
$ sudo apt-get install libpam-google-authenticator

 

 

Step 2 - 2FA 설정

설치가 완료되면 아래 커맨드를 통해서 google PAM 모듈을 실행합니다.

$ google-authenticator

실행하게 되면, 다음과 같은 옵션 선택으로 이어집니다.

Do you want authentication tokens to be time-based (y/n) y
Do you want me to update your "~/.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, tokens are good for 30 seconds and 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. If you experience problems with poor
time synchronization, you can increase the window from its default
size of 1:30min to about 4min. Do you want to do so (y/n) n
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

모든 설정이 완료되면 /home/.ssh/google_authenticator 파일에 모든 설정이 저장됩니다.

위 화면에서 secret key는 google Authentication 어플리케이션에 등록하고 OTP를 받아야 하므로 따로 저장해두는 것이 좋습니다. (만약 잊어버렸다면 /home/.ssh/google_authenticator에서 찾을 수 있습니다.)

 

 

Step 3 - 2FA 활성화시키기

- 2FA 설정

/etc/pam.d/common-auth # 모든 sudo 명령에 2FA 적용시
/etc/pam.d/common-session # 로그인에만 2FA 적용시

# 아래 설정을 추가합니다.
auth required pam_google_authenticator.so nullok

 

- PAM 설정

이제 서버가 sshd 에서 google authenticator 를 사용하도록 설정 변경해야 합니다.

# 설정 파일 경로
vim /etc/pam.d/sshd 

# 파일에 다음과 같은 설정을 추가합니다.
#%PAM-1.0
auth       required     pam_google_authenticator.so nullok secret=${HOME}/.ssh/google_authenticator
auth       required     pam_sepermit.so

 

- SSH 서비스 설정

# 설정 파일 경로
/etc/ssh/sshd_config

# 다음 설정들을 변경합니다.
PasswordAuthentication yes
ChallengeResponseAuthentication yes
UsePAM yes

# sshd 서비스 재구동
service sshd restart 

서버에서의 모든 설정이 완료되었습니다.

 

 

- Client 설정

ssh 설정 파일인 ~/.ssh/config에 다음과 같은 설정을 추가 합니다.

Host example.com
    HostName example.com
    PasswordAuthentication yes
    ChallengeResponseAuthentication yes
    PreferredAuthentications keyboard-interactive

 

 

 

Step 4 - 2FA 테스트하기

이제 서버에 ssh를 통해 접속을 시도하면 아래 화면과 같이 Password 뿐만아니라 Verification code를 요구합니다.

 

Two-factor authentication !!

 

이전에 받은 secret key를 google authentication 어플리케이션에 등록하면 아래와 같이 30초 마다 바뀌는 TOTP 코드(Verification code)를 확인할 수 있습니다.

Verification code

이렇게 간단하게 google authentication을 활용한 서버 2FA 설정이 완료 되었습니다.

 

추가로, 직접 테스트하진 않았지만 /home/.ssh/google_authenticator 파일을 복사하여 다른 서버에도 동일한 TOTP 코드를 사용할 수 있다고 합니다. 많은 서버를 관리하는 관리자의 경우 하나의 OTP로 관리하면 조금 덜 귀찮아 질 수 있겠네요.

 

이상으로 정말 간단하게 2FA를 설정하는 방법에 대해서 알아봤습니다. 본문은 추가적인 설명을 모두 제외하고 빠르게 설정하고 기능을 확인할 수 있는데 초점을 두었습니다. 조금 더 깊은 내용 및 다양한 설정방법에 대해서는 아래 참고 글을 한번씩 읽어보시는 것도 좋을 것 같습니다.

 

 

 

 

[참고]

How To Configure Multi-Factor Authentication on Ubuntu

google authenticator를 사용하여 Linux ssh에 OTP 적용하기

반응형

'프로그래밍' 카테고리의 다른 글

백엔드 개발자 로드맵  (0) 2020.11.02