2. 어떻게 사용자 정보가 여러분의 시스템에 저장되는가

2.1. /etc/passwd

대부분의 리눅스 배포판(그리고 상용 *nixes도 마찬가지)에서는, 사용자정보는 /etc/passwd에 저장이 된다. /etc/passwd는 사용자 로그인과 암호화된 패스워드, 유일한 사용자 ID, 그룹ID(gid라고 부른다), 선택사항인 코멘트 필드(보통 사용자의 실제 이름과 전화번호등이 포함된다), 사용자의 홈디렉토리, 사용자가 사용하는 쉘들을 포함하는 텍스트 파일이다. 전형적인/etc/passwd 한 줄은 아래와 같다:

  pete:K3xcO1Qnx8LFN:1000:1000:Peter Hernberg,,,1-800-FOOBAR:/home/pete:/bin/bash
  

여러분들이 보듯이 이것은 꽤 솔직하다. 각각의 사용자들은 내가 위에서 설명한 여섯 개의 필드로 구성되어 있고, 각 필드는 콜론으로 구분되어 있다. 만약에 이것이 사용자 인증만큼 복잡하다면 이 HOWTO 문서는 필요가 없을 것이다.

2.2. Shadow passwords

/etc/passwd를 봐라. 여러분들은 실제 아래와 같은 것을 보았을 것이다:

  pete:x:1000:1000:Peter Hernberg,,,1-800-FOOBAR:/home/pete:/bin/bash
  

암호화된 패스워드는 어디로 갔지? 그것의 위치를 말하기 전에 약간의 설명이 필요하다.

모든 사용자의 정보와 암호화된 패스워드를 가지고 있는 /etc/passwd 파일은 모든 사용자에 의해 읽혀질 수 있고 어떤 사용자라도 시스템의 모든사용자의 암호화된 패스워드 파일을 가져갈 수 있게 되어있다. 패스워드는 암호화되어 있더라도 패스워드 푸는 프로그램들은 굉장히 많이 널려있다. 이렇게 증가하는 보안위협에 대처하기 위해 쉐도우패스워드가 개발되었다.

시스템이 쉐도어 패스워드를 사용한다면 /etc/passwd의 패스워드필드는 "x"로 교체되고 사용자의 실제 암호화된 패스워드는 /etc/shadow 파일안에 저장된다. /etc/shadow 는 root사용자만 읽을 수 있기 때문에 악의적인 사용자는 다른 사용자의 패스워드를 크랙할 수 없다. /etc/shadow파일의 각각의 목록들은 사용자의 로그인 ID, 암호화된 패스워드, 그리고 패스워드 변경과 관련된 필드를 포함하고 있다. 전형적인 하나의 목록은 아래와 같다:

    pete:/3GJllg1o4152:11009:0:99999:7:::
   

2.3. /etc/group/etc/gshadow

그룹정보는 /etc/gorup파일에 저장이 된다. 형식은 /etc/passwd와 형식과 마찬가지로 그룹명, 숫자로 된 그룹 ID, 그리고 콤마로 구분된 그룹멤버들의 리스트들을 포함하고 있다. /etc/group파일의 하나의 목록은 다음과 같다:

   pasta:x:103:spagetti,fettucini,linguine,vermicelli
  

패스워드 필드에 "x"가 보이듯이 그룹패스워드는 마찬가지로 쉐도우파일을 사용한다. 그룹은 대개 거의가 자신들의 패스워드를 가지고 있지 않지만, 쉐도우된 그룹패스워드정보가 /etc/gshadow 파일에 저장되고 있다는 것을 알릴만한 가치는 있다.

2.4. MD5로 암호화된 패스워드

전통적으로 유닉스의 패스워드는 표준 crpyt()함수를 이용해서 암호화하였다. (crypt()에 대한 더 많은 정보는 crypt(3) manpage를 보면된다). 컴퓨터가 더 빨리 성장함에 따라 이 함수로 암호화된 패스워드는 쉽게 깨졌다. 인터넷이 등장하면서 다중호스트를 사용한 패스워드 크랙킹을 위해 분산 작업도구들이 유용하게 되었다. 많은 더욱강한 MD5 해쉬알고리즘으로 패스워드를 암호화는 옵션들을 가지는 많은 새로운 리눅스 배포판이 나오고 있다(MD5에 대해서 더 알고싶으면 RFC 1321을 참고하라). MD5 패스워드가 패스워드 크래킹의 위협을 제거해주지는 않지만 패스워드파일을 크래킹하는 것을 더욱 어렵게 만들것이다.

2.5. 엉망진창에서 걸러내기

여러분들도 아시다시피, 서로 다른 많은 방법으로 사용자 인증정보들이 여러분들의 시스템에 저장될 수 있다(MD5 암호화 없는 쉐도우 패스워드, MD5로 암호화한 /etc/passwd의 패스워드). login이나 su 같은 프로그램들이 어떻게 당신의 패스워드를 확인할까? 더 나쁜경우에 여러분들의 시스템에 패스워드가 저장되는 방법을 바꾸기를 원한다면 어떻게 될까? 여러분들의 패스워드가 필요한 프로그램들이 패스워드가 다르게 저장되어 있다는 것을 어떻게 알까? PAM이 그 정답이다.