[Linux] 반드시 알아야 할 PAM(Pluggable Authentication Modules)
PAM은 “Pluggable Authentication Modules”의 약자로, 인증 시스템을 모듈화하여 여러 서비스에서 일관된 인증 및 액세스 제어를 제공하는 데 사용됩니다. 저수준의 인증 모듈을 고수준의 API로 통합하여 애플리케이션에 대한 동적 인증 지원을 제공합니다.
PAM의 동작 원리를 단순화하면 다음과 같습니다:
- 사용자가 시스템에 로그인 또는 서비스에 액세스하려고 시도합니다.
- PAM은 해당 서비스에 대한 설정을 확인하여 필요한 모듈을 호출합니다.
- 각 모듈은 사용자 인증 및 권한 부여를 위해 필요한 작업을 수행합니다. 이러한 작업에는 사용자 이름 및 암호 확인, 제한된 액세스 권한 확인 등이 포함될 수 있습니다.
- 각 모듈은 성공 또는 실패와 같은 결과를 반환합니다.
- PAM은 모든 모듈의 결과를 종합하여 최종 인증 및 액세스 제어 결정을 내립니다.
PAM 환경 설정을 위한 주요 항목은,
- /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- module-type
- auth :
사용자를 실제로 인증, 비밀번호 확인을 담당하는 모듈 - account :
서버에 대한 접근 허가 등 계정에 대한 검증 작업 수행 - password :
사용자의 비밀번호 설정 및 변경 조건을 지정하고 auth 모듈과 연동 - session :
사용자 인증 성공 후 세션의 시작, 종료와 관련된 작업 수행
- auth :
- control-flag
- requisite :
인증 체크는 반드시 성공해야 함. 실패 시 즉시 실패 반환 - required :
인증 체크는 반드시 성공해야 함. 실패 시 즉시 실패를 반환하지 않고 동일한 모듈 타입의 모듈 체크를 모두 수행하고 실패 반환 - sufficient :
인증 체크가 성공하면 나머지 모듈들의 체크를 수행하지 않음(단, 이전의 required 모듈이 모두 성공일 경우) - optional :
인증 체크의 성공과 실패가 중요하지 않음. 다른 모듈의 인증 체크가 모두 성공했다면 이 모듈의 결과를 반환 - include :
지정한 환경 설정 파일을 로드하여 적용
- requisite :
- module-name :
환경 설정의 대상이 되는 모듈 이름 입력, /lib64/security/ 디렉터리에 위치 - module-arguments :
지정한 모듈에게 전달하려는 파라미터 입력
- system-auth 파일:
- PAM 모듈:
/lib64/security/ 디렉터리에 저장되어 있으며, 각각의 PAM 모듈은 특정한 작업을 수행하며, 인증 및 액세스 제어에 관련된 다양한 작업을 담당합니다.
PAM 주요 모듈 및 사용법(예제)에 대해 알아보겠습니다.
- 주요 모듈:
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실패한 로그인 시도 횟수와 잠금 해제 시간을 추적하여 임계값을 초과하면 계정을 잠금 상태로 전환 - 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
- /etc/pam.d/password-auth 파일 파일 설정 : 비밀번호 변경 시 마지막 5개의 비밀번호를 기억하여 동일한 비밀번호 사용 방지
- pam_pwquality.so 모듈 사용법
- /etc/security/pwquality.conf 파일에 설정 사항 등록
- /etc/pam.d/system-auth 파일에 모듈 등록
$ vi /etc/pam.d/system-auth password requisite pam_pwquality.so local_users_only
- 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
- pam_tally.so 모듈 옵션
- 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
- pam_faillock.so모듈 옵션