OS/Linux - Ubuntu

[Linux - 리눅스 / Ubuntu - 우분투] 보안 관리 도구(2) - PAM

주누다 2015. 5. 12. 21:23
반응형

PAM

- 사용자가 시스템의 서비스를 사용하는데는 사용자의 신원을 확인하는 인증(authentication)이 필요

- 우분투에서는 많은 프로그램이 중앙 집중화된 인증 기법을 사용

- 이 기법이 바로 PAM

- PAM은 'pluggable authentication modules'의 약자로 삽입형 인증 모듈이라고 번역할 수 있음

- PAM은 모듈 방식으로 구성되어 있어 시스템 관리자가 필요에 따라 

 인증 모듈을 추가, 삭제, 편집할 수 있음




PAM 설정 파일 

- PAM 모듈은 '/etc/pam.d' 디렉터리에 설정 파일을 가지고 있음

- 설정 파일은 각 서비스별로 존재

- 'sshd'나 'samba', 'crond', 'vsfptd' 등 서비스에 대한 설정 파일도 있음을 확인

- 패키지가 설치되면서 서비스 이름과 같은 이름으로 PAM 설정 파이르 '/etc/pma.d' 디렉터리에 생성한 것

===================================================================== [ mac : /var ] $ ls /etc/pam.d authorization ftpd passwd sshd checkpw login rshd su chkpasswd login.term screensaver sudo cups other smbd [ mac : /var ] $ =====================================================================




PAM 설정 파일 형식 

- <모듈 종류> <제어 플래그> <모듈 이름> <모듈 인자>


1) 모듈 종류

- auth :

 * 사용자를 인증하는데 사용

 * 예를 들어 암호가 정확한지를 확인

 * 그룹 지정에도 적용


- account :

 * 접근이 허용되는지를 확인

 * 사용자 계정이 유효한지 또는 사용자가 해당 날자에 로그인할 수 있는지를 확인


- password :

 * 사용자 계정의 암호를 바꾸는데 사용


- session :

 * 사용자의 세션을 설정하고 관리

 * 사용자의 홈 디렉터리를 마운트하는 것과 같이 

  접근을 허용하는데 필요한 부가적인 작업을 수행




2) 제어 플래그

- 모든 PAM 모듈은 수행 후에 성공이나 실패를 생성

- 제어 플래그는 특정 모듈의 성공과 실패를 어떻게 처리할 것인지를 알려줌

- required :

 * 인증을 계속하기 위해 반드시 성공해야함.

 * 실패하면 사용자는 다른 모든 모듈의 테스트가 끝날 때까지 결과를 받지 못 함.


- requisite :

 * 인증을 계속하기 위해 반드시 성공해야함.

 * 그러나 만약 이 지점에서 실패하면 사용자는 실패에 대한 메시지를 즉시 받음


- sufficient : 

 * 실패하면 이 모듈의 결과는 무시됨

 * 만약 이 모듈이 성공하고 앞선 required 모듈 중 실패가 없으면 인증 성공을 리턴


- optional :

 * 해당 인터페이스에 다른 모듈이 없는 경우에만 성공과 실패가 중요


- include :

 * 인자로 지정된 설정 파일의 내용을 모두 포함


- substack :

 * include와 같이 인자로 지정된 설정 파일의 내용을 모두 포함하나

  서브 스택의 동작 결과에 따라 나머지 모듈을 통과하지 않는다는 점이 다름


 

3) 모듈 이름

- 모듈 이름에는 삽입 가능한(pluggable) 모듈의 이름을 지정

- 예전 버전에서는 모듈의 절대 경로를 사용

- 현재는 PAM 모듈이 '/lib/i386-linux-gnu/security' 디렉터리에 위치

- 디렉터리 이름은 생략하고 모듈 이름만 지정

- PAM 모듈의 위치는 리눅스 배포판에 따라 다르므로 위치를 잘 확인해야함




4) 모듈 인자

- 모듈인자는 인증 과정에서 정보가 필요한 일부 모듈에 정보를 전달




PAM 파일의 예 


1 #%PAM_1.0

2 auth        required pam_securetty.so

3 auth        required pam_unix.so null

4 auth        required pam_nologin.so

5 account     required pam_unix.so

6 password   required pam_cracklib.so retry=3

7 password   required pam_unix.so shadow null use_authok

8 session      required pam_unix.so


1) 

- 1행은 주석으로 #로 시작하는 문장




2)

- PAM 파일에는 같은 모듈 인터페이스를 가진 모듈이 여러 개 설정될 수 있음

- pam_securetty.so :

 * 만약 사용자가 root로 로그인하려고 할 때 해당 터미널이 

 '/etc/securetty' 파일에 등록되어 있어야함

 * 터미널이 등록되어 있지 않으면 'Login incorrect' 메시지가 출력되고 로그인에 실패


- pam_unix.so nullok : 

 * 사용자에게 암호를 입력하도록 프롬프르트를 출력

 * 입력한 암호가 '/etc/shadow'에 등록된 암호와 같은지를 확인

 * nullok 인자는 pam_unix.so 모듈이 빈 암호도 허용한다는 것을 의미


- 첫 번째 인증 모듈에서 실패했다고 하더라도 모두 실행

- 이는 사용자가 어느 단계에서 인증에 실패했는지를 모르게 하기 위함

- 해커는 시스템에 침입하기 위해 이런 사소한 정보도 활용할 수 있기 때문




3)

- 5행의 account required pam_unix.so 는 계정의 정상 여부를 확인하는데 필요한 모듈

- pam_unix.so 모듈은 계정이 만료되지는 않았는지, 정해진 기간에 암호를 변경했는지 등을 확인




4) 

- 6행의 password required pam_cracklib.so retry=3 은 만약 암호가 만료된 경우

 pam_cracklib.so 모듈이 새 암호를 입력하도록 프롬프트를 출력

- 새로 입력한 암호가 사전 기반으로 쉽게 해독될 수 있는 것인지를 검사

- retry=3 은 보다 강력한 암호를 만들 수 있는 세 번의 기회를 주는 것




5)

- 7행의 password required pam_unix.so shadow null user_authok는 

 만약 프로그램이 사용자의 암호를 바꾸려면 반드시 pam_unix.so 모듈의 

 password 인터페이스를 사용하도록 하는 것

- shadow 인자는 사용자의 암호를 변경할 때 shadow 암호를 생성하도록 함

- nullok는 암호를 변경할 때 빈 암호를 허용하는 것

- use_authok 인자는 해당 모듈에서 패스워드 프롬프트를 출력하지 않고,

 안선 모듈에서 입력받은 암호를 받아들이도록 함

- 새 암호는 pam_cracklib.so를 통과한 보다 강력한 암호를 사용




6)

- 8행의 session required pam_unix.so 는 전체 세션을 관리하기 위해 

 pam_unix.so 모듈을 사용한다는 것을 나타냄

- '/var/log/secure' 파일에 로그 기록을 남김







반응형