리눅스는 참 요물입니다.
확장 가능한 지점들이 참 많아서 매력적이기도 하구요.
최근에 기본적인 쉘 인증 이외에
MFA 적용 방법을 찾다가 PAM을 처음 접해봤습니다.
What is PAM?
Pluggable Authentication Module의 약어로 리눅스 시스템이 사용자 인증에 대한 정책을 정의하고 인증 방법 및 절차에 대한 구성을 할 수 있게 해주는 모듈. 이름에 적혀 있는 것처럼 Pluggable이기 때문에 3rd party의 다양한 인증, 인가 솔루션들을 연동하는 지점이 되기도 함
PAM 의 기본 구성
PAM은 다양한 서버의 기능별로 구성이 가능합니다.
/etc/pam.d/ 경로 하위에는 인증을 요구하는
여러가지 서버, 애플리케이션에 대한 구성 파일이 존재합니다.
가령, 쉘 접근의 인증과 관련된 구성은 /etc/pam.d/sshd 에 위치하고 있습니다.
ChatGPT 가 알려준 sshd PAM 구성 파일은 다음과 같을 수 있습니다.
#%PAM-1.0
auth required pam_sepermit.so
auth include password-auth
account required pam_nologin.so
account include password-auth
password include password-auth
session optional pam_keyinit.so force revoke
session include password-auth
암호처럼 보이는 이 문서는 컬럼별로 다음과 같이 이해하면 됩니다.
# Module Type # Control Flag # Module Name # Module Argument
auth required pam_sepermit.so
account required pam_nologin.so
password include password-auth
session optional pam_keyinit.so force revoke
Module Type
모듈의 타입은 크게 4가지가 있습니다.
인증을 요청하고 검증하는 방법을 정의하는 auth
계정에 대한 접근 통제 및 정책을 관리하는 account
비빌번호 갱신 등에 관한 내용을 관리하는 password
인증 전후 수행해야 하는 일을 정의하는 session
Control Flag
제어 플레그는 지정된 모듈을 반드시 수행해야 하는지
아니면 옵셔널하게 수행해야 하는지 등을 정의합니다.
Module Name
모듈 이름은 실행할 모듈의 이름입니다.
리눅스에 내장된 모듈도 있을 수 있고
서드파티 사업자가 제공했거나
직접 만든 모듈을 지정할 수도 있습니다.
Module Argument
모듈 실행시 필요한 매개변수를 전달할 수도 있습니다.
이는 필수는 아니며 모듈에 따라 달라지게 됩니다.
https://medium.com/@avirzayev/linux-pam-how-to-create-an-authentication-module-cc132115bdc5