본문 바로가기

Linux Unix/Command

[ Linux ] PAM - 로그인 실패 제한과 계정 잠금하기

반응형

PAM에서 로그인 실패 횟수를 제한하는 기능은 보안 강화에 필수적입니다. PAM에서는 pam_faillock.so, pam_tally2.so와 같은 모듈을 조합하여 계정 잠금과 잠금 해제 기능을 구현할 수 있습니다. 특히 pam_faillock.so는 계정 잠금과 실패 제한을 위한 기능을 제공하여, 특정 횟수 이상 실패 시 계정을 잠그고 일정 시간이 지나면 자동으로 해제할 수 있습니다. 예제와 함께 설정 방법을 설명하겠습니다.


1. pam_faillock.so를 사용한 계정 잠금 설정

pam_faillock.so 모듈은 최근 PAM의 실패 제한과 계정 잠금 설정에 널리 사용됩니다. 보통 pam_unix.so와 함께 조합하여 사용하며, 특정 횟수 이상 로그인 시도가 실패하면 계정을 잠그고, 일정 시간이 지나면 자동으로 잠금 해제하는 방식입니다.

1. 예제 설정

다음은 /etc/pam.d/sshd와 같은 SSH 로그인 관련 PAM 설정 파일에서 pam_faillock.sopam_unix.so를 조합하여 계정 잠금을 구현하는 예제입니다.

auth required pam_faillock.so preauth silent audit deny=5 unlock_time=600
auth [success=1 default=bad] pam_unix.so
auth [default=die] pam_faillock.so authfail deny=5 unlock_time=600
account required pam_faillock.so

설명

  • auth required pam_faillock.so preauth silent audit deny=3 unlock_time=600 fail_interval=900
    • preauth: 이 모듈이 사전 인증 단계에서 실행되도록 설정합니다.
    • silent: 오류 메시지를 출력하지 않고 조용히 작동합니다.
    • audit: 실패한 시도를 로그에 기록합니다.
    • deny=3: 로그인 실패가 3회 이상 발생하면 계정을 잠급니다.
    • unlock_time=600: 계정이 잠긴 후 10분(600초) 후에 자동으로 잠금을 해제합니다.
    • fail_interval=900: 실패 횟수를 계산할 때 15분(900초) 동안의 시도만 감시합니다.
  • auth [success=1 default=bad] pam_unix.so
    • pam_unix.so: 로컬 계정 인증을 담당합니다.
    • [success=1 default=bad]: 인증이 성공하면 다음 모듈(pam_faillock.so authfail)을 건너뛰고, 실패하면 bad로 간주하여 실패 처리를 진행합니다.
  • auth [default=die] pam_faillock.so authfail deny=5 unlock_time=600
    • authfail: 이전 인증이 실패했을 때 실행됩니다.
    • deny=5, unlock_time=600: 앞서 설정한 것과 동일하게 작동합니다.
    • default=die: 인증 실패 시 전체 인증을 종료합니다.
  • account required pam_faillock.so
    • pam_faillock.soaccount 단계에 추가하여, 계정 잠금 상태를 확인하고 해제 여부를 결정합니다.

2. 예제 설정

다음은 /etc/pam.d/sshd와 같은 SSH 로그인 관련 PAM 설정 파일에서 pam_faillock.sopam_unix.so를 조합하여 계정 잠금을 구현하는 예제입니다.

auth        required                                     pam_faillock.so preauth silent audit deny=5 unlock_time=600
auth        [success=1 default=bad]                      pam_unix.so nullok
auth        [default=die]                                pam_faillock.so authfail audit deny=5 unlock_time=600
auth        sufficient                                   pam_faillock.so authsucc audit deny=5 unlock_time=600
account required pam_faillock.so

설명

  • 'auth sufficient pam_faillock.so authsucc audit deny=5 unlock_time=600'
    • authsucc: 인증 성공할 경우 이전 실패 기록을 모두 지웁니다.

