카테고리 보관물: OS

리눅스 Shell 및 ssh 계정 잠금 설정

개요

리눅스 서버에서 SSH 로그인 실패가 반복되는 경우 해당 계정을 자동으로 잠금(lock)하도록 PAM(Pluggable Authentication Modules)을 설정할 수 있습니다. pam_tally2 또는 pam_faillock 모듈을 사용해 일정 횟수 로그인 실패 시 계정을 잠그고, 관리자가 수동으로 잠금을 해제하는 방법을 정리합니다.

  • 콘솔 및 원격 접속(ssh)시 로그인 실패시 계정 잠금 설정
  • pam_tally.so와 pam_tally2.so은 기본값 및 옵션 차이가 있음
// CentOS 5.X 버전 이하용
# /etc/pam.d/system-auth , /etc/pam.d/password-auth 에 이하 설정 추가

// 3회 입력 실패시 계정이 잠기며 잠금 초기화 간격은 2분, root 계정은 잠기지 않고 로그인이 성공하면 실패 횟수는 초기화
auth required pam_tally.so no_magic_root deny=3 unlock_time=120
account required pam_tally.so no_magic_root reset
// CentOS 6.X 버전 이상부터는 pam_tally2.so를 사용할 수 있으므로 이하 설정 권고
# /etc/pam.d/system-auth , /etc/pam.d/password-auth 에 이하 설정 추가

// 3회 입력 실패시 계정이 잠기며 잠금 초기화 간격은 2분, 기본적으로 root 계정은 잠기지 않고 성공하면 실패 횟수는 초기화됨
// even_deny_root 인수를 사용하게 되면 root 비밀번호 입력 실패시 계정이 잠길 수 있음
auth required pam_tally2.so deny=3 unlock_time=120
account required pam_tally2.so

RHEL 8 / 9에서의 pam_faillock 사용

RHEL 8 및 CentOS Stream 8 이상에서는 pam_tally2가 deprecated되고 pam_faillock으로 대체되었습니다. pam_faillock은 기존 pam_tally2와 설정 방식이 다르며, /etc/security/faillock.conf 파일을 통해 중앙에서 정책을 관리합니다. authselect 프로파일과 연동되어 PAM 설정을 일관성 있게 관리할 수 있습니다.

# /etc/security/faillock.conf 주요 설정
deny = 3              # 3회 실패 시 계정 잠금
unlock_time = 120     # 120초 후 자동 해제
even_deny_root        # root 계정도 잠금 대상 포함 (운영 환경 주의)
fail_interval = 300   # 실패 횟수 집계 기간(초)

# pam_faillock 활성화 (RHEL 8/9, authselect 사용)
# authselect select sssd with-faillock --force
# 또는 /etc/pam.d/system-auth, /etc/pam.d/password-auth에 직접 추가:
# auth required pam_faillock.so preauth silent
# auth required pam_faillock.so authfail
# account required pam_faillock.so

계정 잠금 상태 확인 및 수동 해제

계정이 잠금 상태인지 확인하고 관리자가 직접 잠금을 해제하는 방법은 pam_tally2와 pam_faillock 모두 전용 명령어를 제공합니다. 잠긴 계정을 해제하지 않으면 unlock_time이 경과해야만 자동으로 풀리므로, 업무 시간 중 긴급하게 해제해야 하는 경우 아래 명령어를 사용합니다.

# pam_tally2 (RHEL 6/7)
# 특정 계정의 실패 횟수 확인
pam_tally2 --user <admin-user>

# 잠금 해제 (실패 횟수 초기화)
pam_tally2 --user <admin-user> --reset

# pam_faillock (RHEL 8/9)
# 특정 계정의 잠금 상태 확인
faillock --user <admin-user>

# 잠금 해제
faillock --user <admin-user> --reset

PAM 잠금 정책 적용 후에는 정책이 실제로 동작하는지 테스트 계정으로 반드시 검증합니다. root 계정 잠금(even_deny_root)은 운영 서버에서는 콘솔 접근이 불가능해질 위험이 있으므로 신중히 적용해야 합니다.

SSH 접근 제어와 PAM 잠금 정책의 연계

PAM 계정 잠금 설정은 SSH 서비스의 접근 제어 설정과 함께 적용하면 더 강력한 보안을 구현할 수 있습니다. /etc/ssh/sshd_config에서 MaxAuthTries를 낮게 설정하면 SSH 레이어에서 먼저 접속을 끊고, PAM 레이어에서 누적 실패 횟수를 집계하여 계정을 잠급니다. 두 설정은 독립적으로 동작하므로 함께 적용해야 시너지를 발휘합니다.

운영 서버에 권장되는 SSH 보안 강화 항목은 다음과 같습니다. PermitRootLogin no로 root SSH 직접 로그인을 차단하고, PasswordAuthentication no로 공개키 인증만 허용하면 brute force 공격 시도 자체를 원천 차단할 수 있습니다. 공개키 인증만 허용하는 환경에서는 PAM 비밀번호 잠금의 실질적 의미가 줄어들지만, su/sudo 등 로컬 인증 경로를 통한 무차별 대입 공격 방지를 위해 PAM 잠금 정책은 여전히 유효합니다.

PAM 설정 변경 후에는 반드시 별도의 세션(SSH 창)을 열어둔 상태에서 변경 사항을 적용해야 합니다. 잘못된 설정으로 모든 인증이 차단될 경우 콘솔 접근이나 다른 열린 세션을 통해 복구할 수 있습니다.

참고

참고 문서: pam_tally2 매뉴얼 페이지 · RHEL PAM 보안 강화 가이드