본문 바로가기

Linux Unix/Command

[ Linux ] PAM - 모듈 실행 순서 살펴보기

반응형

1. PAM 구성보기

PAM (Pluggable Authentication Modules)의 실행 순서는 설정 파일에 정의된 대로 각 모듈을 순차적으로 실행하는 구조입니다. PAM은 보안과 관련된 다양한 작업(인증, 계정 관리, 세션 관리 등)을 모듈화하여 처리할 수 있게 해주며, 이러한 모듈의 실행 순서는 각 작업의 성공, 실패 여부에 따라 다음 모듈로 진행될지, 혹은 중지될지가 결정됩니다. PAM의 실행 순서는 다음과 같은 단계로 이루어집니다:

1. PAM 설정 파일 확인

PAM은 설정 파일을 통해 각 응용 프로그램에 대한 인증 절차를 정의합니다. 설정 파일은 보통 /etc/pam.d/ 디렉터리에 위치하고, 각 응용 프로그램마다 별도의 설정 파일이 있습니다. 설정 파일에는 각 모듈이 사용될 때의 제어 플래그와 모듈 경로 등이 정의되어 있습니다.

2. 모듈 실행 순서에 따른 제어 플래그 확인

설정 파일의 각 줄에는 모듈 유형(type), 제어 플래그(control flag), 모듈 경로(module path), 그리고 옵션(option)이 포함됩니다. 제어 플래그는 각 모듈의 성공 및 실패 여부에 따라 다음 모듈로 이동할지 여부를 결정하는 데 중요한 역할을 합니다. 주요 제어 플래그에는 다음과 같은 것들이 있습니다:

  • required: 실패해도 계속 진행하되, 모든 모듈을 실행한 후 최종 결과에서 이 모듈의 성공 여부를 반영합니다.
  • requisite: 이 모듈이 실패하면 즉시 인증을 중지합니다.
  • sufficient: 성공 시 즉시 인증을 성공으로 처리하고 나머지 모듈을 무시할 수 있습니다. 실패하면 영향을 주지 않습니다.
  • optional: 이 모듈의 성공/실패 여부는 중요하지 않으며, 추가적인 인증 정보를 제공합니다.

3. 모듈 타입에 따른 인증 단계 수행

PAM의 모듈은 주로 네 가지 타입으로 구분됩니다:

  • auth: 사용자의 신원을 확인하고 인증 정보를 처리합니다.
  • account: 사용자의 계정 상태를 확인하고 접근 권한을 제어합니다.
  • session: 세션의 시작과 종료 시에 수행할 작업을 정의합니다.
  • password: 비밀번호 변경 시 수행할 작업을 정의합니다.
  • PAM은 설정 파일에 정의된 순서대로 각 모듈을 실행하며, 각 단계의 성공/실패 여부에 따라 다음 단계로 이동하거나 인증을 중지합니다.

4. 결과 처리

모든 모듈을 실행한 후 PAM은 각 모듈의 성공/실패 상태와 제어 플래그에 따라 최종 인증 결과를 결정합니다. 예를 들어, required 플래그가 설정된 모듈에서 실패가 발생한 경우, 다른 모든 모듈이 성공하더라도 최종적으로 인증은 실패로 처리됩니다. sufficient 플래그가 설정된 모듈이 성공하면 이후의 인증 과정을 무시하고 인증을 성공으로 처리할 수 있습니다.

따라서 PAM은 설정 파일에 정의된 순서와 제어 플래그를 기반으로 각 모듈을 실행하며, 이를 통해 유연한 인증 절차를 구현할 수 있습니다.

PAM의 실행 순서를 이해하기 위해, 실제 예를 들어 보겠습니다. 여기서는 사용자가 SSH로 시스템에 로그인할 때 PAM이 어떻게 작동하는지 설명하겠습니다. 예제 설정 파일은 /etc/pam.d/sshd에서 다음과 같은 모듈을 사용한다고 가정합니다.

auth required pam_env.so
auth required pam_unix.so
auth sufficient pam_ldap.so
auth required pam_deny.so

account required pam_unix.so
account sufficient pam_ldap.so
account required pam_deny.so

