로그인 양식에 PAM을 통한 시스템의 로컬 사용자 인증이 필요한 PHP 기반 웹사이트를 개발 중입니다. 즉, 로컬 사용자 계정에 유효한 사용자 이름과 비밀번호를 입력하면 성공적으로 로그인할 수 있습니다. 서버. 이 웹사이트는 원래 사용되었습니다PHP-인증-팜모듈이지만 더 이상 사용되지 않으므로 현재 대체 솔루션을 찾아야 합니다.
드디어 만났어이 답변PAM 인증에 유용한 C 스크립트가 함께 제공됩니다. chkpasswd
방금 실행한 사용자 이름/비밀번호 조합을 확인하기 위해 and 라는 실행 파일로 성공적으로 컴파일했습니다 .
./chkpasswd username password
자격 증명이 유효하면 "확인됨"이 출력되고, 유효하지 않으면 "확인되지 않음"이 출력됩니다. 이 부분은 아무런 문제 없이 매력처럼 작동합니다.
그러나 곧 나는 명백한 문제가 있다는 것을 깨달았습니다. 비밀번호에 특수 문자가 포함되어 있으면 이 설정이 제대로 작동하지 않는다는 것입니다! 자격 증명이 정확하더라도 사용자가 인증되지 않았다고 표시됩니다. 저는 chkpasswd
PHP의 exec()
함수 호출을 사용하고 있으며 이를 사용하여 escapeshellarg()
사용자 입력을 이스케이프 처리하고 있습니다. 이것은 PHP 코드입니다:
function pam_auth2($username, $password){
$result = exec("/usr/local/sbin/chkpasswd ".escapeshellarg($username)." ".escapeshellarg($password));
if ($result == "Authenticated"){
return true;
}
else{
return false;
}
}
내 주요 질문은 다음과 같습니다.
- 시스템이 특수 문자가 포함된 비밀번호를 올바르게 처리하도록 C 스크립트 또는 이를 호출하는 PHP 코드를 수정할 수 있습니까?
- 이 설정은 전반적으로 얼마나 안전합니까? 내가 알아야 할 명백한 허점이 있습니까?