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

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

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

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

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

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

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



답변

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

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

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

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


답변

제 생각 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가 고려되지 않습니다.