[Linux] 반드시 알아야 할 PAM(Pluggable Authentication Modules)

PAM은 “Pluggable Authentication Modules”의 약자로, 인증 시스템을 모듈화하여 여러 서비스에서 일관된 인증 및 액세스 제어를 제공하는 데 사용됩니다. 저수준의 인증 모듈을 고수준의 API로 통합하여 애플리케이션에 대한 동적 인증 지원을 제공합니다.

PAM의 동작 원리를 단순화하면 다음과 같습니다:
  1. 사용자가 시스템에 로그인 또는 서비스에 액세스하려고 시도합니다.
  2. PAM은 해당 서비스에 대한 설정을 확인하여 필요한 모듈을 호출합니다.
  3. 각 모듈은 사용자 인증 및 권한 부여를 위해 필요한 작업을 수행합니다. 이러한 작업에는 사용자 이름 및 암호 확인, 제한된 액세스 권한 확인 등이 포함될 수 있습니다.
  4. 각 모듈은 성공 또는 실패와 같은 결과를 반환합니다.
  5. PAM은 모든 모듈의 결과를 종합하여 최종 인증 및 액세스 제어 결정을 내립니다.
PAM 환경 설정을 위한 주요 항목은,
  1. /etc/pam.d/ 디렉터리:
    PAM 구성 파일이 위치한 디렉터리로, 각 서비스별로 별도의 파일이 존재합니다. 이 파일들에는 해당 서비스에 대한 PAM 설정이 포함되어 있습니다. 대표적으로 /etc/pam.d/system-auth 파일과 /etc/pam.d/password-auth 파일이 있으며 기능 및 차이점은 아래와 같습니다.
    • system-auth 파일:
      – 시스템의 전반적인 인증 설정, 보안 정책 적용을 포함합니다.
      – 보통 시스템 로그인, su(Switch User), sudo(Super User Do) 등과 관련된 인증에 대한 설정이 포함됩니다.
      – 다른 PAM 파일에서 공통적으로 사용되는 설정을 여기에 추가할 수 있습니다.
    • password-auth 파일:
      – 사용자의 패스워드 관련 설정을 중심으로 하기 때문에, 패스워드 인증과 관련된 모든 설정이 이 파일에 포함됩니다.
      – 주로 패스워드 변경, 패스워드 유효성 검사 등과 관련된 설정이 여기에 포함됩니다.
    [PAM 구성 파일 필드 형식]
    module-type     control-flag     module-name     module-arguments

    1. module-type
      • auth :
        사용자를 실제로 인증, 비밀번호 확인을 담당하는 모듈
      • account :
        서버에 대한 접근 허가 등 계정에 대한 검증 작업 수행
      • password :
        사용자의 비밀번호 설정 및 변경 조건을 지정하고 auth 모듈과 연동
      • session :
        사용자 인증 성공 후 세션의 시작, 종료와 관련된 작업 수행
    2. control-flag
      • requisite :
        인증 체크는 반드시 성공해야 함. 실패 시 즉시 실패 반환
      • required :
        인증 체크는 반드시 성공해야 함. 실패 시 즉시 실패를 반환하지 않고 동일한 모듈 타입의 모듈 체크를 모두 수행하고 실패 반환
      • sufficient :
        인증 체크가 성공하면 나머지 모듈들의 체크를 수행하지 않음(단, 이전의 required 모듈이 모두 성공일 경우)
      • optional :
        인증 체크의 성공과 실패가 중요하지 않음. 다른 모듈의 인증 체크가 모두 성공했다면 이 모듈의 결과를 반환
      • include :
        지정한 환경 설정 파일을 로드하여 적용
    3. module-name :
      환경 설정의 대상이 되는 모듈 이름 입력, /lib64/security/ 디렉터리에 위치
    4. module-arguments :
      지정한 모듈에게 전달하려는 파라미터 입력
  2. PAM 모듈:
    /lib64/security/ 디렉터리에 저장되어 있으며, 각각의 PAM 모듈은 특정한 작업을 수행하며, 인증 및 액세스 제어에 관련된 다양한 작업을 담당합니다.
