입문자들을 위한 PAM의 기초와 PAM LDAP연동

안녕하세요, DSMentoring 컨설팅사업본부의 bjchoi입니다.

이 글은 PAM에 Deep한 부분은 다루지 않으며, PAM에 대한 지식이 없는 분들을 위한 포스팅인 것을 참고해 주시면 감사하겠습니다. PAM 설명 후 NSLCD에 대한 설명과 nslcd.conf에 대한 옵션 예시도 추가했습니다. 그럼 시작해보도록 하죠shy

Part 1 PAM

1. PAM

1.1 PAM(Pluggable Authentication Modules) 이란?

PAM은 Linux 시스템에서 사용하는 “착탈형 인증 모듈”로 응용 프로그램(서비스)에 대한 사용자의 사용 권한을 제어하는 모듈입니다.

Pam이 등장하기 전에는 시스템에 설치된 각 프로그램이 개별적으로 진행했었습니다. 관리자 입장에서는 너무 복잡해지고, 개발 시에는 인증 수단을 따로 개발을 해야됐기 때문에 시간이 많이 소요되고 관리가 힘들어진다는 단점이 있었습니다.

이러한 불편함을 개선하려 pam이 등장합니다.

이렇게 등장한 pam은 위에서 말씀드렸던 문제점들을 상당 부분을 보완하고 시스템 운영자가 응용프로그램의 인증 동작을 제어할 수 있어 안전하게 시스템을 운영할 수 있다는 점이 가장 큰 장점입니다.
그렇지만, 이 장점은 pam모듈을 이해하여 정상적으로 설정하였을 경우이고, 잘못 설정 할 경우 비인가자에게 접근을 허용하여 기밀성을 침해하거나 인가받은 사용자의 접근을 차단하는 등의 가용성을 해칠 수 있어 사용에 주의해야 합니다.

2. PAM 의 목적과 동작 과정

2.1 목적

PAM 모듈은 소프트웨어의 개발과 인증 및 안전한 권한 부여 체계를 분리하고자 하는 목적으로 만들어졌습니다.
PAM을 통한 인증을 수행할 경우, 응용프로그램에서 직접 인증 로직을 구현하지 않아 개발이 간소화될 뿐만 아니라 passwd 파일 등 시스템 파일을 열람하지 않아도 되는 장점이 있습니다. 무엇보다도 가장 큰 장점은 시스템 운영자가 응용프로그램의 인증 동작을 제어할 수 있어 더욱 안전하게 시스템을 운영할 수가 있습니다.

2.2 동작 과정

사용자 또는 프로세스가 애플리케이션에게 접근하면 해당 서비스 데몬은 pam에게 해당 사용자 인증을 요청합니다. <출처 : 이글루시큐리티>

일반적인 동작 과정을 순서로 나열해보겠습니다.

1) 사용자나 프로세스가 애플리케이션의 접근(Access)을 요청한다.
2) 해당 애플리케이션의 PAM 설정 파일을 확인한다.
3) 스택의 PAM모듈이 리스트상의 순서대로 호출된다.
4) PAM모듈은 성공 또는 실패 상태를 반환(Return)한다.
5) 스택은 계속해서 순서대로 확인되며, 실패 상태를 반환한다해서 중단되지 않는다.
6) 모든 PAM모듈의 상태 결과가 종합되어 전체 인증 과정의 성공 또는 실패 상태를 반환한다.

3. PAM 구성

3.1 PAM 기본 구조

PAM은 “Module type, Control Flag, Module Name 및 Module Arguments”으로 구성되어 있으며, 구성 예시는 다음과 같습니다.

3.2 각 구조의 특징

1) Module type 
– pam에 어떤 타입의 인증이 사용될 것인지를 알려줍니다. 같은 타입의 모듈은 쌓일 수 있고, 사용자에 인증되기 위한 다중 요구사항을 만족하도록 요청할 수 있습니다.

구 분 설 명
auth 사용자에게 비밀번호를 요청하고 입력 받은 정보가 맞는지 검사하는 모듈
account 명시된 계정이 현재 조건에서 유효한 인증 목표 인지 검사하는 것으로 계정에 대한 접근 통제 및 계정 정책 관리하는 모듈
password 사용자 인증 정보(password)를 변경할 수 있도록 비밀번호 갱신을 관장하는 모듈
session 사용자가 인증을 받기 전/후에 수행해야 할 일을 정의하는 모듈

2) Control Flag
– 컨트롤 플래그는 pam에서 사용되는 모듈들이 결과에 따라 어떤 동작을 해야하는지 결정하는 필드입니다.

