4. 사용자 인증 보안

많은 리눅스 배포판은 적절하게 보안성을 갖추지 않은 사용자 인증을 가지고 판매한다. 이 섹션에서는 여러분들의 시스템에서 사용자인증을 안전하게 만드는 방법에 대해서 논의한다. 이러한 일을 하는 동안에 여러분들의 시스템을 더욱 안전하게 만들 긴 하겠지만 취약하지 않게 만든다는 순진한 생각은 하지 마라.

4.1. 강한 /etc/pam.d/other

/etc/pam.d의 모든 파일은 특정한 서비스에 의한 구성을 포함하고 있다. /etc/pam.d/other파일이 있는 데 이것은 이러한 규칙에 대한 아주 중요한 예외이다. 이 파일은 자신들의 구성 파일을 가지고 있지 않은 모든 서비스에 대한 구성을 가지고 있다. 예를 들어 (가상의)xyz 서비스가 인증을 시도한다면 PAM은 /etc/pam.d/xyz파일을 찾을 것이다. 하나라도 찾아지지 않는다면 xyz에 대한 인증은 /etc/pam.d/other 파일에 의해서 결정이 날 것이다. /etc/pam.d/other 파일은 PAM 서비스가 의지하는 구성파일이므로 안전이 중요한 문제이다. 여기서 /etc/pam.d/other 의 안전한 구성을 위해 2가지를 논의한다. 하나를 굉장히 편집증적인 것이고 하나는 적절한 것이다.

4.1.1. 편집증적인 구성

/etc/pam.d/other파일의 편집적인 구성은 아래와 같다.

    auth	required	pam_deny.so 
    auth	required	pam_warn.so 
    account	required	pam_deny.so 
    account	required	pam_warn.so 
    password	required	pam_deny.so 
    password	required	pam_warn.so 
    session	required	pam_deny.so 
    session	required	pam_warn.so
    

이렇게 구성하면 모르는 서비스가 네 개의 구성타입중 어떤곳에 접근을 시도하더라도 PAM은 인증을 거부하다(pam deny.so 모듈을 통해서)그리고 syslog warning(pam warrn.so 모듈을 통해서)로그를 남긴다. 이러한 잔인한 방법에 대한 유일한 문제점은 당신이 유연히 다른 서비스의 구성을 지워버리면 문제가 발생할 수 있다는 것이다. 당신의 /etc/pam.d/login 파일이 실수로 지워진다면 어떤 사람도 로그인할 수 없을 것이다!

4.1.2. 적절한 구성

여기에 그래도 좀 괜찮은 구성이 있다:

    auth	required	pam_unix.so 
    auth	required	pam_warn.so 
    account	required	pam_unix.so 
    account	required	pam_warn.so 
    password	required	pam_deny.so 
    password	required	pam_warn.so 
    session	required	pam_unix.so 
    session	required	pam_warn.so
    

이구성은 모르는 서비스가 인증하도록 허용한다. 하지만 사용자의 패스워드를 바꾸도록 허용하지 않는다. 이 구성은 모르는 서비스에 의해 인증을 허용하지만, 그러한 서비스가 인증을 시도할 때마다 syslog warning 로그를 남긴다.

4.1.3. /etc/pam.d/other 선택하기

I would strongly reccomend that you implement the first /etc/pam.d/other configuration unless you have a very good reason not to. It always a good idea to be 'secure by default'. If you ever do need to grant a new service authentication privileges, you can simply create a PAM configuration file for that service. 특별한 이유가 없는 한 여러분이 먼저 /etc/pam.d/other 구성을 구현하기를 나는 강력히 권한다. "무조건적 보안"을 실현하기 위해 가장 좋은 생각이다. 여러분들이 새로운 서비스 인증권한을 부여할 필요가 있을 때면 여러분들은 간단히 그 서비스에 대해 PAM 구성을 만들면 된다.

4.2. Null 패스워드로 사용자 로그인 금지하기