PAM 주요 모듈 및 사용법(예제)에 대해 알아보겠습니다.
  1. 주요 모듈: ls -l /lib64/security/로 확인
    모듈 이름 기능
    pam_access.so 특정 사용자, 그룹 또는 호스트에 대한 액세스를 허용하거나 거부
    pam_unix.so /etc/passwd와 /etc/shadow 파일을 사용하여 사용자 인증 처리
    pam_limits.so 사용자가 소비할 수 있는 리소스의 양을 제한하고, 파일 디스크립터, 프로세스 개수 등의 제한을 설정
    pam_pwquality.so 비밀번호 정책을 적용하여, 비밀번호의 길이, 복잡성 등을 확인하여 강력한 비밀번호 사용을 유도
    pam_tally.so
    pam_tally2.so
    pam_faillock.so
    실패한 로그인 시도 횟수와 잠금 해제 시간을 추적하여 임계값을 초과하면 계정을 잠금 상태로 전환
  2. pam_unix.so 모듈 사용법
    • /etc/pam.d/password-auth 파일 파일 설정 : 비밀번호 변경 시 마지막 5개의 비밀번호를 기억하여 동일한 비밀번호 사용 방지
      $ vi /etc/pam.d/password-auth
      # sha512는 비밀번호 해시 알고리즘을 지정하고, shadow는 shadow 파일을 사용함을 나타냅니다.
      password sufficient pam_unix.so use_authtok sha512 shadow remember=5
      
  3. pam_pwquality.so 모듈 사용법
  4. pam_tally.so 모듈 사용법
    • pam_tally.so 모듈 옵션
      • onerr=[fail|succeed]: 오류가 발생할 때의 동작을 지정합니다.(fail-오류 메시지 반환, succeed-성공적으로 처리)
      • deny=n: 사용자의 로그인 시도가 거부되기 전에 허용된 로그인 시도 횟수(n)를 지정합니다.
      • unlock_time=n: 사용자 계정이 잠겨 있는 시간(n초)을 지정합니다. 지정된 시간이 지나면 사용자는 다시 로그인할 수 있습니다.
      • even_deny_root=n: root 계정에 대한 로그인 시도도 실패한 횟수에 포함시킬지 여부를 지정합니다.
      • root_unlock_time=n: root 계정이 잠겨 있는 시간(n초)을 지정합니다. 지정된 시간이 지나면 root 계정은 다시 로그인할 수 있습니다.
      • magic_root: uid=0은 사용자는 오류 횟수가 증가하지 않습니다.(기록하지 않습니다)
      • no_magic_root: root 사용자에게도 패스워드 잠금 설정 적용
      • audit: 로그인 시도에 대한 감사 로깅을 사용할지 여부를 지정합니다.
      • silent: 실패한 로그인 시도에 대한 사용자에게 경고 메시지를 표시하지 않도록 설정합니다.
      • no_log_info: 실패한 로그인 시도에 대한 추가 정보를 로그에 기록하지 않도록 설정합니다.
      
    • pam_tally 명령어 사용법
      – 로그인 실패 횟수 확인: pam_tally [--user 사용자명]
      – 로그인 실패 횟수 초기화: pam_tally --user 사용자명 --reset
    • /etc/pam.d/system-auth 파일 설정: 패스워드 5회 실패 시 600초간 계정 잠금
      $ vi /etc/pam.d/system-auth
      auth        required      pam_tally.so deny = 3 unlock_time = 600
      account     required      pam_tally.so
      
  5. pam_faillock.so모듈 사용
    • pam_faillock.so모듈 옵션
      • deny=n: 계정이 잠기기 전에 허용되는 실패한 로그인 시도 횟수를 설정합니다.
      • unlock_time=n: 계정이 잠긴 후 자동으로 잠금이 해제되는 시간(초)을 설정합니다.
      • even_deny_root: root 계정에 대해서도 실패한 로그인 시도 횟수를 추적합니다.
      • root_unlock_time=n: root 계정에 대한 잠금이 해제되는 시간(초)을 설정합니다.
      • fail_interval=n: 연속된 로그인 실패 사이의 시간 간격(초)을 설정합니다. 이 간격 내에 여러 번의 실패한 로그인 시도가 있으면, 이를 하나의 실패로 간주합니다.
      • admin_group=name: 특정 그룹의 사용자가 잠긴 계정을 재설정할 수 있는 권한을 부여합니다.
      • audit: 로그인 실패 이벤트를 시스템 로그에 기록합니다.
      • silent: 사용자에게 잠금 상태에 대한 경고를 표시하지 않습니다.
      • no_log_info: 시스템 로그에 추가 정보를 기록하지 않습니다.
      
    • /etc/pam.d/system-auth 파일 및 /etc/pam.d/password-auth 설정: 패스워드 5회 실패 시 600초간 계정 잠금
      #일반적으로 기본적인 시스템 인증 및 권한 관련 작업에 대한 설정이 포함
      #다른 pam 구성 파일에서 "@include system-auth"와 같은 형태로 참조
      $ vi /etc/pam.d/system-auth
      auth        required        pam_faillock.so preauth silent audit deny=5 unlock_time=600
      auth        [default=die]   pam_faillock.so authfail audit deny=5 unlock_time=600
      account     required        pam_faillock.so
      
      #사용자가 비밀번호를 변경하거나 암호를 재설정할 때 실행되는 모듈 및 정책을 설정
      $ vi /etc/pam.d/password-auth
      auth        required        pam_faillock.so preauth silent audit deny=5 unlock_time=600
      auth        [default=die]   pam_faillock.so authfail audit deny=5 unlock_time=600
      account     required        pam_faillock.so
      

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다