IT Professional Engineering/SEC

Linux PAM: 리눅스 인증 체계의 핵심 모듈

GilliLab IT 2025. 6. 13. 23:25
728x90
반응형

Linux PAM: 리눅스 인증 체계의 핵심 모듈

PAM 개요

  • PAM(Pluggable Authentication Modules)은 리눅스 환경에서 사용자 인증을 처리하는 유연한 메커니즘
  • 1995년 Sun Microsystems에서 처음 개발된 후 다양한 유닉스/리눅스 시스템에 도입
  • 애플리케이션과 인증 방식 사이에 추상화 계층을 제공하여 기존 애플리케이션 코드 변경 없이 인증 메커니즘 변경 가능
  • 인증 정책을 중앙에서 관리함으로써 보안 강화 및 유지보수 용이성 증대
  • 현대 리눅스 배포판에서는 표준 인증 프레임워크로 채택

PAM 동작 원리

  • PAM은 시스템 관리자가 다양한 애플리케이션의 인증 방식을 유연하게 설정할 수 있도록 설계
  • 애플리케이션에서 인증 요청 시 PAM 라이브러리를 호출
  • PAM 라이브러리는 설정 파일을 참조하여 적절한 PAM 모듈 로드
  • 각 모듈은 특정 인증 작업 수행 후 결과 반환
  • 모듈 결과를 기반으로 최종 인증 결정
sequenceDiagram
    participant App as 응용프로그램
    participant Lib as PAM 라이브러리
    participant Conf as PAM 설정파일
    participant Mod as PAM 모듈들

    App->>Lib: 인증 요청
    Lib->>Conf: 설정 확인
    Conf->>Lib: 모듈 정보 반환
    Lib->>Mod: 모듈 로드 및 실행
    Mod->>Lib: 인증 결과 반환
    Lib->>App: 최종 인증 결과 반환

PAM 설정 파일

  • PAM 설정 파일은 /etc/pam.d/ 디렉토리에 애플리케이션별로 존재
  • 각 설정 파일은 인증 스택을 정의하며 여러 모듈의 조합으로 구성
  • 설정 파일 형식: type control_flag module_path module_arguments
  • 예: auth required pam_unix.so nullok try_first_pass

주요 설정 요소

  1. 모듈 유형(type)

    • auth: 사용자 신원 확인
    • account: 계정 유효성 검사(계정 만료, 접근 시간 제한 등)
    • password: 암호 변경 처리
    • session: 세션 설정 및 정리
  2. 제어 플래그(control_flag)

    • required: 모듈 실패 시 최종 결과는 실패, 다른 모듈은 계속 실행
    • requisite: 모듈 실패 시 즉시 실패 반환, 이후 모듈 실행 안 함
    • sufficient: 모듈 성공 시 다른 required 모듈 실패 없다면 즉시 성공 반환
    • optional: 모듈 결과가 최종 판정에 영향을 미치지 않음
  3. 모듈 경로 및 인자

    • 모듈 라이브러리 위치 및 모듈별 옵션 지정

주요 PAM 모듈

  1. pam_unix.so

    • 기본 유닉스 암호 인증 처리
    • /etc/passwd, /etc/shadow 파일 기반 인증
    • 암호 변경 기능 제공
  2. pam_ldap.so

    • LDAP 서버 기반 인증
    • 중앙집중식 사용자 관리에 활용
  3. pam_cracklib.so / pam_pwquality.so

    • 암호 품질 검사
    • 강력한 암호 정책 적용
  4. pam_limits.so

    • 사용자 리소스 제한 설정
    • CPU, 메모리, 로그인 세션 수 등 제한
  5. pam_access.so

    • 접근 제어 설정
    • 특정 사용자/그룹의 접근 허용/거부
  6. pam_time.so

    • 시간 기반 접근 제어
    • 특정 시간대에만 접근 허용

PAM 설정 예제 분석

SSH 로그인 인증 설정 (/etc/pam.d/sshd)

# 기본 인증
auth       required     pam_sepermit.so
auth       include      password-auth

# 계정 확인
account    required     pam_nologin.so
account    include      password-auth

# 비밀번호 처리
password   include      password-auth

# 세션 관리
session    required     pam_selinux.so close
session    required     pam_loginuid.so
session    optional     pam_keyinit.so force revoke
session    include      password-auth
session    required     pam_selinux.so open

이 설정의 인증 흐름:

  1. pam_sepermit.so로 SELinux 권한 확인
  2. password-auth 파일의 인증 스택 포함
  3. pam_nologin.so로 시스템 로그인 가능 여부 확인
  4. 세션 시작 시 SELinux 컨텍스트 설정, 로그인 UID 기록
  5. 세션 종료 시 정리 작업 수행

암호 품질 관리 설정 (/etc/pam.d/system-auth)

# 암호 변경 설정
password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= minlen=8 lcredit=-1 ucredit=-1 dcredit=-1 ocredit=-1
password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password    required      pam_deny.so

이 설정의 의미:

  • pam_pwquality.so: 암호 품질 검사(최소 8자, 소문자/대문자/숫자/특수문자 각 1개 이상)
  • pam_unix.so: SHA-512 해시 알고리즘으로 암호 저장, shadow 파일 사용
  • pam_deny.so: 이전 모듈에서 처리되지 않은 경우 항상 실패 반환

