전통적인 유닉스 시스템에서는 단방향 암호화가 된 패스워드를 포함하여 사용자 계정 정보를 ``/etc/passwd'' 라는 텍스트 파일에 보관한다. 이 파일은 (예를 들어 ``ls''와 같은) 수많은 도구에 의하여 -- 예를 들어, 파일의 소유자 이름을 보여주기 위하여 사용자 번호와 사용자 이름을 매칭하는데 -- 사용되므로 누구든지 읽을 수 있도록 되어있다. 결과적으로 이는 어느 정도 보안상의 위험이 된다.
계정 정보를 저장하는 또 하나의 방법은, 내가 항상 사용하는 방법인데, 섀도우 패스워드 형식을 같이 사용하는 것이다. 이 방식은 전통적인 방식과 결합하여 /etc/passwd 파일은 호환성있는 형식으로 정보를 저장한다. 단, 패스워드는 (실제로 /etc/passwd 파일에 저장하지 않고) 대신 "x" 한글자만 넣어둔다. 두번째 파일인 ``/etc/shadow'' 파일이 암호화된 패스워드와 그 외의 정보, 즉 패스워드 유효기간 등을 저장한다. /etc/shadow 파일은 루트 계정에 의하여만 읽을 수 있기 때문에 보안상의 위험은 줄어들게 된다.
다른 리눅스 배포판은 섀도우 형식을 사용하기 위해서는 섀도우 패스워드 수트를 설치하도록 되어 있는데 비하여 레드햇에서는 간단히 할 수 있다. 두개의 형식을 바꾸기 위하여는 (루트로서) 다음과 같이 타이핑하면 된다:
/usr/sbin/pwconv 섀도우 형식으로 변환 /usr/sbin/pwunconv 전통형식으로 되돌아 감 |
섀도우 패스워드를 사용하는 경우에, ``/etc/passwd'' 파일은 계정 정보를 담고 있으며 그 모양은 다음과 같다:
smithj:x:561:561:Joe Smith:/home/smithj:/bin/bash |
한 줄의 각 항목은 ":" 콜론 문자에 의하여 분리되며 그 내용은 다음과 같다:
사용자이름. 최대 8자까지. 대소문자를 구분하며 대개의 경우에는 소문자로만 구성
패스워드 항목에는 "x" 문자가 들어있음. 패스워드는 ``/etc/shadow'' 파일에 저장됨.
숫자로된 사용자 번호. 이 번호는 ``adduser'' 스크립트에 의하여 부여된다. 유닉스는 이 항목과 그 다음의 그룹 항목을 이용하여 어느 파일이 누구에게 속한 것인지를 구분한다.
숫자로 된 그룹 번호. 레드햇은 파일 보안을 향상 시키기 위하여 꽤 특이하게 그룹 번호를 사용한다. 보통 그룹 번호는 사용자 번호와 같다.
사용자의 진짜 이름. 이 항목의 최대 길이가 얼마인지는 모르겠지만 합리적인 수준으로 (30자 이내) 관리하도록 해야 한다.
사용자의 홈 디렉토리. 보통 /home/사용자이름 (예를 들어, /home/smithj) 이 된다. 모든 사용자의 개인 파일과 웹 페이지, 메일 전달 지정 등이 여기에 저장된다.
사용자의 "쉘 계정". 대개의 경우에 (내가 개인적으로 선호하는 쉘이기도 한) bash 쉘을 사용하도록 하기 위하여 ``/bin/bash'' 로 지정한다.
사용자에게 쉘 계정을 제공하고 싶지 않을 때도 있다. 그럴 때에는 에러 메시지를 보여주고 사용자가 로그 오프 시켜버리는 스크립트를 만들어서 그 이름을 예를 들어 ``/bin/sorrysh'' 라고 한 뒤 이 스크립트를 그런 사용자의 디폴트 쉘로 지정하면 된다.
참고: 주의: 예를 들어, 웹 페이지를 갱신할 수 있도록 "FTP" 전송을 허용하여야 한다면 쉘 계정은 ``/bin/bash'' 로 해주어야 한다 -- 대신 사용자의 홈 디렉토리로 로그인하는 것은 막을 수 있도록 특별한 방법으로 셋업을 해주어야 한다. 이에 대한 자세한 내용은 7.1절 을 참조하시요.
``/etc/shadow'' 파일은 패스워드와 사용자 계정의 유효기간 등을 담고 있으며 그 모양은 다음과 같다:
smithj:Ep6mckrOLChF.:10063:0:99999:7::: |
passwd 파일과 마찬가지로 섀도우 파일도 ":" 콜론 문자로 각 항목을 구분하며 각각은 다음과 같다:
사용자이름. 최대 8자. 대소문자를 구분하며 대개의 경우에는 소문자로만 구성된다. /etc/passwd 파일의 사용자이름과 짝을 이룬다.
패스워드. 13 글자로 암호화 됨. 비어있는 경우 (즉, ::) 는 (보통은 좋은 방법이 아니지만) 로그인하는데 패스워드가 필요없다는 것을 나타내며, ``*'' 라고 되어 있으면 (즉, :*:) 그 계정은 막아두었다는 것을 나타낸다.
패스워드를 마지막으로 바꾼 날이 (1970년 1월 1일로부터) 며칠째의 날인지 나타내는 항목.
최소 며칠이 지난 뒤에 패스워드를 바꿀 수 있는지를 나타내는 항목 (0이면 언제든지 바꿀 수 있다는 의미)
패스워드를 반드시 바꿔야 하는 날로 부터 며칠이나 지났는지를 나타내는 항목 (99999 는 무지무지 오랫동안 패스워드를 바꾸지 않았다는 것을 나타낸다)
패스워드가 만기가 되었음을 며칠 동안 사용자에게 계속 주의를 줄 것인지 나타내는 항목 (1주일 동안 알려주려면 7)
패스워드가 만기가 되어서 계정이 사용불가가 된지 며칠이나 되었는지 나타내는 항목
계정이 사용불가가 된 것이 1970년 1월 1일부터 계산하여 며칠째였는지 나타내는 항목
미래의 사용을 위해서 잡아둔 항목