구 분 설 명
requisite 인증 결과가 실패일 경우, 인증 종료
– 인증 결과가 성공일 경우, 다음 인증 모듈 실행
(최종 인증 결과에 미반영)
– 인증 결과가 실패일 경우, 즉시 인증 실패를 반환
required 인증 결과와 관계없이 다음 인증 실행
– 인증 결과가 성공일 경우, 최종 인증 결과는 무조건 성공
– 인증 결과가 실패일 경우, 최종 인증 결과는 무조건 실패
sufficient 인증 결과가 성공일 경우, 인증 종료
– 인증 결과가 성공일 경우, 즉시 인증 성공을 반환
– 인증 결과가 실패일 경우, 다음 인증 모듈 실행
(최종 인증 결과에 미반영)
optional 일반적으로 최종 인증 결과에 반영되지 않음
단, 인증 모듈의 명확한 성공/실패가 없다면 이 모듈의 결과를 반환
include 다른 PAM 설정 파일 호출

* 위 5개의 Control Flag 중 “Required”의 경우, 해당 모듈의 결과와 상관없이 다음 모듈을 실행시킵니다. 심지어 다음에 실행된 모듈의 결과보다 더 높은 우선순위를 가지므로 “Required”에서 실패가 되면 최종 인증 결과는 실패가 된다는 사실에 주의해야합니다.

3) Module Name
– 사용하고자 하는 모듈의 경로와 이름을 지정하는 필드이며, PAM 모듈은 대부분/lib/security 또는 /etc/pam.d 디렉터리에 위치합니다.

4) Module Arguments
– 모듈-인수는 모듈로 전달되는 인수를 나타냅니다.
– 각각의 모듈은 인수를 가지고 있습니다. 모듈 마다 인수가 필요할 수도 필요 없을 수도 있습니다.

구 분 설 명
Debug 시스템 로그 파일에 디버그 정보를 남기도록 지정
No_warn 모듈이 경고 메시지를 보내지 않도록 지정
Use_first_pass 사용자에게 password 입력을 요구하지 않도록 지정하는 인수로 이전 모듈에서 입력 받은 password가 존재하지 않을 경우, 인증 실패 반환
Try_first_pass 기존 모듈에서 입력 받은 password로 인증 시도하며, 이전에
입력 받은 password가 존재하지 않을 경우, 사용자에게 입력 요구

4. 주요 구성 파일 역할

4.1 주요 구성 파일 역할

1) ‘password-auth’
– 해당 파일은  “/etc/pam.d” 하위에 위치에 있으며, “x-window (KDE, Gnome) 로그인”, “ssh 원격 접속” 시 설정하는 파일입니다.

2) ‘system-auth’
– 해당 파일은  “/etc/pam.d” 하위에 위치에 있으며, “콘솔을 통한 로그인”, 일반 계정에서 root 계정 전환(su) 시 적용하는 파일입니다.

Part 2 nslcd

1. nslcd

1.1 nslcd란..?

nscld 는 사용자, 그룹 및 기타 NSS(이름 지정 조회)를 수행하거나, 사용자 인증, 권한 부여 또는, 암호 수정(PAM)을 수행하려는 로컬 프로세스에 대한 LDAP 쿼리를 수행하는 데몬입니다.

– 명령어 옵션

구 분 설 명
-c, –check 데몬이 실행 중인지 확인할 수 있습니다.
데몬이 이미 실행 중이면 0, 그렇지 않으면 1을 반환
-d, –debug 디버깅 모드를 활성화합니다.
–help 짧은 도움말을 표시하고 종료합니다.
-V, –version 버전 정보를 출력하고 종료합니다.

2. nsswitch.conf

2.1 nsswitch.conf 란..?

/etc/nsswitch.conf 파일은 데이터베이스의 검색 순서를 정의합니다. 이 파일에는 노드에서 네임 확인을 위해 네임 서비스에 연결하는 기본 순서가 포함되어 있습니다. 각 항목에 대해 사용할 네임 서비스와 조회 순서가 이 파일에 저장됩니다.

2.2 LDAP 연동 관련 설정

LDAP 연동 시 nsswitch.conf 파일 내용 중 ‘passwd’, ‘group’, ‘shadow’, ‘protocols’, ‘netgroup’, ‘automount’ 항목에 ‘ldap’을 추가해야 nslcd가 사용자 계정 인증 시 참조합니다. (인증 방식에 따라 요구하는 파일은 상이합니다.)

– 설정 예시

3. authconfig

3.1 /etc/sysconfig 디렉터리의 역할

