저는 개발 중인 애플리케이션의 일부가 될 자체 PAM 모듈을 작성하고 있지만 정확히 어디에 배치해야 할지 모르겠습니다. 내 모듈은 기본적으로 LDAP(물론 다른 mojo도 포함)와 유사한 네트워크 수준 인증을 수행합니다.
내 디렉토리에 많은 구성 파일이 있고 /etc/pam.d/
대부분의 서비스가 어떤 용도로 사용되는지 알고 있습니다(atd, polkit, ppp와 같은 일부 서비스 제외). 나는 PAM 스택의 인증이 다음과 같다고 가정합니다:
- 서비스 이름을 기반으로 스택 실행(구성 파일이 있는 경우)
- 인증되지 않은 경우 common-*를 사용합니다. 여기서 *는 모듈 유형(인증, 계정 등)입니다.
- 호출 애플리케이션에 성공 또는 실패를 반환합니다(물론 다른 데이터와 함께).
내 가정이 맞나요? 모든 플랫폼에 걸쳐 공통 인증, 공통 계정, 공통 비밀번호 및 공통 세션이 있습니까?
sufficient
그렇다면 장애 발생 시 일반 PAM 스택이 영향을 받지 않도록 common-* 위에 모듈로 배치하는 것을 고려 중입니다 . 소프트웨어가 설치될 때 프로그래밍 방식으로 이 작업을 수행할 수 있기 때문에 이는 특히 유리합니다.
잠재적인 보안 취약점을 놓쳤습니까?
사용자 정의 PAM 모듈을 통합할 위치나 모듈 배치 위치와 관련된 보안 문제에 대한 좋은 문서를 찾을 수 없습니다.
답변1
일부 인증 프로세스를 위해 Linux-PAM을 호출하면 항상 단 하나의 스택만 실행됩니다.
다음 위치에서 스택 정의를 찾으십시오. 첫 번째 성공적인 시도에 따라 읽을 파일이 결정됩니다.
/etc/pam.d
애플리케이션 "서비스 이름"(예:sshd
또는gdm
)의 이름을 딴 파일, 또는/etc/pam.d/other
서비스별 파일이 없는 경우 서비스별 파일, 또는/etc/pam.conf
/etc/pam.d
디렉터리가 존재하지 않는 경우 파일입니다.
기능에 대한 설명서를 참조하세요.pam_start더 알아보기.
common-* 파일은 많은 Linux 배포판에서 따르는 규칙이지만 PAM 소프트웨어 자체에서는 필요하지 않습니다. 일반적으로 다른 PAM 파일에 명령문으로 포함됩니다 @include
. 예를 들어 /etc/pam.d/other
Debian의 파일에는 다음 내용이 있습니다.
# We fall back to the system default in /etc/pam.d/common-*
@include common-auth
@include common-account
@include common-password
@include common-session
서비스별 파일에도 동일한 명령문을 사용할 수 있으며 @include
실제로 해당 파일은 다음 위치에 있습니다.기본데비안에서의 구성. 이는 구성 문제입니다. 시스템 관리자는 /etc/pam.d
common-* 파일이 전혀 포함되지 않도록 파일을 자유롭게 변경할 수 있습니다!
따라서 PAM 모듈이 애플리케이션에 특정한 경우 애플리케이션별 서비스 파일을 생성하고 거기에서 모듈을 호출하십시오. 하다아니요다른 서비스의 PAM 파일이나 백업 others
파일에 모듈을 자동으로 추가합니다. 이렇게 하면 시스템에 설치된 다른 응용 프로그램이 중단될 수 있습니다. PAM 소프트웨어 스택 관리는 애플리케이션 개발자가 아닌 시스템 관리자의 작업입니다.