PAM 활용 사례

다중 인증 요소(MFA) 구현

auth        required      pam_unix.so
auth        required      pam_google_authenticator.so
  • 일반 패스워드와 Google Authenticator TOTP를 조합한 2단계 인증 구현
  • 두 모듈 모두 성공해야 최종 인증 성공
  • 보안 강화에 효과적

접근 시간 제한

account     required      pam_time.so
  • /etc/security/time.conf 파일을 통해 접근 시간 제한
  • 예: login;*;student;Wk0800-1700 (학생 계정은 평일 8시~17시만 로그인 가능)
  • 관리자는 제한 없이 접근 가능하도록 구성 가능

리소스 제한 설정

session     required      pam_limits.so
  • /etc/security/limits.conf 파일을 통해 사용자별 리소스 제한
  • 예: developer soft nproc 50 (개발자 그룹은 최대 50개 프로세스 실행 가능)
  • 서버 리소스 남용 방지 및 안정성 확보

PAM 디버깅 및 문제 해결

  • 로그 확인: /var/log/secure 또는 /var/log/auth.log에서 인증 관련 로그 확인
  • 디버그 모드: 모듈 옵션에 debug 추가하여 상세 로그 확인
    auth required pam_unix.so debug
  • 테스트 도구: pamtester 또는 pam-auth-update 사용하여 설정 테스트
  • 일반적 문제:
    • 모듈 순서 부적절: 인증 흐름 논리 검토
    • 필요 모듈 누락: 의존성 확인
    • 권한 문제: 모듈 파일 및 관련 설정 파일 권한 확인

PAM 보안 강화 전략

  1. 최소 권한 원칙 적용

    • 필요한 모듈만 설정
    • 각 서비스별로 적절한 권한 설정
  2. 암호 정책 강화

    • pam_pwquality.so 또는 pam_cracklib.so 활용
    • 강력한 암호 요구사항 설정
    • 암호 이력 관리로 재사용 방지
  3. 로그인 시도 제한

    • pam_tally2.so 모듈로 실패 횟수 제한
    auth required pam_tally2.so deny=5 unlock_time=1800 even_deny_root
    • 5회 실패시 30분 잠금, root도 적용
  4. 다중 인증 요소 도입

    • 지식(암호), 소유(OTP), 생체인증 조합
    • pam_google_authenticator.so, pam_yubico.so 등 활용
  5. 정기적인 감사

    • PAM 설정 파일 정기 검토
    • 불필요한 모듈 제거
    • 보안 업데이트 적용

PAM 확장 및 커스텀 모듈 개발

  • PAM API를 활용한 자체 모듈 개발 가능

  • 기본 모듈 함수:

    • pam_sm_authenticate: 인증 처리
    • pam_sm_setcred: 자격 증명 설정
    • pam_sm_acct_mgmt: 계정 관리
    • pam_sm_open_session: 세션 시작
    • pam_sm_close_session: 세션 종료
    • pam_sm_chauthtok: 인증 토큰 변경
  • 커스텀 모듈 개발 절차:

    1. PAM 개발 라이브러리 설치
    2. 모듈 소스 코드 작성
    3. 컴파일 및 모듈 라이브러리(.so) 생성
    4. 적절한 위치에 모듈 설치
    5. PAM 설정 파일 수정하여 모듈 추가
/* 간단한 PAM 모듈 예제 */
#include <security/pam_modules.h>
#include <security/pam_ext.h>

PAM_EXTERN int pam_sm_authenticate(pam_handle_t *pamh, int flags, int argc, const char **argv) {
    /* 커스텀 인증 로직 구현 */
    return PAM_SUCCESS;
}

/* 기타 필요한 PAM 함수 구현 */

PAM의 미래 동향

  1. 클라우드 환경 통합

    • 클라우드 서비스 인증과의 연계
    • AWS, Azure, GCP 등의 인증 시스템과 통합
  2. Zero Trust 아키텍처 지원

    • 지속적인 인증 및 권한 검증
    • 컨텍스트 기반 접근 제어
  3. 컨테이너 환경 보안

    • Docker, Kubernetes 환경에서의 PAM 활용
    • 마이크로서비스 아키텍처에 적합한 인증 메커니즘
  4. 생체인증 지원 확대

    • 지문, 안면인식 등 생체인증 모듈 개발
    • FIDO2/WebAuthn 표준 지원
  5. 인공지능 기반 이상 탐지

    • 사용자 행동 패턴 분석
    • 비정상 로그인 시도 자동 차단

결론

  • PAM은 리눅스 시스템의 인증 체계를 유연하게 관리할 수 있는 강력한 프레임워크
  • 모듈식 설계로 다양한 인증 메커니즘을 쉽게 통합 가능
  • 중앙집중식 보안 정책 관리로 일관된 보안 체계 구축 가능
  • 다양한 서비스에 일관된 인증 정책을 적용하여 보안 강화 및 관리 효율성 증대
  • 지속적인 발전을 통해 변화하는 IT 환경의 보안 요구사항 대응
  • 리눅스 시스템 관리자라면 PAM의 동작 원리와 설정 방법 숙지 필수

Keywords

PAM, Linux Authentication, 리눅스 인증, 인증 모듈, 다중 인증, access control, security policy, 보안 정책, 인증 스택, pluggable modules

728x90
반응형