pam_google_authenticator를 활성화한 후 libPAM 라이브러리 인증이 실패합니다.

pam_google_authenticator를 활성화한 후 libPAM 라이브러리 인증이 실패합니다.

다음 줄을 활성화했습니다 /etc/pam.d/common-auth.

auth required pam_google_authenticator.so nullok

설정되지 않은 경우(예: .google_authenticator 파일이 홈 폴더에 없는 경우) OTP를 요청하지 않는 nullok 옵션을 사용하세요.

일부 사용자가 있는데,홈 폴더가 없는 사람은 누구입니까?(저는 이 사용자의 비밀번호를 확인하기 위해 PAM 시스템을 사용합니다. 그게 전부입니다.)

다음 라이브러리로 테스트되었습니다.https://github.com/FirefighterBlu3/python-pam

python3 pam.py 
Username: ...
Password: ...
Auth result: Authentication failure (7)

비활성화하면 auth required pam_google_authenticator.so nullok인증이 제대로 작동합니다.

python3 pam.py 
Username: ...
Password: ...
Auth result: Success (0)

google_authenticator를 활성화한 후 홈 폴더 없이 사용자의 비밀번호를 어떻게 확인할 수 있나요?

답변1

코드는 여기저기에 있습니다. 설정된 경우 플래그를 open_secret_file설정 하면 홈 디렉터리가 없는 사용자의 경우처럼 실패합니다 . 더 나은 추적을 설정하면 로그 메시지가 무엇인지 정확하게 표시하는 데 도움이 될 수 있으며, 거기에서 코드가 정확히 어디로 가고 있는지 더 잘 알 수 있습니다.SECRETNOTFOUNDnullokopendebug

또한 is는 open_secret_filenon-이 아닌 경우에만 호출됩니다. 그렇다면 is가 무엇인지(다른 장소에서 사용되며 때로는 할당되고 때로는 엉뚱) 알 필요가 있을 것입니다.secret_filenameNULLbufbuf[1000]stopped_by_rate_limit

어쨌든, get_secret_filename비밀 파일의 기본 위치가 홈 디렉토리가 아닌 다른 위치로 변경될 수 있음을 보여줍니다. "홈 폴더가 없는 사람"이란 정확히 무엇을 의미합니까? 필드가 비어 있으면 다음 중 하나가 됩니다.

if (!pw->pw_dir) {
  log_message(LOG_ERR, pamh, "user(\"%s\") has no home dir", username);
  goto errout;
}

if (*pw->pw_dir != '/') {
  log_message(LOG_ERR, pamh, "User \"%s\" home dir not absolute", username);
  goto errout;
} 

일치합니다( debug여기서 PAM 플래그를 추가하면 도움이 될 수 있습니다). 이는 get_secret_filenamereturn 을 의미하고 NULL, 이는 if (secret_filename) {실패를 의미하며, SECRETNOTFOUND플래그가 open_secret_file호출되지 않았기 때문에 설정할 수 없음을 의미합니다. 그렇다면 코드가 많지만 관찰한 대로 실패할 것 같습니다( debug여기에서 더 많은 정보를 얻을 수 있음).

이 상황을 해결하기 위한 몇 가지 다른 옵션은 설명이 필요하지 않습니다.

패치 코드

따라서 해결 방법은 패치를 get_secret_filename설정하는 것입니다.

params->nullok = SECRETNOTFOUND;

홈 디렉터리가 존재하지 않거나(여러 위치에) 기본적으로 설정되어 있지만 params->nullok = SECRETNOTFOUND존재하지 않는 것을 반환할 때 꺼진 경우입니다. 여기에 보안 구멍이 생기지 않도록 하는 논리적 감사도 포함됩니다.get_secret_filenameNULL

사용자에게 쓸 수 없는 빈 홈 디렉터리를 제공합니다.

/var/empty더 간단한 옵션은 또는 무언가를 이러한 사용자의 홈 디렉터리로 사용하는 것입니다 . 이 경우 SECRETNOTFOUND플래그가 올바르게 설정될 수 있습니다. (아무 것도 추가되지 않았는지 감사할 수 있으며 /var/empty, 물론 이러한 사용자에게는 해당 디렉터리를 변경할 수 있는 권한이 없어야 합니다.)

PAM의 합병증

Linux PAM을 사용하면 후속 규칙을 건너뛸 수 있으므로 홈 디렉터리가 비어 있거나 유사한 경우 후속 pam_google_authenticator.so규칙을 건너뛰는 PAM 모듈이 있을 수 있습니다.

(사용자에게 쓸 수 없는 홈 디렉터리를 제공할 수도 있습니다.)

관련 정보