본문 바로가기

System Hacking

14~15일차]PAM개념

 

PAM이란 ?

Linux Pluggable Authentication Modules의 약어로 리눅스 PAM은 리눅스 또는 GNU/kFreeBSD 시스템에서 애플리케이션과 서비스에 대한 동적 인증을 제공한다. 리눅스-PAM은 인증 작업을 다음 4가지 독립적인 관리 그룹으로 분리한다.

 

1). 계정 모듈(account module)들은 명시된 계정이 현재 조건에서 유효한 인증 목표인지를 검사한다. 이것은 계정 유효기간, 시간 그리고 사용자가 요청된 서비스에 접근 가능한지 같은 조건을 포함한다.

2). 인증 모듈(authentication module)들은 비밀번호를 요청하고 검사하는 것 같이 사용자의 신원을 확인한다. 또한 인증 정보를 keyring 같은 다른 시스템들에게 전달한다.

3). 비밀번호 모듈(password module)들은 비밀번호 갱신을 책임진다. 또한 강력한 비밀번호 강화에도 사용된다.

4). 세션 모듈(session module)들은 세션 시작과 끝에 수행되는 행동을 정의한다. 그 후 사용자는 성공적으로 인증된다.

[출처 :https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_PAM ]              

 

 

PAM이 등장하기 전에는 시스템에 설치된 각 프로그램이 개별적으로 인증을 진행하였다. 하지만 이는 많은 불편함을 샀고 그 해결점으로 PAM이 등장한다. 유연한 집중형 인증을 통해 접근 제어 관리를 간소화하였고 PAM 라이브러리를 통해 애플리케이션 개발시 인증 루틴을 작성하지 않아 개발 과정이 간소화 됐다. 즉 인증을 위임하는 것이다. pam을 이해하고 구현하기위해서는 상당한 시간이 소요된다.

 

PAM-aware

  - PAM을 이용하여 인증을 진행할 수 있는 애플리케이션

  - PAM라이브러리로 컴파일되어있는 애플리케이션

#> ldd [file_name]

  - 파일의 공유라이브러리 종속성(연결)을 확인

 

 

PAM Authorizing Process

사용자나 프로세스가 PAM-aware애플리케이션에 접근을 요청하면, 다음 두 가지 기본 요소가 대상 인증 과정을 처리하는데 사용된다.

(1) PAM-aware애플리케이션의 설정파일(/etc/pam.d/)

 

(2) 설정파일이 사용하는 PAM모듈 (/lib64/security/)

# 이러한 PAM 모듈의 기능은 man 명령어를 통해 확인하거나 공식 문서 및 웹을 이용하여 확인 할 수 있다.

 

일반적인 과정

1). 사용자나 프로세스가 애플리케이션의 접근(Access)을 요청한다.

2). 해당 애플리케이션의 PAM 설정 파일을 확인한다.

  - 접근정책이 작성되어있다.

  - 접근 정책은 인증 과정에 사용되는 모든 PAM모듈의 리스트를 통해 설정된다.

  - 해당 PAM모듈 리스트를 스택이라고 한다.

3). 스택의 PAM모듈이 리스트상의 순서대로 호출된다.

4). PAM모듈은 성공 또는 실패 상태를 반환(Return)한다.

5). 스택은 계속해서 순서대로 확인되며, 실패 상태를 반환한다해서 중단되지 않는다.

6). 모든 PAM모듈의 상태 결과가 종합되어 전체 인증 과정의 성공 또는 실패 상태를 반환한다.

 

PAM-aware Configuration File

- /etc/pam.d/ 디렉토리에 애플리케이션 및 서비스 이름과 동일한 파일이 위치한다.  ( 우선 순위가 더 높다 )

- /etc/pam.conf로 통합하여 관리할 수도 있으나, 관리상 편이를 위해 나누어 사용하고 있다.

ex) abc라는 파일이 인증을 위한 절차가 있다면 /etc/pam.d/abc라는 파일을 만들어 관리를 한다. 설정파일이 별도로 없는 경우 그 나머지는 /etc/pam.d/ether파일이 관리를 한다.

 

 

PAM-option

단순 키워드

 Context (type)

Control Flag 

PAM Module 

Module Option 

 

연속된 액션

 Context (type)

Return Value + Action

PAM Module

Module Option

 

 

1). Context

- PAM모듈에는 각종 인증 서비스를 제공하는 표준함수가 있으며, 이러한 함수를 컨텍스트(Context) 라고 한다.

 

 

2). ControlFlag

- PAM 설정 파일에는 전반적인 상태를 결정하기 위한 컨트롤 플래그가 사용된다.

- 애플리케이션으로 반환되는 값이며, 다음 둘 중 하나에 해당한다.

- PAM 모듈이 반환하는 [실패] or [성공]을 나타낸다.

  - required : 실패 시, 다른 컨텍스트들이 스택에서 실행된 후, 실패 상태를 반환한다.

  - requisite : 실패 시 , 다른 컨텍스트들이 스택에서 실행되지 않고 즉시 실패 상태를 반환한다. 

  - sufficient : 실패 시, 모듈의 상태는 무시된다. 성공 시에는 성공 상태가 즉시 반환된다. 나머지 스택은 실행되지 않는다.

  - optional :

  - include : 지정된 PAM 설정파일의 반환 값을 포함한다.

 

3). Return Value + Action

  - 반환된 모듈의 상태는 설정파일에 열고된 일련의 액션들을 통해 처리된다.

  - 단순 키워드 방식이 아닌[반환코드]와[액션]조합하여 작성도 가능하다.

  - 반환코드의 종류를 보기위해서는 PAM모듈 개발자용 패키지가 필요하다

#> yum -y install pam-devel.x86_64

#> vi /usr/include/security/_pam_types.h

Main Return Values

success[0] : 성공

user_unknown[10] : 확인되지 않는 사용자

new_authok_read[12] : 새 인증 정보 요구

ignore [25] : 모듈 무시

default : 반환 코드가 없을 경우를 대비한 설정

 

Action