답변:
처음부터 Unix 및 Unix 스타일 운영 체제 (Linux 포함)는 항상 암호 해시 (1)로 암호를 저장했습니다. 이러한 해시는 원래에 저장 되었으나이 /etc/passwd파일은 정보를 다른 목적으로 사용할 수 있도록 세계적으로 읽을 수 ls -l있어야했습니다. /etc/passwd각 파일 소유자의 숫자 사용자 ID를 표시하기 위해 사용자 이름으로 변환하기 위해 간단히 읽어야 합니다. 그러나 악의적 인 사용자가 세계에서 읽을 수있는 파일에 해시 된 암호를 사용하면 해시를 쉽게 얻을 수 있고 다른 사용자 계정에 사용할 수있는 암호를 생성 할 수 있습니다 (2).
이를 방지하기 위해 해시 된 비밀번호는 결국 루트 (및 때때로 권한있는 관리자 그룹) 만 읽을 수있는 파일로 이동되었습니다 /etc/shadow. 이것은 시스템의 일반 사용자로부터 해시를 숨기고 사용자 인증을 위해 사용 가능하게 유지합니다.
참고 사항 :
Pedantic은 알고 있지만 저장된 비밀번호는 암호화 되지 않습니다 . 그것들은 암호로 안전한 (적어도 작성 당시) 해싱 알고리즘을 사용하여 해시됩니다. 여기서 관련된 주요 차이점은 해시는 고정 길이 (암호화 된 텍스트의 길이는 암호화 된 텍스트의 길이에 따라 달라짐)이고 되돌릴 수 없습니다 (암호화 된 텍스트는 해독 될 수 있으며 해시 된 텍스트는 불가능 함)입니다.
해시는 길이가 고정되어 있기 때문에 주어진 해시 표현과 일치하는 무한한 수의 입력이 있습니다. 따라서 공격자는 최신 암호 해시의 크기가 주어지지는 않지만 소유하는 사용자의 암호와 동일하지 않은 작동 암호를 찾을 수 있습니다.
/etc/shadow파일은 보안상의 이유로 생성하고, 각 사용자의 암호화 된 암호를 보유하고있다.
원래 암호화 된 비밀번호는에 저장되었습니다 /etc/passwd. /etc/passwd시스템은 사용자 ID를 사용자 이름에 맵핑하고 사용자가 서로 "예 : 다른 사용자의 홈 디렉토리 또는 전화 번호 (예 :"gecos "필드에 저장 됨)에 대한 정보를 찾을 수 있도록 세계에서 읽을 수 있어야합니다. "손가락"유틸리티에 의해 표시됩니다.
그러나 사람들은 이것이 보안 문제라는 것을 깨달았습니다. 시간이 충분하다면 누구나 가능한 모든 암호에 대해 암호화 된 암호를 프로그래밍 방식으로 생성 하여 무차별 대입 공격 을 수행 할 수 있습니다. 공격자가 실제로 통해 로그인을 시도하지 않고 그것을 한 경우 telnet나 ssh, 시스템이 공격을 받고 있음을 알 수 없었다.
따라서 암호화 된 비밀번호는 새로 작성된로 이동 /etc/shadow되었으며 루트 만 읽을 수 있습니다.
또한 /etc/passwd파일이 사용자의 계정 및 비밀번호와 관련하여 지원하지 않았다는 다른 정보도 포함 합니다 (예 : 비밀번호가 마지막으로 변경된시기 및 만료되는시기).
파일 형식에 대한 자세한 내용은 man 5 shadow( 웹 버전 )을 참조하십시오 .
처리중인 SUSE 버전을 모른 채 SUSE와 동일한 지 여부를 말할 수 없습니다. 예를 들어, SUSE 시스템은 MD5 대신 Blowfish를 사용할 수 있습니다.
또한 /etc/shadow파일을 다른 Linux 배포판을 실행하는 시스템과 혼합하고 있음을 암시 했지만 다른 배포판이 무엇인지 말하지 않았습니다.
예를 들어 쉐도우 파일을 SuSE 9.3에서 Ubuntu Server x86_64 로 마이그레이션 할 때 발생하는 문제를 참조하십시오 .
알아 내려면 /etc/shadow암호화 된 비밀번호 필드가 $1$또는로 시작하는지 확인하십시오 $2$. 이 포함 된 경우 $1$MD5이며 대부분의 다른 배포판과 호환됩니다. 포함되어 있다면 데비안의 Blowfish 섀도우 파일에$2$ 따르면 아마도 Blowfish 일 것입니다 .
Ubuntu를 사용하는 경우 Ubuntu 복어에 대한 첫 번째 Google 검색 결과 가 좋은 출발점이 될 수 있습니다.
/etc/passwd파일 에 사용자가 나열 됩니다. 이 파일에는 사용자가 로그인 할 수있을뿐만 아니라 시스템에서 사용하는 많은 정보가 포함되어 있습니다.
각 줄은 사용자 항목에 해당하며 다른 필드는 콜론으로 구분됩니다. 첫 번째는 로그인이고, 그 뒤에 해당하는 비밀번호가 있습니다.
이 필드에는 암호화 된 비밀번호가 저장되었습니다. 그러나 /etc/passwd파일은 시스템의 모든 사용자가 읽을 수 있어야하므로 @Mikel이 말한 것처럼 암호화로 무차별 대입 공격을 막을 수는 없습니다. 해결책은 이러한 암호화 된 비밀번호를 루트 전용 읽기 가능 파일로 이동하는 것 /etc/shadow입니다.
따라서 /etc/shadow시스템 사용자의 암호화 된 비밀번호를 포함합니다. 시스템은 암호 필드에 /etc/passwdx가 단독 으로 포함 된 경우이 파일에서 암호를 확인해야한다는 것을 알고 있습니다 ( " cross over to / etc / shadow").
/etc/passwd와 동일한 방식으로 해시됩니다 /etc/shadow. 실제로 암호는 평문 이라고 말하지/etc/passwd 않지만 * nix 암호 처리에 익숙하지 않은 사람은 대답을 암시하는 것으로 잘못 해석하기 쉽습니다.
x실제로 아무것도 의미 하지 않는다고 생각합니다 . 유효하지 않은 해시 (비밀번호와 일치하지 않는)로 존재합니다. 일부 시스템은을 사용 !합니다.
'87에서 Linux Shadow Password Suite가 된 것을 썼기 때문에 전 세계에서 모든 투표를 할 수 있는지 살펴 보겠습니다.)
원본 /etc/passwd파일에는 일반 텍스트 암호의 수정 된 DES 기반 해시가 포함되어 있습니다. 당시의 crypt()기능이 믿어졌다 (이는 UNIX 운영 체제의 창조자에 의해 언급 된) 암호 해시에 대한 공격으로 인해 가능한 암호의 수와 12 비트의 사용, 불가능하다고, 생성 된 (4,096 개의 가능한 값) "salt". 가능한 모든 일반 텍스트 암호는 4,096 개의 가능한 해시 값을 가졌으며 64 비트의 해시 결과를 사용하여 총 2 ^ 72 개의 가능한 암호 해시를 얻었습니다.
다른 포스터에서 언급했듯이 /etc/passwd다양한 유틸리티에서 사용자 이름과 UID 값 ( /etc/group파일이 그룹에 유사한 기능을 제공함) 을 매핑 하고이를 세계적으로 읽을 수 있어야하는 것으로 사용했습니다.
1980 년대에 /etc/passwd파일에 저장된 암호 해시에 대한 사전 공격 이 실현 가능 해졌고 /etc/shadowSystem V의 초기 릴리스에서 AT & T UNIX에 도입 되었다는 것이 명백해 졌습니다 . 필자는 원래 Shadow 라이브러리를 작성하는 데 사용한 맨 페이지를 문서화했습니다. ve는 잊어 버린 이래로 확실히 초기 시스템 V 릴리즈, 아마도 SVR3.2 일 것입니다.
AT & T가 한 일과 내가 리눅스에서 결국 사용되었던 87 년에 SCO Xenix (나중에 사악한 SCO Xenix가 아닌 원래 SCO Xenix)를 위해 구현 한 것은 단순히 해시 된 비밀번호를로 옮기는 것이었다 /etc/shadow. 이로 인해 권한이없는 사용자가 사본을 획득하고 이에 /etc/passwd대한 공격을 실행하는 드라이브 바이 공격이 방지되었습니다 . 내가 Shadow를 처음 쓴 이유에 대해 잘 알고 있다면 /etc/passwdUUCP를 거의 모든 용도로 사용했던 시절에 UUCP를 통해 파일을 다운로드하는 사용자가있었습니다 .
리눅스가 만들어지고 널리 사용되자 암호 해시를 공격하는 도구는 매우 많았습니다. 고성능 재 구현 crypt()은 하나의 수단이었으며, Crack 및 libcrack 과 같은 도구를 통한 사전 기반 공격도 있었습니다. 초기 포트는 Nate Holloway와 Floria La Roche에 의해 이루어졌습니다 (나는 그들에게 신용을 줬습니다.
결국 crypt()보호 된 파일에서도 기반 해시를 사용하는 것은 더 이상 안전하지 않으며 원래 MD5기반 해시가 변경되었습니다. MD5결국 너무 약한 것으로 간주되어 새로운 해시가 사용되었습니다.
이론적으로 강력한 해시가에 저장 될 수 있습니다 /etc/passwd. 열악한 운영 보안은 많은 시스템이 /etc/shadow다양한 공격 경로를 통해 파일을 사용할 수 있음을 의미 합니다. "백업 파일을 훔쳤습니다"가 가장 쉬운 방법 일 것입니다.