script-kiddies의 모든 SSH 로그인 시도를 살펴보면 비밀번호 없는 계정이 설정된 인터넷에 연결된 시스템이 엉망인 것으로 가정합니다.
하지만 Linux/Unix 시스템에 그러한 계정이 있는지 확인하는 방법(아마도 손상된 설치 프로그램 스크립트, 혼란스러운 관리자 또는 유사한 것에 의해 생성되었을 수 있음)은 무엇입니까?
첫 번째 근사치로 다음과 같은 것을 생각할 수 있습니다.
$ grep '^[^:]\+::' /etc/passwd /etc/shadow
빈 비밀번호가 있는 모든 계정을 인쇄합니다. 그러나 특정 시스템에서는 어떤 프로그램도 빈 항목을 허용하지 않으므로 이러한 계정은 문제조차 되지 않습니다. - cf 비밀번호(5):
그러나 비밀번호 필드가 비어 있으면 /etc/passwd 파일을 읽는 일부 응용 프로그램은 액세스를 전혀 허용하지 않기로 결정할 수 있습니다.
하지만 해시는 어떻습니까?비어 있는문자열을 비밀번호로 사용하시겠습니까(예 crypt("")
: )?
어떻게 확인하나요?
더 복잡한 계정 데이터베이스(NIS, LDAP 등)를 사용할 때 계정을 확인하는 방법은 무엇입니까?
답변1
암호화된 비어 있거나 취약한 비밀번호를 찾는 쉬운 방법은 다음과 같은 비밀번호 크래킹 프로그램을 사용하는 것입니다. 존 더 리퍼.
NIS 또는 LDAP를 사용하는 경우 먼저 데이터베이스에서 비밀번호 해시를 추출해야 합니다. 한 가지 방법은 을(를) 이용하는 것입니다 getent
.maxschlepzig의 답변
답변2
문제의 마지막 부분을 해결하려면:
getent
데이터베이스 세부 정보를 추상화합니다. 예를 들어 다음을 사용할 수 있습니다.
$ getent passwd
$ getent shadow
이러한 데이터베이스에 액세스하기 위한 구성 독립적 메커니즘(파일, LDAP, NIS...)