session required pam_unix.so
session optional pam_lastlog.so
session optional pam_motd.so
session required pam_limits.so

password required pam_unix.so
password sufficient pam_ldap.so

2. 실행 순서보기

각 항목이 어떤 역할을 하는지, 그리고 실행 순서에 따라 어떻게 진행되는지 설명드리겠습니다.

1. auth 모듈 실행 단계 (인증)

  1. auth required pam_env.so
    • 이 모듈은 환경 변수 설정을 처리합니다. 성공 여부에 관계없이 다음 모듈로 진행합니다.
  2. auth required pam_unix.so
    • 이 모듈은 로컬 사용자 인증을 수행합니다(예: /etc/shadow 파일에서 비밀번호 확인).
    • 사용자가 로컬 계정에 존재하지 않거나 비밀번호가 틀리면 실패로 기록되지만, required 플래그이므로 다음 모듈로 계속 진행합니다.
  3. auth sufficient pam_ldap.so
    • 이 모듈은 LDAP 서버에서의 사용자 인증을 시도합니다.
    • 만약 LDAP 인증이 성공하면, sufficient 플래그 덕분에 이후 auth 모듈을 무시하고 인증을 성공으로 처리할 수 있습니다.
    • 하지만 LDAP 인증이 실패하면 이 모듈은 실패로 기록되지 않고 다음 required 모듈로 진행합니다.
  4. auth required pam_deny.so
    • 이 모듈은 항상 실패를 반환합니다. 일반적으로 이전 required 모듈들이 모두 실패했을 경우 최종적으로 인증을 거부하기 위해 존재합니다.
    • 만약 앞의 모든 auth 모듈이 실패하면 최종적으로 PAM은 인증 실패를 반환합니다.

2. account 모듈 실행 단계 (계정 확인)

  1. account required pam_unix.so
    • 로컬 계정 상태(예: 계정 만료 여부, 로그인 허용 여부 등)를 확인합니다.
    • 로컬 계정이 만료되었거나 사용이 불가능하다면 이 모듈이 실패로 기록됩니다. 하지만 required 플래그이므로 다음 모듈로 진행합니다.
  2. account sufficient pam_ldap.so
    • LDAP 계정의 상태를 확인합니다.
    • 만약 LDAP 계정이 유효하면 sufficient 플래그로 인해 이후 account 모듈을 무시하고 성공으로 처리할 수 있습니다.
    • LDAP 계정이 유효하지 않으면 이 모듈을 건너뛰고 다음 required 모듈로 넘어갑니다.
  3. account required pam_deny.so
    • 이 모듈은 항상 실패를 반환합니다. 이전 account 모듈이 모두 실패했을 경우에 최종적으로 인증 실패를 반환하기 위해 존재합니다.

3. session 모듈 실행 단계 (세션 관리)

  1. session required pam_unix.so
    • 로컬 계정의 세션을 시작하고 종료할 때 필요한 작업을 수행합니다.
  2. session optional pam_lastlog.so
    • 마지막 로그인 시간을 기록합니다. optional이므로 실패하더라도 전체 결과에 영향을 미치지 않습니다.
  3. session optional pam_motd.so
    • Message of the Day(MOTD)를 표시합니다. 역시 optional 플래그이므로 실패해도 영향을 미치지 않습니다.
  4. session required pam_limits.so
    • 세션의 리소스 제한(예: 메모리, CPU 사용량 등)을 설정합니다. required 플래그이므로 반드시 실행되어야 합니다.

4. password 모듈 실행 단계 (비밀번호 변경)

  1. password required pam_unix.so
    • 로컬 계정 비밀번호를 변경하는 모듈입니다. 사용자가 비밀번호를 변경할 때 실행됩니다.
  2. password sufficient pam_ldap.so
    • LDAP 서버의 비밀번호를 변경합니다. 성공하면 이후 모듈을 건너뛸 수 있습니다.

이 순서에 따라 PAM은 사용자의 로그인 요청을 처리하고, 모듈의 성공/실패 여부와 제어 플래그에 따라 다음 단계로 진행합니다.

반응형