나는 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가 고려되지 않습니다.