Cent OS(Linux) 2factor 인증 사용하기(Feat. Google OTP)
요즘은 보안의 중요성이 많이 대두되고있기 때문에 2factor 인증을 많이들 사용하고있을것 같다.
기본적인 2factor 인증은 기본로그인에 사용되는 password 이외에 OTP(One Time Password)를 이용해서 2번의 인증을 거치는것을 의미한다.
가장 유명한것이 아마 Google OTP일것이고 가장 효율성도 뛰어나다고 생각한다.(호환성이 좋음)
리눅스에서도 Google OTP적용이 가능한데 Google OTP를 적용할 경우 ssh 로그인시 한번더 인증을 하게 된다.
보안을 위해서 설정해보도록 하겠다.
google-authenticator 패키지 설치하기.
패키지 설치 이전에 yum update 먼저 시작해주자.
yum update
1. pam 의존성 패키지 및 기타 패키지(소스코드 빌드 및 설치, 컴파일러) 설치
yum install -y git pam-devel autoconf automake libtool gcc make
2. google authenticator pam module 다운로드 (git clone 이용)
git clone https://github.com/google/google-authenticator-libpam
cd google-authenticator-libpam/
./bootstrap.sh
./configure
make && make install
정상적으로 설치가 완료되면 ll /usr/local/lib/security/ 를 치면 아래와같이 나온다.
google authenticator 사용하기
일단 명령어 사용을 위해 패키지도 설치해줘야한다.
yum install google-authenticator
*여기서 설치에러가 나온다면 yum install epel-release
이제 본격적으로 OTP에 등록을 할텐데 전제조건은 Google OTP가 핸드폰에 설치되어있어야 한다.(플레이스토어 ㄱㄱ)
그리고 otp를 설정할 계정으로 su 변경을 하고 selinux를 피하기위한 mkdir .ssh 생성
google-authenticator -t -d -r 3 -R 30 -w 5
-s ~/.ssh/.google_authenticator
명령어를 입력하면 아래처럼 코드 / 시크릿키 / emergency key가 나오는데
어플에 등록하기 위해서는 맨위 사각형의 code를 웹에 붙여넣기하자.
*나머지 secret key나 emergency key는 설정한 계정 폴더의 .ssh/.google_uthenticator 에 존재한다
코드를 웹에 붙여넣기하면 QR코드가 나온다.
내가 설정한 옵션은 30초동안 3번 로그인 시도 허용 +5초간 유효 시간기반 OTP,이전에 사용한 토큰 재사용 금지.
옵션 설명
- t, –time-based: 시간 기반 OTP 를 설정.
- -d, –disallow-reuse: 이전에 사용한 TOTP 토큰의 재사용을 금지
- -l, –label=: 사용할 label 을 지정하며 구분할 수 있도록 해당 서버의 이름이나 도메인 이름등을 입력하며 여기서는 webserver 로 label 을 지정
- -i, –issuer=: 사용할 발급자를 지정하며 여기에서는 사이트의 메인 도메인 이름을 입력
- -r, –rate-limit=N: -R로 설정한 M초동안 허용할 로그인 횟수를 지정
- -R, –rate-time=M: M 초동안 허용할 로그인 횟수를 지정하며 -r 3 -R 30 은 30초 이내에 최대 3번의 로그인 시도를 허용
- -S, –step-size=S: OTP 토큰을 갱신할 시간을 지정하며 기본 값은 30이며 이경우 30초마다 토큰을 새로 생성
- -w, –window-size=W: OTP 토큰은 -S 로 지정한 토큰 갱신 시간(예: 30초) 동안만 유효하지만 입력시 초 단위로 이를 맞추기는 쉽지 않음. 즉 31초에 입력할 경우 OTP 토큰이 갱신되므로 무효화되어 버리며 이런 불편함을 줄이이고 -w 로 지정한 시간만큼 앞위로 유효하게 되며 5로 지정할 경우 토큰 갱신 시간이 30초라면 35초까지 해당 OTP 토큰이 유효
- -s, –secret=: google otp 의 secret 을 저장할 파일 경로를 지정하며 기본 설정은 $HOME/.google_authenticator 이지만 SELinux를 사용하는 경우 ssh 데몬의 접근을 차단해서 제대로 동작하지 않으므로 SELinux 를 사용하는 경우 .ssh 폴더에 넣어야 제대로 동작함
ssh 설정
vi /etc/pam.d/sshd
auth required /usr/local/lib/security/pam_google_authenticator.so nullok secret=${HOME}/.ssh/.google_authenticator
vi /etc/ssh/sshd.config
먼저 아래항목에서 ChallengeResponseAuthentication no
항목 주석처리
아래의 UsePAM yes 항목을 찾은 후에 위 두줄 추가
PasswordAuthentication yes
ChallengeResponseAuthentication yes
설정 완료 후에는 service sshd restart
로 재시작
적용 테스트
ssh admin-sv@IP
Verification code: 에는 OTP 번호를 넣으면된다.