PAM 모듈이 자체 JAAS LoginModule의 지침으로 설계된 방식을보고 있습니다. 한 가지 놀랍게도, 해시 된 암호에 액세스하는 데 사용 된 방법이 대부분 해시 방법 자체와 직각이지만,이 속성을 유용하게 사용할 PAM 모듈을 찾을 수 없었습니다. 내가 간과 한 보안 문제로 인한 것입니까 아니면 아직 탐험되지 않은 것입니까?pam 공유 해시
해시 암호 (LDAP, SQL, 일반 파일) 및 해시 방법 (MD5, SHA1)에 액세스하는 3 가지 방법이 있다고 가정 해 보겠습니다. 현재 각 액세스 방법에 대해 하나 이상의 PAM 모듈이 있으며, 각각 하나 이상의 해시 메소드를 구현합니다. 새로운 해시 메소드 (예 : BCrypt)를 추가하면 이러한 모든 액세스 메소드를 수정하여 새 해시 유형을 지원해야합니다. 더 나은 설계는 사용자 이름을 사용하여 해시 된 암호를 간단히 검색 한 다음 해시 확인을 수행하는 별도의 PAM 모듈 집합을 가지며 모듈간에 공유되는 해시 값을 사용하여 각 액세스 방법에 대해 하나의 PAM 모듈을 갖는 것입니다 (예 : 암호는). 내 암호를 저장하고 암호를 확인할 수 있도록 MD5를 사용하여 데이터베이스를 사용하는 경우 그래서, 내 구성은 다음과 같이 보일 것이다 :
이 구성 pam_sql에서password required pam_sql.so
password required pam_md5.so
데이터베이스에서 해시 된 암호를 검색 (또는 사용자 이름 경우 실패 존재하지 않는다). 그런 다음 pam_md5는 해시 된 암호와 테스트 할 암호를 비교하고 일치하지 않으면 실패합니다. Bcrypt를 사용하는 다른 설정에서 pam_sql의 개발자가 새로운 해시 메소드를 업데이트 할 때까지 기다리지 않고 pam_bcrypt로 pam_md5를 교체하면됩니다.
그런 표준은 모듈 호출간에 해시를 유지하는 항목의 이름을 정의하는 것보다 복잡하지는 않을 것이라고 생각합니다. 하지만 제 질문은 "보안상의 이유로 그러한 표준을 나쁜 생각으로 여기겠습니까? 아니면 단순히 아무도 그러한 필요성을 알지 못했습니까?" – petithug
잘 알려진 특수 이름을 가진 PAM 항목을 사용하여이 서비스를 구현하는 것이 어렵지 않을 수도 있습니다. 나는 보안 문제를 보지 못했다. 나는 그것이 완료되지 않은 이유는 해시 된 패스워드를 사용하는 모든 전형적인 인증 방법은 이미 각 메소드에 의해 사용 된 특정 해시 포맷을 다루는 데 필요한 모든 기계류와 함께 왔다는 것입니다 (예 :'pam_unix'는 기존의 'crypt()') 해시가 원격으로 확인되고이 서비스가 적용되지 않을 수 있습니다 (예 : RADIUS, LDAP, IMAP 또는 HTTP 서버 제거에 대한 인증). – Celada