1. 프로젝트 디렉토리 구조 상세 분석
리눅스 PAM(Pluggable Authentication Modules for Linux) 프로젝트의 소스 코드는 다음과 같은 디렉토리 구조로 구성되어 있습니다.
linux-pam/
├── AUTHORS
├── COPYING
├── ChangeLog
├── Makefile.am
├── NEWS
├── README
├── README-hacking
├── autogen.sh
├── configure.ac
├── gitlog-to-changelog
├── meson.build
├── meson_options.txt
├── pgp-keys.asc
├── zanata.xml
├── aux/
├── ci/
├── conf/
├── doc/
├── examples/
├── libpam/
├── libpam_internal/
├── libpam_misc/
├── libpamc/
├── m4/
├── maint/
├── modules/
├── po/
├── tests/
└── xtests/
핵심 디렉토리 설명
- AUTHORS: 프로젝트 기여자 명단
- COPYING: 라이선스 정보 (일반적으로 GNU LGPL)
- ChangeLog: 버전별 변경 사항 기록
- Makefile.am: GNU Automake용 입력 파일
- meson.build: Meson 빌드 시스템 메인 설정 파일
- meson_options.txt: Meson 빌드 옵션 정의 파일
- configure.ac: Autoconf 설정 템플릿
- libpam/: PAM 핵심 라이브러리 소스 코드
- libpam_misc/: PAM 부가 라이브러리 소스 코드
- libpamc/: PAM 클라이언트 라이브러리 소스 코드
- modules/: 개별 PAM 모듈 소스 코드 (pam_unix, pam_deny 등)
- conf/: PAM 설정 파일 템플릿 및 예제
- doc/: 사용자 매뉴얼 및 API 문서
- tests/: 기본 테스트 스위트
- xtests/: 확장 테스트 스위트
2. 프로젝트 빌드 및 초기화 스크립트
소스 코드를 빌드하기 전에 필수적으로 실행해야 하는 스크립트는 autogen.sh와 configure입니다.
2.1 autogen.sh 실행
Git 저장소에서 코드를 내려받은 직후에는 configure 스크립트가 존재하지 않습니다. autogen.sh를 실행하여 Autoconf/Automake 기반의 설정 환경을 생성합니다.
./autogen.sh
이 스크립트는 autoreconf 명령을 호출하여 configure, Makefile.in 등의 파일을 생성합니다.
2.2 configure 스크립트 활용
빌드 환경을 사용자 정의하기 위해 configure 스크립트를 활용할 수 있습니다.
# 사용 가능한 옵션 확인
./configure --help | less
# 기본 설치 경로 및 기능 지정 예시
./configure --prefix=/usr --sysconfdir=/etc --enable-securedir=/lib/security
주요 옵션으로는 설치 경로(--prefix), 설정 파일 디렉토리(--sysconfdir), 모듈 설치 위치(--enable-securedir) 등이 있습니다.
3. PAM 설정 파일 구조 및 커스터마이징
PAM의 동작은 /etc/pam.d/ 디렉토리 내의 개별 설정 파일 또는 /etc/pam.conf 단일 파일로 제어됩니다. 프로젝트 소스 내 conf/ 디렉토리는 이러한 설정의 템플릿을 제공합니다.
3.1 기본 설정 템플릿 (conf/other)
conf/ 디렉토리에는 기본 동작을 정의하는 other 파일이 포함되어 있습니다. 이는 특정 서비스 설정이 없을 때 적용되는 폴백 규칙입니다.
#%PAM-1.0
auth required pam_deny.so
account required pam_deny.so
password required pam_deny.so
session required pam_deny.so
위 설정은 모든 인증을 거부하므로 보안 템플릿으로 사용됩니다.
3.2 커스텀 서비스 규칙 생성
새로운 애플리케이션(myapp)에 대한 PAM 인증을 구성하려면 /etc/pam.d/myapp 파일을 생성합니다.
# root 권한으로 파일 생성
sudo vi /etc/pam.d/myapp
#%PAM-1.0
auth required pam_unix.so
account required pam_unix.so
password required pam_unix.so
session required pam_unix.so
이 설정은 myapp 서비스가 표준 UNIX 계정 인증(pam_unix)을 사용하도록 지시합니다. 각 줄은 모듈 타입(auth, account, password, session), 제어 플래그(required, requisite, sufficient, optional), 그리고 모듈 경로 및 인자로 구성됩니다.
3.3 모듈 경로 확인
시스템에 설치된 PAM 모듈의 실제 위치는 일반적으로 /lib/security/ 또는 /lib/x86_64-linux-gnu/security/입니다. 설정 파일에서 모듈 이름만 명시하면 기본 경로에서 자동으로 검색됩니다.
# 설치된 모듈 목록 확인 (예시)
ls /lib/x86_64-linux-gnu/security/