PAM-필요하고 충분한 제어 플래그


14

나는 PAM을 공부하고 있으며 제어 플래그 조합의 의미에 대해 약간의 실마리가 있습니다. Red Hat 문서에는 다음이 있습니다.


  • 이러한 PAM의 필수 실패는 궁극적으로 PAM-API 리턴 실패로 이어지지 만 (이 서비스 및 유형에 대한 나머지 스택 모듈이 호출 된 후에 만)

  • 필요한
    , 그러나, 이러한 모듈은 실패를 반환하는 경우, 제어가 직접 응용 프로그램에 반환되는 필수처럼.


  • 이러한 모듈의 충분한 성공은 모듈 스택의 인증 요구 사항을 충족시키기에 충분합니다 (사전 필수 모듈이 실패한 경우이 모듈의 성공은 무시 됨). 이 모듈의 실패는이 유형의 성공한 응용 프로그램을 만족시키는 데 치명적인 것으로 간주되지 않습니다. 모듈이 성공하면 PAM 프레임 워크는 다른 모듈을 시도하지 않고 즉시 응용 프로그램에 성공을 반환합니다.

따라서 이해하면 모듈 requisite이 실패하면 전체 모듈 스택이 구문 분석되지 않고 컨트롤이 즉시 응용 프로그램으로 돌아갑니다. 모듈이 sufficient성공하면 나머지 모듈 스택이 구문 분석되지 않고 컨트롤이 즉시 응용 프로그램으로 돌아갑니다. 모듈 required이 실패하면 전체 스택이 구문 분석됩니다.

이제 특정 모듈 required이 실패하고 다른 모듈이 sufficient성공할 때 동작이 어떻게되는지 이해할 수 없습니다 .

답변:


11

PAM은 스택의 항목을 순서대로 진행합니다. 그것은 그 상태에 도달 한 방법이 아니라 현재 상태 (성공 또는 성공, 성공까지)에 대한 기억 만 유지합니다.

표시된 항목이 sufficient성공하면 PAM 라이브러리가 해당 스택 처리를 중지합니다. 이전 required항목 이 있었는지 여부에 관계없이 발생합니다 . 이 시점에서 PAM은 현재 상태를 반환합니다. 이전 required항목이 실패한 경우 성공 , 그렇지 않으면 거부됩니다.

마찬가지로 표시된 항목이 requisite실패하면 PAM 라이브러리가 처리를 중지하고 실패를 반환합니다. 이때 이전 required항목이 실패 했는지 여부는 관련이 없습니다 .

다시 말해, required전체 스택이 반드시 처리되는 것은 아닙니다. 계속 진행한다는 의미 일뿐입니다.


그러나 어떤 required항목이 실패하면 왜 PAM스택을 계속 통과해야합니까? 어쨌든 결국 실패할까요?
Mohammed Noureldin

1
@MohammedNoureldin 로그인 시도가 실패하더라도 로깅, 무차별 대입 시도에 대한 시간 초과 추가 등과 같은 몇 가지 작업을 수행해야합니다. 또한 일반적으로 시스템은 실패에 대한 정확한 이유를 표시하지 않습니다 (예 : username이 실패하면 사용자에게 여전히 암호를 묻는 메시지가 표시됩니다.
Gilles 'SO- 악마 그만

순서는 구성에 나열된 순서입니까?
OrangeDog

@OrangeDog 예. 첫 번째 줄에 나열된 모듈이 실행 된 다음 두 번째 줄이 실행됩니다 (또는 첫 번째 줄의 결과에 따라 건너 뜁니다).
Gilles 'SO-stop

1

제 생각 required에는 모듈이 성공하기 위해서는 항상 제어 플래그가 성공해야합니다.

sufficient실패하면 플래그가 지정된 모듈은 무시됩니다. 성공하고 required위에 표시된 플래그가있는 모듈이 없으면 동일한 유형의 다른 모듈을 점검 할 필요가 없으며 모듈은 성공한 것으로 간주됩니다. 따라서 기본적으로 required플래그는 플래그보다 우선 순위가 높지만 sufficient후자는 이전 플래그가 required성공한 경우 나머지 플래그 확인을 중지 할 수 있습니다.

예:

1 auth       required     /lib/security/pam_nologin.so
2 auth       required     /lib/security/pam_securetty.so
3 auth       required     /lib/security/pam_env.so
4 auth       sufficient   /lib/security/pam_rhosts_auth.so
5 auth       required     /lib/security/pam_stack.so service=system-auth

라인 1, 2, 3 및 4가 성공하면 라인 5를 건너 뛸 수 있고 모듈 auth이 성공합니다. 라인 4가 성공하지 못하면 무시되고 라인 5가 점검됩니다. 라인 1, 2, 3 중 하나라도 실패하면 라인 4가 고려되지 않습니다.


1
그의 질문은 1이 실패하고 2-4가 성공하면 어떻게 될지 생각합니다. 5가 실행됩니까? 1이 성공하면 5가 실행되지 않습니다. 즉, 이전에 필요한 모듈이 실패한 경우 "충분한 성공 후 중지"가 적용됩니까?
CJM

아니요, 인증 모듈은 이러한 조합으로 실패합니다.
dsmsk80

문제는 인증이 실패할지 여부가 아닙니다. 그렇습니다. 문제는 그 실패가 애플리케이션에보고되기 전에 모듈 5가 실행되는지 여부입니다.
cjm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.