대부분의 리눅스 시스템에서는 ftp나 웹서버, 메일게이트웨이와 같이 어떤 시스템의 서비스에 권한을 부여할 사용되는 "가짜"사용자계정이 많이 있다. 이러한 계정을 가짐으로써 시스템은 더 안전해질 수 있다. 왜냐하면 이러한 서비스들이 해킹당하면 공격자들은 root로 운영되는 서비스의 모든 권한을 얻지 못하고 "가짜" 계정의 제한된 권한만을 얻을 수 있기 때문이다. 그러나 이러한 가짜 계정은 주로 null 패스워드를 가지기 때문에 로그인 권한 보안의 위험요소이다. 로그인을 허용하도록 하는 서비스에 대한 여러분들은 'auth'타입의 모듈에서 이러한 아규먼트를 제거하기 원할 것이다. 이것은 주로 로그인 서비스에 해당하고 또는 rlogin이나 ssh 서비스도 해당한다. 그래서 /etc/pam.c/login 파일을

   auth		required	pam_unix.so	nullok
   

아래와 같이 바꾸어야 한다:

   auth		required	pam_unix.so
   

4.3. 사용하지 않는 서비스 제거하기

/etc/pam.d의 파일들을 보면, 사용하지 않거나 거의 들어도 보지 못한 많은 프로그램의 구성파일들이 찾을 수 있을 것이다. 이러한 서비스에 인증을 허용하는 것은 큰 보안허점을 제공하지는 않지만 여러분들은 인증을 거부하는 것이 좋다. 이러한 프로그램의 PAM인증을 제거하는 가장 좋은 방법은 이 파일들의 이름을 바꾸는 것이다. 인증을 요청하는 서비스의 이름을 가지는 파일을 찾지 못하면 PAM은 매우 (기대하건대)안전한 /etc/pam.d/other을 참조할 것이다.여러분들이 나중에 이러한 프로그램중 하나가 필요하다면 간단히 원래 파일이름으로 바꾸면 되고 그러면 모든 것이 예상한대로 동작할 것이다.

4.4. 패스워드 크래킹 도구

패스워드 크래킹도구가 공격자들에 의해서 시스템을 해킹하기위해 사용되고 있는 반면 오히려 그러한 도구를 이용해 시스템관리자들은 시스템의 패스워드 강도를 보장할 수 있는 혁신적인 도구로 사용할 수 있다. 가장 널리 사용되고 있는 패스워드 크래킹도구는 "crack"과 "John the Ripper"이다. 크랙은 여러분의 facorite 배포판에 포함되어 있다. John the Ripper는 http://www.false.com/security/john/index.html에서 구할 수 있다. 여러분들의 패스워드 데이터베이스를 상대로 이러한 도구를 돌려봐라. 결과를 보고 나면 깜짝 놀랄 것이다.

추가로 사용자의 패스워드가 바뀔 때 마다 패스워드 강도를 검사하는 데 필요한 크랙 라이브러리를 이용하는 PAM 모듈이 있다. 이 모듈이 설치되면 사용자는 패스워드를 변경시 최소패스워드 강도를 만족하는 패스워드로만 변경할 수 있다.

4.5. Shadow와 MD5 패스워드

이문서의 처음 섹션에서 논의가 되었듯이, 쉐도우와 MD5 패스워드는 여러분들의 시스템을 더욱 안전하게 만들 수 있다. 설치절차중에 대부분의 현재 리눅스배포판은 MD5 와 쉐도우 패스워드를 설치할 것인 지를 질문할 것이다. 그것을 선택하지 않을 충분한 이유가 없다면 MD5와 쉐도우를 사용해야 한다. 비쉐도우와 비MD5에서 바꾸는 절차는 복잡하다. 그리고 이문서에서는 다루지 않는다. Shadow 패스워드 HOWTO는 좀 오래 되었지만 도움이 될 것이다.