CentOS/Ubuntu에서 sudo에 RADIUS 기반 2단계 인증 추가하기
TL;DR
서버에서 pam_radius를 설치하고 /etc/pam.d/sudo에 RADIUS 인증 모듈을 추가하면 sudo 명령에 OTP 기반 2단계 인증을 적용할 수 있습니다. 이 튜토리얼은 CentOS/RHEL 7과 Ubuntu 14.04에서 WiKID 또는 다른 RADIUS 기반 2FA 서버와 연동하는 방법을 단계별로 제공합니다.
중요: 먼저 테스트 환경에서 적용해보고, 루트 세션 접근이 차단되지 않도록 백도어 계정이나 콘솔 접근 경로를 확보하세요.
- 목표 시스템: CentOS/RHEL 7 또는 Ubuntu 14.04
- RADIUS 기반 2단계 인증 서버: WiKID, FreeRADIUS, NPS 등
- 관리자 권한(또는 sudo 사용 권한)
- 중앙 디렉터리(옵션): AD/LDAP로 사용자 관리를 권장
간단 용어 정의
- RADIUS: 원격 인증, 권한 및 계정 서비스(원격 인증 프로토콜).
- PAM: Pluggable Authentication Modules, 리눅스 인증 프레임워크.
- OTP: 일회용 비밀번호, 2단계 인증에서 자주 사용.
개요
이 설정은 sudo 명령에 대해 사용자 이름과 OTP를 RADIUS 서버로 전달해 인증하도록 만듭니다. 장점은 다음과 같습니다.
- 중앙 인증(디렉터리)에서 권한을 관리하고, 별도의 2FA 서버에서 인증을 수행할 수 있음
- FreeRADIUS, WiKID, NPS 등 엔터프라이즈 급 2FA 시스템과 호환
다음 섹션에서 CentOS/RHEL 7과 Ubuntu 14.04 각각에 대해 단계별로 설명합니다.
CentOS/RHEL 7: sudo에 pam_radius 추가하기
- 필수 패키지 설치
sudo yum -y install make gcc pam pam-devel
- pam_radius 소스 다운로드
예시(최신 버전명으로 교체):
wget ftp://ftp.freeradius.org/pub/radius/pam_radius-x.x.x.tar.gz
- 빌드와 설치
tar -xzvf pam_radius-x.x.x.tar.gz
cd pam-radius-x.x.x
sudo ./configure
sudo make
- 빌드된 라이브러리 복사
32비트 시스템:
cp pam_radius_auth.so /lib/security/
64비트 시스템:
cp pam_radius_auth.so /lib64/security/
- 설정 파일 위치 생성 및 복사
sudo mkdir /etc/raddb
cp pam_radius_auth.conf /etc/raddb/server
- /etc/raddb/server 파일 편집
파일 내용 예시(각 줄 형식 유지):
# server[:port] shared_secret timeout (s)
127.0.0.1 secret 1
radius_server_IP secret 3
#
# having localhost in your radius configuration is a Good Thing.
- radius_server_IP와 shared_secret을 실제 값으로 변경하세요.
- 로컬 테스트를 위해 먼저 127.0.0.1(로컬 RADIUS)로 확인하는 것을 권장합니다.
- PAM 구성에서 sudo에 RADIUS 사용 선언
/etc/pam.d/sudo 파일에서 기존의 인증 관련 줄(예: “auth include system-auth”)을 찾아 다음으로 교체합니다:
auth required pam_radius_auth.so
이제 CentOS/RHEL 시스템에서 sudo는 pam_radius로 인증을 시도합니다.
Ubuntu 14.04: sudo에 pam_radius 추가하기
- pam-radius 패키지 설치
sudo apt-get install libpam-radius-auth
- /etc/pam_radius_auth.conf 편집
CentOS 예시와 동일한 형식으로 RADIUS 서버와 시크릿을 추가합니다:
# server[:port] shared_secret timeout (s)
127.0.0.1 secret 1
radius_server_IP secret 3
#
# having localhost in your radius configuration is a Good Thing.
- /etc/pam.d/sudo 편집
common-auth 앞에 pam_radius_auth를 우선 추가합니다:
auth required pam_env.so readenv=1 user_readenv=0
auth required pam_env.so readenv=1 envfile=/etc/default/locale user_readenv=0
auth sufficient pam_radius_auth.so
@include common-auth
@include common-account
@include common-session-noninteractive
- “auth sufficient pam_radius_auth.so”는 RADIUS 인증이 성공하면 이후 인증을 생략하도록 합니다. 필요에 따라 required로 변경할 수 있습니다.
테스트 및 검증
- 먼저 콘솔이나 별도 계정으로 테스트하세요. 실환경에서 sudo 접근을 차단하면 복구가 어려울 수 있습니다.
- sudo 명령 실행 시 프롬프트가 나타나고 OTP 입력을 요구하는지 확인합니다.
- RADIUS 서버 로그(예: WiKID 또는 FreeRADIUS 로그)에서 요청/응답을 확인해 인증 과정의 문제를 추적하세요.
테스트 예시:
sudo -l
sudo ls /root
문제 해결 팁
- PAM 구성이 잘못되면 sudo가 모든 인증을 거부할 수 있으므로 SSH 연결 세션에 대한 별도 루트 접근 수단을 확보하세요.
- /var/log/secure 또는 /var/log/auth.log에서 pam_radius 관련 에러를 확인하세요.
- 타임아웃(timeout) 값을 늘려 네트워크 지연에 대비하세요.
- 시크릿(shared_secret)이 양쪽(RADIUS 서버와 클라이언트)에서 동일한지 확인하세요.
보안 권장사항
- 중앙 디렉터리(예: AD/LDAP)에서 사용자 권한을 관리하고, 인증은 별도의 2FA 서버에서 수행하는 분리된 아키텍처를 권장합니다.
- sudo에 대해 2FA를 적용하면 관리 계정의 무단 권한 상승을 크게 줄일 수 있습니다.
- RADIUS 트래픽은 가능한 경우 전용 관리 네트워크 또는 암호화 터널로 보호하세요.
적용 시나리오와 예외
- 소규모 환경에서 SSH 공개키 기반 인증을 사용하고 있다면 sudo에 추가 2FA를 도입할 필요가 적을 수 있습니다.
- 오프라인 환경(인터넷/네트워크 단절)에서는 RADIUS를 사용할 수 없으므로 로컬 대체 인증(예: Yubikey PAM, 로컬 OTP 파일)을 고려하세요.
체크리스트(배포 전)
- 테스트 환경에서 먼저 적용했는가?
- /etc/pam.d/sudo 변경 전 백업을 만들었는가?
- 콘솔 또는 물리적 접근 경로가 확보되어 있는가?
- RADIUS 서버와 시크릿이 일치하는가?
- 로그에서 인증 요청이 정상 도달하는가?
간단 용어집
- PAM: 모듈식 인증 프레임워크
- RADIUS: 중앙 인증/권한/계정 프로토콜
- OTP: 일회용 비밀번호
요약
이 튜토리얼은 CentOS/RHEL 7과 Ubuntu 14.04에서 pam_radius를 사용해 sudo에 RADIUS 기반 2단계 인증을 추가하는 방법을 설명했습니다. 중앙 디렉터리와 별도 2FA 서버를 결합하면 관리 계정 보안을 크게 강화할 수 있습니다.
추가 참고: 변경을 배포하기 전에 항상 백업을 만들고, 테스트 환경에서 검증한 뒤 순차적으로 운영환경에 적용하세요.