다음 줄을 활성화했습니다 /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
설정 하면 홈 디렉터리가 없는 사용자의 경우처럼 실패합니다 . 더 나은 추적을 설정하면 로그 메시지가 무엇인지 정확하게 표시하는 데 도움이 될 수 있으며, 거기에서 코드가 정확히 어디로 가고 있는지 더 잘 알 수 있습니다.SECRETNOTFOUND
nullok
open
debug
또한 is는 open_secret_file
non-이 아닌 경우에만 호출됩니다. 그렇다면 is가 무엇인지(다른 장소에서 사용되며 때로는 할당되고 때로는 엉뚱) 알 필요가 있을 것입니다.secret_filename
NULL
buf
buf[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_filename
return 을 의미하고 NULL
, 이는 if (secret_filename) {
실패를 의미하며, SECRETNOTFOUND
플래그가 open_secret_file
호출되지 않았기 때문에 설정할 수 없음을 의미합니다. 그렇다면 코드가 많지만 관찰한 대로 실패할 것 같습니다( debug
여기에서 더 많은 정보를 얻을 수 있음).
이 상황을 해결하기 위한 몇 가지 다른 옵션은 설명이 필요하지 않습니다.
패치 코드
따라서 해결 방법은 패치를 get_secret_filename
설정하는 것입니다.
params->nullok = SECRETNOTFOUND;
홈 디렉터리가 존재하지 않거나(여러 위치에) 기본적으로 설정되어 있지만 params->nullok = SECRETNOTFOUND
존재하지 않는 것을 반환할 때 꺼진 경우입니다. 여기에 보안 구멍이 생기지 않도록 하는 논리적 감사도 포함됩니다.get_secret_filename
NULL
사용자에게 쓸 수 없는 빈 홈 디렉터리를 제공합니다.
/var/empty
더 간단한 옵션은 또는 무언가를 이러한 사용자의 홈 디렉터리로 사용하는 것입니다 . 이 경우 SECRETNOTFOUND
플래그가 올바르게 설정될 수 있습니다. (아무 것도 추가되지 않았는지 감사할 수 있으며 /var/empty
, 물론 이러한 사용자에게는 해당 디렉터리를 변경할 수 있는 권한이 없어야 합니다.)
PAM의 합병증
Linux PAM을 사용하면 후속 규칙을 건너뛸 수 있으므로 홈 디렉터리가 비어 있거나 유사한 경우 후속 pam_google_authenticator.so
규칙을 건너뛰는 PAM 모듈이 있을 수 있습니다.
(사용자에게 쓸 수 없는 홈 디렉터리를 제공할 수도 있습니다.)