다음과 같은 PAM 스택이 있는 경우:
auth required default_pam.so
auth requisite my_custom_pam.so
....
사용자 정의 PAM 인증 모듈(예: 함수 pam_sm_authenticate
)에서 사용하기 위해 마지막/이전 PAM 모듈 실행에서 인증 상태를 어떻게 얻을 수 있습니까?
답변1
먼저, 다른 모듈의 결과에 따라 모듈의 코드 논리를 변경하는 것은 다소 색다른 일이라는 점을 명심하십시오. 이는 일반적으로 어떤 상황에서 어떤 모듈이 호출되는지를 제어하는 required
및 와 같은 제어 플래그를 사용하여 수행됩니다. requisite
현재 체인 상태, 이전 모듈의 결과). 이를 염두에 두고 다음과 같이 모듈의 동작을 조정하는 것을 상상할 수 있습니다.
auth [success=1] default_pam.so
auth [success=done default=die] my_custom_pam.so default_failed
auth requisite my_custom_pam.so
체인에는 다음과 같은 논리가 있습니다.
- 기본 모듈이 성공하면 검증된 것으로 표시하고(암시적으로
success=1
) 모듈 1개를 건너뜁니다. 체인은my_custom_pam
인수 없이 호출에 도달하며 성공해야 합니다(requisite
). - 기본 모듈이 실패하면 아무것도 건너뛰지 마십시오. 체인에 도달하면
my_custom_pam
매개변수로 호출됩니다default_failed
. 체인은 이 모듈(done
또는die
) 이후에 중지되고 전반적인 결과를 결정합니다.
여기서 핵심 요소는 에 전달되는 매개변수입니다 my_custom_pam
. 루틴을 검사하면 argc
현재 체인 상태에 따라 로직을 조정할 수 있습니다.argv
pam_sm_authenticate