동작 방식

  1. 사용자가 로그인 시도를 할 때 pam_faillock.so 모듈이 사전 인증을 수행합니다.
  2. pam_unix.so 모듈에서 로컬 계정 인증이 수행됩니다.
  3. 인증이 실패하면 pam_faillock.so 모듈의 authfail 설정이 작동하여 실패 횟수를 기록하고, 설정된 실패 횟수를 초과하면 계정을 잠급니다.
  4. 잠긴 계정은 설정된 unlock_time이 지난 후 자동으로 잠금 해제됩니다.

# Generated by authselect on Mon Nov  4 18:43:05 2024
# Do not modify this file manually.

auth        required                                     pam_env.so
auth        required                                     pam_faildelay.so delay=2000000
auth        [default=1 ignore=ignore success=ok]         pam_usertype.so isregular
auth        [default=1 ignore=ignore success=ok]         pam_localuser.so
auth        required                                     pam_faillock.so preauth silent audit deny=5 unlock_time=600
auth        [success=1 default=bad]                      pam_unix.so nullok
auth        [default=die]                                pam_faillock.so authfail audit deny=5 unlock_time=600
auth        sufficient                                   pam_faillock.so authsucc audit deny=5 unlock_time=600
auth        [default=1 ignore=ignore success=ok]         pam_usertype.so isregular
auth        sufficient                                   pam_sss.so forward_pass
auth        required                                     pam_deny.so

account     required                                     pam_unix.so
account     sufficient                                   pam_localuser.so
account     sufficient                                   pam_usertype.so issystem
account     [default=bad success=ok user_unknown=ignore] pam_sss.so
account     required                                     pam_permit.so
account     required                                     pam_faillock.so

password    requisite                                    pam_pwquality.so local_users_only
password    sufficient                                   pam_unix.so sha512 shadow nullok use_authtok
password    [success=1 default=ignore]                   pam_localuser.so
password    sufficient                                   pam_sss.so use_authtok
password    required                                     pam_deny.so

session     optional                                     pam_keyinit.so revoke
session     required                                     pam_limits.so
-session    optional                                     pam_systemd.so
session     [success=1 default=ignore]                   pam_succeed_if.so service in crond quiet use_uid
session     required                                     pam_unix.so
session     optional                                     pam_sss.so

2. pam_tally2.so를 사용한 계정 잠금 설정 (구버전)

pam_tally2.so는 PAM에서 오래전부터 제공되던 실패 횟수 제한 모듈로, 최근에는 pam_faillock.so로 대체되는 추세입니다. 하지만 여전히 일부 시스템에서는 pam_tally2.so가 사용될 수 있습니다.

예제 설정

auth required pam_tally2.so deny=3 unlock_time=600 onerr=fail
auth required pam_unix.so

account required pam_tally2.so

설명

  • auth required pam_tally2.so deny=3 unlock_time=600 onerr=fail
    • deny=3: 로그인 실패가 3회 이상 발생하면 계정을 잠급니다.
    • unlock_time=600: 계정이 잠긴 후 10분 후에 자동으로 잠금을 해제합니다.
    • onerr=fail: 오류가 발생할 경우 실패로 처리합니다.
  • auth required pam_unix.so
    • 로컬 계정 인증을 수행하는 pam_unix.so 모듈을 사용하여 기본 인증을 진행합니다.
  • account required pam_tally2.so
    • 계정 잠금 상태를 확인하고 해제 여부를 결정합니다.

동작 방식

  1. 로그인 시도가 발생하면 pam_tally2.so 모듈이 로그인 실패 횟수를 기록하고, 지정된 횟수를 초과하면 계정을 잠급니다.
  2. 계정이 잠기면 unlock_time 옵션에 따라 일정 시간이 지난 후 자동으로 잠금이 해제됩니다.

요약

  • pam_faillock.sopam_unix.so를 조합하면, 사용자가 일정 횟수 이상 인증에 실패할 경우 계정이 잠기고 일정 시간이 지나면 잠금이 자동으로 해제됩니다.
  • pam_tally2.so는 오래된 모듈로, 최신 시스템에서는 주로 pam_faillock.so를 사용하는 것이 권장됩니다.

이 설정을 통해 무차별 대입 공격을 방어하고, 일정 횟수 이상 실패한 계정의 로그인을 잠금 처리하여 보안을 강화할 수 있습니다.

반응형