/etc/init.d/ 의 초기화 스크립트가 필요 시 참조하는 파일이고 서비스 구현 시 각종 옵션을 변수 값으로 기록한 파일입니다. /etc/init.d/ 파일을 수정하는 것 보다 /etc/sysconfig/ 설정값을 변경하는 것이 시스템 유지보수에 편리합니다. rpm 패키지로 설치하지 않았을 때, 파일이 존재하지 않을 수도 있습니다.

3.2 /etc/sysconfig/authconfig 란?

사용자 정보 및 인증 방법 설정할 수 있고, authconfig 명령을 사용하거나, 직접 변경이 가능합니다. 추가로 LDAP 연동 설정 방법은 ‘USELDAP’, ‘USELDAPAUTH’ 항목을 ‘yes’로 변경해야 합니다.

-설정 예시

4. nslcd.conf

4.1 nslcd.conf의 역할

nslcd 를 실행하기 위한 구성 정보가 포함되어 있습니다. NSS 조회 및 PAM 작업이 LDAP 조회에 매핑되는 방식을 정의하는 옵션이 각 줄에 포함되어 있습니다.

4.2 nslcd.conf 옵션

– 예시

4.3 각 항목의 역할

구 분 설 명
UID 데몬을 실행하는 사용자 ID를 지정합니다.
숫자 또는 기호 값일 수 있습니다.
UID가 지정되지 않으면 사용자를 변경하려는 시도가 수행되지 않습니다.
필요하지 않은 값을 사용해야 합니다.
GID 데몬이 실행되어야 하는 그룹 ID를 지정합니다.
숫자 ID 또는 기호 값일 수 있습니다.
GID가 지정되지 않으면 그룹을 변경하려는 시도가 이루어지지 않습니다.
URI 연결할 서버의 LDAP URI를 지정합니다.
URI 체계는 ldap, ldapi, 또는 ldaps일 수 있으며, 각각 TCP/IP 또는 SSL을 통한 LDAP을 지정합니다(LDAP 라이브러리에서 지원하는 경우) 또는 DNS 값을 사용하여 DNSSRV 레코드를 사용하여 서버를 조회할 수 있습니다.기본적으로 현재 도메인이 사용되지만 DNS:DOMAIN 구문을 사용하여 다른 도메인을 쿼리할 수 있습니다.이 옵션은 여러 번 지정할 수 있습니다. 일반적으로 첫 번째 서버만 다음 서버와 함께 폴백으로 사용됩니다.호스트 이름 확인에 LDAP 조회가 사용되는 경우 모든 호스트 이름은 LDAP을 사용하지 않고 확인할 수 있는 IP 주소 또는 이름으로 지정해야 합니다.
ldap_version 사용할 LDAP 프로토콜의 버전을 지정합니다.
기본값은 LDAP 라이브러리에서 지원하는 최대 버전을 사용하는 것입니다.
bind DN 조회를 위해 디렉토리 서버에 Bind할 고유 이름을 지정합니다.
기본값은 익명으로 바인드하는 것입니다.
bindpw Bind할 자격 증명을 지정합니다.
이 옵션은 위의 binddn 과 함께 사용할 때만 적용할 수 있습니다.
이 옵션을 설정하면 Root 사용자에게만 접속 권한을 부여 하도록 nslcd.conf 파일의 권한을 변경하는 것을 고려해야 합니다.
rootpemoddn DN Root 사용자가 PAM 모듈을 사용하여 사용자 암호를 수정하려고 할 때 사용할 고유 이름을 지정합니다.

4.4 ATTRIBUTE MAPPING EXPRESSIONS

일부 속성의 경우 표현식을 사용하여 결과 값을 구성할 수 있습니다.
아래는 표현식 예시와 설명입니다.

– 설명

구 분 설 명
${attr:-word} 속성 값을 대체하거나, 속성이 설정되지 않았거나 비어 있는 경우 단어로 대체합니다
${attr:+word} word속성이 설정되면 대체하고, 그렇지 않으면 빈 문자열로 대체합니다.
${attr:offset:length} length위치에서 시작하여 문자(실제로는 바이트)를 대체합니다.(offset()에서 시작하여 계산됨)
대체된 문자열이 너무 길면 잘립니다.
특히 길이가 0일 수 있습니다.
(length가 0이거나 offset원래 문자열에서 벗어나는 경우)
${attr#word} word속성 값의 왼쪽에서 가능한 가장 짧은 일치를 제거합니다.

– Entry 예시

– 사용 예시
1) ${attr:-word} 설정

2) ${attr:+word} 설정


답글 남기기