IT/OracleLinux-1Z0460

pam

알콩달콩아빠 2022. 5. 20. 10:08
728x90
반응형

안녕하세요

 

뚱보프로그래머 입니다.

 

pam 입니다.

 

PAM

PAM Pluggable Authenfication Module의 의미로 주로 서비스별로 그리고 전체적으로 인증을 하고자 할 때, 사용자 그룹 단위의 인증을 요하는 경우에 사용한다.

즉 사용자 레벨의 보안 설정이라고 생각하면 된다,

pam은 새롭고 더 좋은 인증프로그램이 나올때 마다 교체만 해주면 되고 그리고 기존에 있던 프로그램을 얼마든지 적용할 수가 있기 때문에 사용상 여러가지 잇점이 있다

pam의 가장 큰 특징은 인증에 대한 것은 PAM에 맞기는 것이 PAM 인증의 장점이다.

 

1. 설정화일

1) /etc/pam.d/서비스

각각의 서비스들에 대한 설정 파일들이다. 주로 해당 응용프로그램의 일반적인 이름을 사용한다

주로 ftp, passwd, rsh, pop, samba, linuxconf, su, reboot, sudo, imap, login, rexec 등이 있다.

그리고 default 인증 방법을 정의하기 위해 정의된 특별한 서비스 이름이 있다. 'OTHER'라는 것이 이것인데, 대소문자 구별없이 쓸 수 있다. 만약 어떤 서비스의 인증 모듈 설정이 이미 되어 있으면 'OTHER'항목은 무시된다.

 

2) /lib/security/*

pam에서 사용하는 모듈들이 있는 디렉토리이며 새로운 모듈이 추가되면 여기에 추가하기만 하면사용가능하다

 

3) /etc/security/설정파일

time.conf, access.conf, limits.conf

 

2. /etc/pam.d/서비스의 형태

/etc/pam.d 디렉토리에 있는 서비스의 파일을 열면 일반적으로 다음과 같은 형식을 취한다.

[필드형식]

모듈타입  제어 플래그  모듈경로  전달인수(옵션)

 

1) 모듈타입

1] auth  : 사용자인증

이 모듈타입은 사용자 인증의 두가지 면을 제공한다.

첫째는, 응용프로그램이 사용자에게 패스워드를 물어보거나 다른 확인 방법을 사용하도록 해서 그 사용자가 자신이 주장하는 사람이 맞는지 확인하는 것이다.

두번째는, 그룹 멤버쉽을 주거나(/etc/groups파일에 있는 내용을 통해서) credential(신임)속성을 통해 다른 권한을 주는 것이다. 주로 패스워드를 통하지만 생체인증과 같은 보다 정교한 방법을 통해서 사용자가 자신이 주장하는 사용자가 맞는지 결정한다

            

2] accout  : 시간,인원제한,자원 2차정보로 접속제어

이 모듈은 인증이 아닌 계정관리를 수행한다. 이것은 보통 시간/날짜나 현재의 시스템 자원 상황(최대 사용자수)이나 사용자의 위치('root'는 콘솔에서만 로그인이 가능하다)등에 따라 서비스에 대한 접근을 허가하거나 제한하는 것이다.

계정은 사용자가 해당 서비스에 접근이 허용되었는지, 패스워드가 기간이 만료가 되었는지를 결정한다.

 

3] session 

이 모듈은 서비스를 사용하기 직전/직후에 필요한 작업과 관련이 있다. 이러한 것들은 사용자와 교환할 어떤 데이터들의 opening/closing과 관련한 정보들의 기록, 디렉토리의 마운트 등이 해당된다.

인증이 끝나고 연결 되어 있을 때 언제 접속했는지,접속했을 때 하는 일에 대해서 선언하며 사용자의 홈 디렉토리를 마운팅/언마우팅하는 것과 로그인/로그아웃 그리고 사용자에게 제공하는 서비스를 제한/제공하는 것등을  포함한다.

 

4] passwd

사용자가 인증을 변경하거나 암호를 변경할 때 이 모듈을 사용하며 이 마지막 모듈타입은 사용자와 연관된 인증토큰(패스워드)들을 갱신할 때 필요하다.

보통, challenge/response 방식에 기반한 인증모듈 종류별로 각각 하나의 password모듈씩이 존재한다.

 

               

2) 제어플래그

control-flag은 관련되는 모듈의 성공/실패 결과에 따라 어떻게 PAM라이브러리가 반응할지를 지정한다.

모듈들이 쌓여(같은 타입의 모듈들이 순서대로 수행된다) 있기 때문에 control-flag는 각 모듈의 상대적인 중요도를 결정한다. 응용프로그램은 /etc/pam.d 디렉토리 이하의 서비스에 열거된 모듈 각각의 성공/실패에 대해 알 수 없다. 대신에, Linux-PAM라이브러리로부터 요약된 성공/실패에 대한 결과를 받게된다. 모듈들의 수행 순서는 /etc/pam.d 디렉토리 이하의 서비스 파일들에 열거된 순서대로 앞에 나온것이 뒤에 것보다 먼저 수행된다.

Linux-PAM v0.60부터,  control-flag은 두가지 문법중 하나로 정의할 수 있다. 보다 단순한(처음부터 있던) 문법은 특정 모듈별로 전체적인 성공/실패에 대해 주는 영향을 하나의 단어로 지시하는 것이다.

이것에는 네가지의 단어가 있다: required, requisite, sufficient, optional.

1] required

반드시 요구되어지는것( fail하면 다음모듈을 살펴본다)이며 인증이 거부되기 전에 비록 PAM이 이 서비스에 등록된 다른 모든 모듈들을 요구함에도 불구하고 실패할 경우 인증을 거부하도록 한다.

이것은 해당 module_type이 전체적으로 성공하기 위해서는 이 모듈의 성공이 필요하다는 것을 말한다.

나머지 모듈(같은 module-type)이 모두 다 수행되기 전까지 사용자가 이 모듈이 실패했는지 확실히 알 수 없다.

 

2] requisite : 실패했다면 바로 실패했다고 결론

이 모듈을 이용하는 인증이 실패할 경우, 즉시 인증을 거부하도록 한다. required와 비슷하나, 실패한 경우 제어가 바로 응용프로그램에게 넘어간다. 결과값은 처음의 실패한 required requisite모듈의 결과값이다. 이 플래그는 사용자가 안전하지 않은 매체(medium)에서 패스워드를 입력할 경우에 대비해 사용할 수 있다. 이러한 행동은 크래커에게 시스템의 유효한 계정을 알려줄 수 있다. 이 가능성은 민감한 패스워드를 적대적인 환경에 노출시키는 것에 대한 사소하지 않은 염려와 비교해서 검토해야 한다.

 

3] sufficent : 충분조건 (꼭 성공하지않아도 전체에는 영향이 없다.)

여기서 성공하면 전체성공이고 실패하면 다음모듈로 이동한다. 비록 이전에 요청되어진 모듈이 실패하더라도 이 모듈에 의해서 인증이 성공할 경우, PAM은 인증을 승인한다. 이 모듈의 성공은 Linux-PAM라이브러리에게 이 module-type이 성공했다고 판단할만큼 충분하게 만족스럽다는 것이다. 이전의 required모듈이 실패하지 않았다면 더이상 이 type의 나머지 모듈들은 수행되지 않는다. (이경우에 뒤따르는 required모듈이 수행되지 않는것에 유의하라 이 모듈의 실패는 이 module-type의 성공여부 판단에 치명적이지는 않은것으로 간주된다

 

4] optional :  그 결과에 영향을 미치지 않고

이름이 의미하듯이,  control-flag는 모듈이 서비스에 대한 응용프로그램의 성공/실패에 중요하지는 않다는 것이다. 보통, Linux-PAM은 모듈들의 성공/실패 판단시에 이런 모듈은 무시한다.

그러나, 이전/이후의 모듈들이 명확한 성공/실패가 없다면 이 모듈이 응용프로그램에게 주는 결과를 결정짓는다. 후자의 경우의 예로, 다른 모듈들이 PAM_IGNORE같은 것을 리턴할 경우이다.

 

5] 정교한 제어

좀더 정교한(새로운) 문법은 더욱 명확하고 시스템 관리자가 사용자를 어떻게 인증할지에 있어 더 많은 제어방법을 제공한다.  control-flag는 대괄호([])안에 value=action들이 나열되어 있는 형태이다:

 

[value1=action1 value2=action2 ...]

value1는 다음의 리턴값들 중 하나이다: success; open_err; symbol_err; service_err; system_err; buf_err; perm_denied; auth_err; cred_insufficient;     authinfo_unavail; user_unknown; maxtries; new_authtok_reqd; acct_expired; session_err; cred_unavail; cred_expired; cred_err; no_module_data; conv_err; authtok_err; authtok_recover_err; authtok_lock_busy; authtok_disable_aging; try_again; ignore; abort; authtok_expired; module_unknown;     bad_item; default. 마지막(default)것은 명확히 정의되지않은 리턴값들에 대한 action을 정하기 위해 사용된다.

 

Action1는 양의 정수나 다음의 토큰들 중 하나이다: ignore; ok; done; bad; die; reset. 양의 정수 J action으로 정해지면 같은 type의 모듈들중 다음의 J개 모듈들을 건너뛰게하는 것이다. 이 방법으로 관리자는 여러개의 서로 다른 실행과정을 갖는 정교한 모듈목록을 적절히 만들 수 있게 된다. 어느 경로가 될지는 각 모듈의 반응에 의해 결정된다.

 

ignore - 모듈의 결과값이 응용프로그램이 갖게될 결과값에 영향을 주지 않는다.

bad - 이것은 결과값이 모듈 실패의 표시로 생각해야 한다. 이모듈이 실패한 첫번째 모듈이면, 이 상태값은 전체 모듈의 결과로 사용될 것이다.

die - bad와 같지만 모듈 수행이 중지되고, PAM이 응용프로그램으로 바로 리턴한다는 것이 다르다.

ok - 이것은 PAM에게 관리자가 이 결과값이 모듈 전체의 결과 상태로 바로 사용되길 바란다고 알려주는 것이다. , 모듈목록의 수행과정에서 앞    까지의 상태가 PAM_SUCCESS이면 이 모듈의 결과값은 앞까지의 상태값을 덮어쓴다. 반면 앞까지의 상태가 실패라면 이 'ok'값은 상태를 덮어쓰    지 않을 것이다.

done - ok와 같지만 모듈 수행이 중지되고 PAM이 응용프로그램에게 바로 리턴한다는 것이 다르다.

reset - 모듈들의 결과상태 기록을 지우고, 다음 모듈부터 새로 시작한다.

 

새로운 문법의 능력을 체감하기 위해, 이것으로 무엇을 할 수 있는지 보여주겠다. Linux-PAM-0.63부터 client plug-in agents라는 것이 소개되었다.     이것은 PAM client/server프로그램들이 고유하게 가지고 있는 전송 규약을 사용해서 서로다른 기계간의 인증을 지원하는 것을 가능하게 해 준다.     ``[... value=action ...]'' 제어 문법으로 응용프로그램이 유순한 클라이언트 프로그램에게는 바이너리 프롬프트를 지원하지만 동시에 우아하게도 오    래된 구식의 응용프로그램에게는 다른 인증모드를 선택하도록 설정할 수 있다. 유연하지 않은가?

 

 

6] 일반적인 옵션 인자들(generic optional arguments)

다음은 어떠한 모듈이든 인식할 수 있는 가능성이 큰 옵션 인자들이다. 인자들(이것들도 포함해서)은 대게 선택적(optional)이다.

 

debug

syslog(3) 호출을 사용해서 시스템 로그 파일에 디버그 정보를 남기도록 한다.

 

no_warn

모듈이 응용프로그램에게 경고(warning) 메시지를 보내지 않도록 한다.

 

use_first_pass

모듈이 사용자에게 패스워드를 요구하지 않도록 한다. 대신에, 이전에 입력받았던 패스워드(먼저 수행된 auth모듈 로부터)를 받아서 사용해야 한다.    패스워드가 없다면, 사용자는 인증을 받지 못하게 될 것이다.(이 옵션은 auth password 모듈들만 적용된다.)

 

try_first_pass

모듈은 이전에 입력받은 패스워드(먼저 수행된 auth 모듈로부터)로 인증을 시도한다. 만일 패스워드가 없다면, 사용자에게 패스워드를 물어본다.(    옵션은 auth모듈만 적용된다.)

 

use_mapped_pass

이 인자는 현재 배포되고 있는 Linux-PAM에 있는 어떤 모듈도 지원하지 않는다. 이는 미국 암호화 수출 제한과 관련하여 생길 수 있는 문제 때문이   . 미국내에서는 개발자들이 물론 자유롭게 이 기능을 구현할 수 있다. (다른 나라에서도 마찬가지이다.). 호환성의 이유로 DCE-RFC 86.0    (bibliography 장을 보라) 에서 제안된데로 이것의 사용을 기술한다.

use_mapped_pass인자는 암호화되지 않은 인증토큰을 요구하는 앞의 모듈로부터 인증 토큰을 받은후 다시 이것을 사용해 암호/복호 키를 생성하여    이 모듈에게 필요한 인증토큰을 안전하게 저장하고 읽을 수 있게 한다. 이런 방법으로, 사용자는 한번의 인증 토큰 입력만으로 여러개의 모듈에 의   한 인증 과정을 조용히 통과할 수 있다. 안전하게 하기 위해 믿을만한 튼튼한 암호화를 요구하지만 편한 기능임은 분명하다. 이 인자는 auth    password모듈에만 적용된다.

 

expose_account

보통 사용자 계정에 관한 정보를 누설하는 것은 모듈이 채택할만한 안전한 보안정책이라 할 수 없다. 때때로, 사용자 이름이나 홈 디렉토리나 사용   할 쉘에 대한 정보들은 사용자 계정을 공격하는데 사용될 수 있다. 그러나 어떤 상황에선 이런 종류의 정보가 위험요소가 될 것 같지는 않다: 보안이    유지된 환경에서 패스워드를 물어볼 때, 사용자의 실제 이름을 표시하는 것은 친근한 느낌을 준다고 볼 수도 있을 것이다. expose_account인자는    관리자에 의해 적절한 것 같은 계정 정보에 대해 덜 엄격하게 구분하도록 하는 표준 인자이다.

 

3) 기본 사용 방법

1] 로그인 제한

/etc/pam.d/login

#%PAM-1.0

 auth       required     /lib/security/pam_securetty.so

 auth       required     /lib/security/pam_pwdb.so shadow nullok

 auth       required     /lib/security/pam_nologin.so

 account    required     /lib/security/pam_pwdb.so

 password   required     /lib/security/pam_cracklib.so

 password   required     /lib/security/pam_pwdb.so nullok use_authtok md5 Shadow 

 session    required     /lib/security/pam_pwdb.so

 session    optional     /lib/security/pam_console.so

 

2] 파일로 telnet사용자 제한

/etc/pam.d/login 에 다음 라인 추가 

auth required /lib/security/pamlistfile.so item=usr sense=allow file=/etc/loginuser onerr=succeed

sense=deny를 한다면 /etc/loginuser 파일에 기록된 유저만 로그인

 

3] 시간에 따른 사용자 접속제한

/etc/pam.d/login

account required /lib/security/pamtime.so  -> 추가

 

/etc/security/time.conf

[형식] services;ttys;users;times

서비스  콘솔  유저이름  시간

          mo tu we th fr sa su

         al        wd       

         mo al 월요일을 제외한날 

         we wk 주말을 제외한날

         24시간제 사용 :    & , | , *

[ 예제 ]

login ; tty* ; apple | clear ; tu fr !0500-2400

목요일과 금요일 새벽 5시부터24시까지를 제외한 시간에 로긴

 

4] 시스템 자원을 제한

/etc/pam.d/login 다음라인추가

session  required /lib/security/pamlimit.so

/etc/security/limit.conf 설정파일 참조

/etc/security/limit.conf

형식 : 도메인 : 사용자의 계정이름,그룹,모든사용자정의

            <domain>  <type>  <item>       <value>    

              *               soft    core            0

              *               hard    rss             10000

              apple         soft     nproc         10

              apple         hard    nproc         30

              @study      hard    maxlogins    1

             vision           -      nofile           5

 

5] 로그인 접속제한

/etc/pam.d/login

사용자의 2차적인 내용(로긴이름,로긴장소)이므로 accout 를 사용한다.

account required /lib/security/pam_access.so

 

/etc/security/access.conf 설정파일

[형식]

permission : users : origins

-: 거부     + : 허용

예제

all except student,teacher:192.168.1.,linuxstudy.edu

 

6] 시간에 따른 제한

/etc/pam.d/login

시간에 따른 사용자제한

account required /lib/securiy/pamtime.so

 

/etc/security/time.conf 설정화일을 참조한다.

[형식] services;ttys;users;times

login ; apple ; ! Th

목요일을 제외한 나머지 일의 접속을 허용

 

7] /etc/pam.d/login

# PAM configuration for login

auth       requisite  pam_securetty.so

auth       required   pam_nologin.so

auth       required   pam_env.so

auth       required   pam_unix.so nulok

account    required   pam_unix.so

session    required   pam_unix.so

session    optional   pam_lastlog.so

password   required   pam_unix.so nullok obscure min=4 max=8

 

 

8] /etc/pam.d/ftp

#%PAM-1.0

auth    required     /lib/security/pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

auth       required     /lib/security/pam_pwdb.so shadow nullok

auth       required     /lib/security/pam_shells.so

account    required     /lib/security/pam_pwdb.so

session    required     /lib/security/pam_pwdb.so

 

 

9] pam 서비스 파일을 지웠을 때

부팅시에 리눅스 single 모드로 부팅한다.

boot:linux single

#cd /etc

#mv pam.conf pam.conf.orig

#mv pam.d pam.d.orig

#mkdir pam.d

#cd pam.d

#vi other

auth                    required pam_unix_auth.so

account              required pam_unix_acct.so

password           required pam_unix_passwd.so

session              required pam_unix_session.so

로그인 후 보안 설정

#vi other

# The PAM configuration file for the `other' service

#

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

 

3. 사용가능한 모듈

 

1). The access module

1]. 개요

모듈 이름:  pam_access

제공되는 관리 그룹: account

시스템 의존성: 설정 파일을 요구한다. 디폴트는 /etc/security/access.conf이지만, 바꿀 수 있음.

네트워크 인식: PAM_TTY가 지정되어 있다면, PAM_TTY를 통해서 얻고, 그렇지 않다면 ttyname()으로 stdin파일 설명자(descriptor) tty 이름을 얻는 시도를한다. 표준 gethostname(), yp_get_default_domain(), gethostbyname()호출. netgroup지원을 위한 NIS가 사용.

 

2] 모듈의 전반적인 설명

log daemon형태의 login 접근 제어를 제공한다.

 

3] 계정관리 구성요소

인식하는 인자들: accessfile=/path/to/file.conf

설명: 이 모듈은 login name, 호스트(또는 도메인) 이름, 인터넷 주소(또는 네트워크 번호), 또는 네트워크가 아닌 login일경우 터미널 이름을 바탕으로 logdaemon형태의 login접근 제어를 제공한다. 진단은 syslog(3)를 통해 보고된다.

이 모듈의 동작은 다음의 인자로 제어할 수 있다:

* accessfile=/path/to/file.conf - 디폴트 대신 사용할 access설정 파일을 가르킨다.

이것은 서로 다른 서비스들이 각자의 access파일을 사용할 때 유용하다.

 

예제/추천하는 사용법: 몇몇 계정은 동작하지만 전부 login 하게 할 필요가 없는 NIS서버나 메일 서버같은 관리용 기계에 이 모듈을 사용할 것을 권장한다.

/etc/pam.d 형태의 설정의 경우에, 모듈이 /lib/security에 있다면, /etc/pam.d/login, /etc/pam.d/rlogin, /etc/pam.d/rsh 그리고 /etc/pam.d/ftp에 다음의 줄을 우선 추가한다:

account required /lib/security/pam_access.so

 

시스템이 .rhosts파일을 무시하지 않는다면 이 모듈의 사용이 효과가 없다는 것을 주목하라.

 

2) Chroot

1] 개요

모듈 이름: pam_chroot

제공되는 관리 그룹: account; session; authentication

네트워크 인식: localhost로 가정함

2] 모듈의 전반적인 설명

이 모듈은 일반 사용자들에게 파일시스템의 루트를 속이기 위한 목적으로 만들어졌다.(예를들어, 사용자의 '/'는 실제로는 /some/where/else이다.)

여러 분류의 사용자들이 시스템을 사용하고, 당신이 보안에 관해 약간 신경을 많이 쓴다면 유용할 것이다. 시스템에서 사용자들이 볼수 있는 것을 제한하고 실행시킬 수 있는 프로그램을 제한하는데 사용할 수 있다.

 

예제/추천하는 사용법: 적당한 프로그램들의 리스트를 제공하라 - 'cat', 'ls', 'rm', 'cp', 'ed'같은 것들.

 

3) Cracklib pluggable password strength-checker

1] 개요

모듈 이름: pam_cracklib

제공되는 관리 그룹: password

시스템 의존성: libcrack 시스템 라이브러리와 시스템 사전:/usr/lib/cracklib_dict.

 

2] 모듈의 전반적인 설명

이 모듈은 password의 튼튼한 정도를 검사하도록 하기 위해 응용크로그램의 패스워드 스택에 등록해서 사용된다.

이 모듈은 우선 패스워드의 튼튼함을 검사하기 위해 Cracklib 루틴을 호출한다. 패스워드가 crack되지 않으면 다음의 추가적인 검사를 한다:

새 패스워드가 예전 패스워드와 앞으로 읽으나 뒤로 읽으나 같은 글자인가?

새 패스워드가 예전 패스워드에서 대소문자 변경만 된게 아닌가?

새 패스워드가 예전 패스워드와 얼마나 많이 비슷한가? 이것은 'difok' 인자에 의해 주로 조절된다.

‘difok'는 새 패스워드가 예전 패스워드와 얼마나 많은 다른 문자들을 가지고 있어야 하는가를 나타낸다.

이것의 디폴트값은 10이거나 새 패스워드의 크기의 1/2중 작은 값이다.

길고 복잡한 패스워드로 변경해야만 하는 것을 피하기 위해 'difignore'가 있다.

이것은 새 패스워드 길이의 최소값을 정해서, 길이가 그 이상이면 'difok'를 무시한다. difignore의 디폴트값은 23이다.

새 패스워드가 너무 짧지 않은가? 이것은 다음 5개의 인자로 조절된다.

'minlen', 'dcredit', 'ucredit', 'lcredit', 'ocredit'이다. 이 인자들에 대한 기본값과 동작에 대한 자세한 설명은 인자에 대한 설명이 있는 란을 보라.

돌려썼는가? - 새 패스워드가 예전 패스워드를 돌려쓰기만 한 것이 아닌가?

이미 사용된 패스워드 - 새 패스워드가 과거에 사용되었는가? 예전 패스워드는 /etc/security/opasswd에 저장된다.

이 모듈은 인자 없이 사용되면 표준 유닉스 패스워드 암호화 방식을 사용한다. md5암호화를 사용하면, 패스워드는 8자 이상이어도 되고, 이 모듈의 디폴트 설정은 사용자가 만족스러운 새 패스워드를 선택하는데 어렵게 만들 수 있다. 명백히, 새 패스워드가 예전 패스워드의 1/2이상의 문자들을 포함하지 않도록 하는 것은 사소하지 않은 제약이 되었다. 예를 들어, 예전 패스워드가 'the quick brown fox jumped over the lazy dogs'이면 바꾸기가 어렵다. 게다가 디폴트설정이 5자의 짧은 길이의 패스워드를 허용한다. md5시스템에 대해서, 새 패스워드의 최소 길이를 늘리는 것은 좋은 생각이다. 이렇게 하면 서로다른 종류의 문자들을 사용해서 패스워드를 만들게하는 것을 장려하고, 동시에 예전 패스워드에 있는 문자들 대부분을 그대로 새 패스워드에서도 쓸 수 있게 하는 것을 허용할 수 있다.

 

3] 패스워드관리 구성요소

인식하는 인자들: debug; type=XXX; retry=N; difok=N; minlen=N; dcredit=N; ucredit=N; lcredit=N; ocredit=N; use_authtok;

 

설명:

이 모듈의 동작은 나쁜 패스워드를 알아내기 위해 사용자에게 패스워드를 묻고, 시스템 사전과 몇가지 규칙으로 패스워드의 튼튼함을 검사한다.

기본 동작은 하나의 패스워드를 묻고, 튼튼함을 검사하고, 튼튼하다고 생각되면 다시 패스워드를 묻는다(첫번째것이 올바로 입력된 것인지 확인하    기 위해서). 모두 통과하면 패스워드는 설치된 다음 모듈로 새 인증 토큰으로서 전달된다.

 

    기본 동작은 인자들을 사용해서 여러가지로 고칠 수 있다.

debug - 이 옵션은 모듈이 동작을 보여주기 위해 syslog(3)에 정보를 남기도록 한다.(이 옵션이 log파일에 패스워드 정보를 남기지는 않는다.)

 

type=XXX - 모듈의 디폴트 동작은 패스워드를 물어볼 때 "New UNIX password: ", "Retype UNIX password:"라고 묻는데, 이 옵션을 사용해서 'UNIX'    라는 말 대신 'XXX'로 바꿀 수 있다.

 

retry=N - 새 패스워드를 물어보는 횟수로 디폴트는 1이다. 이 옵션을 사용해서 N만큼 횟수를 늘릴 수 있다.

 

difok=N - 새 패스워드에서 예전 패스워드에 있지 않은 문자들을 몇자나 사용해야 하는지 나타내는 수로 디폴트는 10이다. 그리고, 새 패스워드에서     1/2이상의 글자가 이전과 다르다면 새 패스워드는 받아들여진다.

 

minlen=N - 새 패스워드의 최소 크기에 1을 더한 크기이다. 새 패스워드엔 사용된 문자열의 길이 외에 각 문자종류 (숫자, 대문자, 소문자, 기타문자    )를 사용한 것에 대해서 각각 크레딧을 준다. 이 인자의 초기값은 9인데, 같은 문자 종류만을 사용하는 예전 UNIX패스워드에 적당하지만 md5시스템    의 추가된 보안능력을 충분히 쓰기에는 적당하지 못하다. (역주: 문자 종류에 대한 크레딧들이 1이라고 하면, 모두 같은 종류로만 된 패스워드는 8    의 길이를 가져야 하고, 두가지 종류를 갖는 경우에는 7의 길이를 가져야 하는 것이다.)

 

Cracklib자체에 두가지 길이 제한이 있다는 것을 염두해 두라. Cracklib에는 4자 이상으로 하도록 하드코딩되어 있고 minlen값을 참고하지 않고 검사    하도록 정의된 값(6)이 있는데, 만일 더 짧은 패스워드를 허용하고 싶으면 이 모듈을 사용하지 말거나 Cracklib과 이 모듈을 다시 컴파일해라.

 

dcredit=N - 숫자 문자가 가질 수 있는 크레딧의 최대값이다. 만약 패스워드에 N개 이하의 숫자를 사용했다면 사용된 숫자의 갯수가 현재 정의된     minlen값을 계산하는데 크레딧값으로 적용된다. 이것의 기본값은 1인데, 1 minlen 10보다 작을때 권장값이다.

 

ucredit=N - 대문자가 가질 수 있는 크레딧의 최대값이다. 만약 패스워드에 N개 이하의 대문자를 사용했다면 사용된 대문자의 갯수가 현재 정의된     minlen값을 계산하는데 크레딧값으로 적용된다. 이것의 기본값은 1인데, 1 minlen 10보다 작을때 권장값이다.

 

lcredit=N - 소문자가 가질 수 있는 크레딧의 최대값이다. 만약 패스워드에 N개 이하의 소문자를 사용했다면 사용된 소문자의 갯수가 현재 정의된     minlen값을 계산하는데 크레딧값으로 적용된다. 이것의 기본값은 1인데, 1 minlen 10보다 작을때 권장값이다.

 

ocredit=N - 앞서 정의된 문자 이외의 기타 문자가 가질 수 있는 크레딧의 최대값이다. (역주: , 기타 문자는 숫자, 대문자, 소문자를 제외한 나머    지 문자를 가르킨다.) 만약 패스워드에 N개 이하의 기타 문자를 사용했다면 사용된 기타문자의 갯수가 현재 정의된 minlen값을 계산하는데 크레딧    값으로 적용된다. 이것의 기본값은 1인데, 1 minlen 10보다 작을때 권장값이다.

 

use_authok - 이 인자는 사용자에게 새 패스워드를 묻지말고, 앞서 실행된 password모듈에서 받은 것을 사용하도록 모듈에게 강제한다.

 

예제/추천하는 사용법:

이 모듈 사용의 예를위해, pam_pwdb password component와 적층구조로 설정하는 것을 보여준다.

 

#

# 이 줄들은 2개의 password 타입의 모듈을 갖고 있다. 이 예에서 사용자는 3번의

# 튼튼한 패스워드를 입력할 기회를 갖는다. 'use_authok'인자는 pam_pwdb모듈이

# 패스워드를 묻지 않도록하고, 대신에 pam_cracklib이 제공하는 것을 사용하도록

# 한다.

#

passwd  password required       pam_cracklib.so retry=3

passwd  password required       pam_pwdb.so use_authtok

 

 

또하나의 예로(/etc/pam.d/passwd 형태에서) md5 패스워드 암호화를 사용하길 원하는 경우이다.

#

# 이 줄들은 md5시스템이 적어도 14자이고, 숫자2, 다른문자2에 대한 크레딧값을

# 갖도록 하고, 예전 패스워드에 존재하지 않는 문자들을 적어도 3개이상 갖도록

# 하는 것이다.

#

password  required pam_cracklib.so difok=3 minlen=15 dcredit= 2 ocredit=2

password  required pam_pwdb.so use_authtok nullok md5

 

4) 잠금 모듈(The locking-out module)

1] 개요

모듈 이름: pam_deny

유지보수: 현재의 Linux-PAM 유지보수자

제공되는 관리 그룹: account; authentication; password; session

 

2] 모듈의 전반적인 설명

이 모듈은 접근을 거부하는데 사용된다. 이것은 PAM구조를 통해 응용프로그램에게 항상 실패를 리턴한다.

앞서(3.개요) 말했듯이 이 모듈은 디폴트(OTHER) 셋팅으로 적당하다.

 

3] 계정관리 구성요소

설명: 오직 실패만을 리턴한다. 실패 type PAM_ACCT_EXPIRED.

 

예제/추천하는 사용법:

이 모듈을 account 타입에 설정하면 Linux-PAM account management함수인 pam_acct_mgmt()를 사용하는 응용프로그램들을 통해 시스템에 접근하려는 모든 사용자들을 막을 수 있다.

 

다음 예는 로그인을 불가능하게 만드는 것이다.

#

#모든 계정을 막기 위해서 이 줄을 추가하라.

#

login   account  required       pam_deny.so

 

4] 인증관리 구성요소

설명:

아무것도 하지 않고 실패를 리턴한다. 실패type pam_authenticate()가 불리는 경우에는(사용자 인증을 시도하는 경우) PAM_AUTH_ERR이고    pam_setcred()가 불리는 경우에는(사용자에게 권한을 주는 경우 -- 실제의 경우에 이 함수는 절대 안불릴것이다.) PAM_CRED_UNAVAIL이다.

 

예제/추천하는 사용법:

별도의 설정이 없는 응용프로그램들에 대한 접근을 이 pam_deny모듈을 사용해 막을 수 있다. 아래와 같이 Linux-PAM 설정파일에 추가하면 된다.

 

#

# OTHER 란에 이 줄을 추가해서 기본적으로 응용프로그램들의 인증이 성공하지

# 못하도록 만들어라.

#

OTHER   auth     required       pam_deny.so

 

5] 패스워드관리 구성요소

설명: 사용자에게 패스워드를 변경하지 못하게 한다. 항상 PAM_AUTHTOK_ERR를 리턴한다.

 

예제/추천하는 사용법:

이 모듈은 응용프로그램이 사용자의 패스워드를 변경하는 것을 막는데 사용한다. 예를 들어 login이 옛날 패스워드가 만료되어 새 패스워드를 자동적으로 묻게 하는 것을 막으려면 아래 내용을 설정파일에 추가해야 한다.

#

# 다른 로그인 항목에 이 줄을 추가해서 로그인 프로그램이 사용자 패스워드를

# 변경할 수 없도록 막아라.

#

login   password required       pam_deny.so

 

 

6] 세션관리 구성요소

설명: 호스트 컴퓨터에서 응용프로그램이 세션을 시작하는 것을 막는다.

 

예제/추천하는 사용법:

날짜같은 메시지를 보여주는 세션 모듈(XXX -이런 모듈은 누가 만들어야 한다)을 같이 사용하고, 이 모듈은 사용자가 shell을 시작하지 못하게 막는    . pam_motd모듈이 있다면, 아래 설정처럼 해서 사용자에게 시스템 시간을 알려주게 할 수 있다.

 

#

# 사용자의 로그인을 (정중하게) 거부하는 설정 예

#

login   session  required       pam_motd.so file=/etc/system_time

login   session  required       pam_deny.so

 

 

5) 환경 변수 설정/해제(Set/unset environment variables)

1] 개요

모듈 이름: pam_env

제공되는 관리 그룹: Authentication (setcred)

시스템 의존성: /etc/security/pam_env.conf

 

2] 모듈의 전반적인 설명

이 모듈은 환경변수를 설정/해제하는 것을 가능하게 한다. 이전에 설정한 환경변수나 PAM_RHOST같은 PAM_ITEM들을 사용하여 환경변수를 설정 하는 것을 가능하게 한다.

 

3] 인증관리 구성요소

인식하는 인자들: debug; conffile=configuration-file-name; envfile=env-file-name; readenv=0|1

 

설명:

이 모듈은 고정 크기의 스트링(이것의 내용은 이미 설정된 환경변수나 PAM_ITEM이 될 수 있다.)을 사용하는 임의의 환경변수값을 설정/해제하게     해준다. 모든 것은 설정파일(디폴트는 /etc/security/pam_env.conf인데 conffile인자로 바꿀 수 있다.)에 의해 조정된다. 각 줄은 변수이름으로 시작    하고 각 변수에 대해 DEFAULT OVERRIDE 두가지 옵션이 가능하다. DEFAULT는 관리자가 변수의 값을 어떤 디폴트 값으로 지정하게 하는 것이다     . DEFAULT가 없으면, 빈 스트링으로 간주된다. OVERRIDE pam_env에게 사용되는 값이 있다면 그 값을(default값을 엎어쓰게) 넣게 하는 것이다.     OVERRIDE가 사용되지 않으면, ""로 간주되고 변수값을 덮어쓰지 않는다.

 

VARIABLE   [DEFAULT=[value]]  [OVERRIDE=[value]]

 

(아마 존재하지 않는)환경 변수들이 ${string}문법을 사용해 쓰일수 있고, (아마 존재하지 않는)PAM_ITEM들이 &commat;{string}문법을 사용해 쓸     수 있다. $, &commat; 문자는 백슬래쉬(\)를 앞에 붙여서 일반 문자로 사용될 수 있다. (예를 들어 \$) 값안에 큰따옴표를 사용할 수 있다.(환경     변수 이름에는 사용할 수 없다.) 값안에 공백이 필요한 경우에는 따옴표를 값 전체의 앞뒤에 붙여 사용할 수 있다. 이때에 따옴표를 값안에 넣는 방    (escaped quotes)은 지원하지 않는다.

 

이 모듈은 각각의 줄에 KEY=VAL형태를 갖는 단순한 환경변수 파일을 읽을 수 있다. (디폴트 파일은 /etc/environment)이다.) envfile 인자를 사용해     읽을 파일을 바꿀 수도 있고, readenv인자를 1이나 0으로 사용해 이 기능을 켜거나(1) (0) 수 있다.

 

이 모듈의 동작은 다음의 인자들로 조정할 수 있다:

debug - syslog(3)에 좀더 많은 정보를 기록하도록 한다.

conffile=filename - 디폴트 설정파일은 /etc/security/pam_env.conf인데, 이 옵션을 사용해 설정파일을 바꿀 수 있다. full path를 써야한다.

 

envfile=filename - 디폴트 파일 /etc/environment KEY=VAL형태의 변수를 바로 로드하는데 사용된다. 이 옵션은 디폴트 파일을 바꿀 수 있다. full     path를 써야 한다.

 

readenv=0/1 - envfile을 읽어드리는 것을 켜거나 끈다.(0은 끄기, 1은 켜기). 디폴트는 1이다.

 

예제/추천하는 사용법:

pam_env.conf에 더 많은 정보와 예가 있다.

 

6) The filter module

1] 개요

모듈 이름: pam_filter

제공되는 관리 그룹: account; authentication; password; session

시스템 의존성: 작동하기 위해서 시스템에 filter가 설치되어 있어야 함.

 

2] 모듈의 전반적인 설명

이 모듈은 ttysnoop(XXX - 레퍼런스 필요)과 같은 프로그램의 대안으로 플러그인을 제공하기 위해 작성되었다. 이 기능을 수행하는 필터가 아직 작성되지 않았기 때문에 현재로서는 단지 장난감에 불과하다. 모듈과 함께 제공되는 유일한 필터는 간단하게 입출력 스트림에서 대문자와 소문자    간에 변환하는 기능을 한다.(이 일은 termcap에 근간을 둔 에디터들에서 는 매우 귀찮은 일이 될 수 있다.)

 

3] 계정관리 + 인증관리 + 패스워드관리 + 세션관리 구성요소

인식하는 인자들: debug; new_term; non_term; runX

 

설명:

모듈의 각 요소는 원하는 필터를 호출하는 잠재적 기능을 가진다. 필터는 항상 사용자의 권한이 아닌 호출하는 응용프로그램의 권한을 가진     execv(2)로 호출된다. 이 때문에 세션을 닫을 때를 제외하면 보통 사용자가 필터를 kill할 수 없다.

 

Linux-PAM 환경파일에서 전달되는 인자에 의해 모듈의 행동은 대단히 바뀔 수 있다.

 

debug - 이 옵션은 모듈이 실행될 때 syslog(3)에 기록되는 정보의 양을 늘린다.

new_term - 필터의 기본동작은 응용프로그램에 연결하기 위해 사용하고 있는 터미널을 나타내는 PAM_TTY 아이템을 설정하는 것이다. 이 매개변수는 필터된 가상 터미널로 PAM_TTY를 설정하도록 한다.

non_term - PAM_TTY 아이템을 설정하려고 시도하지 않는다.

runX - 모듈이 필터를 호출할 수 있도록 하기 위해 모듈이 언제 필터를 호출 할 것인지를 알아야만 한다. 이 인자는 필터가 언제 이일을 하는지 알리는데 필요하다. 뒤따르는 인자는 각각 실행되는 필터의 전체 경로명과 필터가 인식하는 명령 인자이다.

X에 해당하는 값은 1 2이다. 이는 필터가 실행되는 정확한 시간을 나타낸다.

이 개념을 이해하기 위해서 'Linux-PAM 모듈 개발자를 위한 가이드'를 읽는 것이 유용할 것이다.

기본적으로 각각의 관리그룹에는 모듈함수를 호출하는 두가지 방식이 있다.

 

인증관리와 세션관리의 경우에는 실질적으로 분리된 두가지 함수가 있다. 인증관리의 경우 이 함수들은 _authenticate _setcred이다. -- 여기서     run1 _authenticate 함수로부터 필터를 실행한다는 것을 의미하고 run2 _setcred 함수로부터 필터를 실행한다는 것을 의미한다.

    세션관리 모듈의 경우 run1은 필터가 _open_session 단계에서 호출되고, run2 _close_session단계에서 호출됨을 나타낸다.

 

    계정관리의 경우 run1, run2 둘다 사용이 가능하다.

 

    패스워드관리의 경우 run1 _chauthtok가 실행되는(PAM_PRELIM_CHECK상태) 첫번째 경우에 실행되는 것을 나타내는데 사용되고, run2는 두번째     경우 (PAM_UPDATE_AUTHTOK 상태)에 필터가 실행되는 것을 나타내는데 사용된다.

 

 

예제/추천하는 사용법:

글을 쓰고 있는 현재 이 모듈을 실제로 사용해 볼 만한 곳이 별로 없다. 재미삼아 다음행들을 login 환경파일에 추가해볼 수도 있다.

 

#

# 사용자가 로그인 한 후 대소문자를 바꾸도록 로그인을 설정한 예

#

login   session  required       pam_filter.so run1 /usr/sbin/pam_filter/upperLOWER

 

7) Anonymous access module

1] 개요

모듈 이름: pam_ftp

제공되는 관리 그룹: authentication

네트워크 인식: 사용자의 이메일 주소를 입력받음, 쉽게 속일 수 있음(XXX - 보완 작업이 필요함)

 

2] 모듈의 전반적인 설명

이 모듈의 목적은 쉽게 삽입가능한 익명 ftp모드 접속을 제공하는 것이다.

 

3] 인증관리 구성요소

인식하는 인자들: debug; users=XXX,YYY,...;ignore

 

설명:

이 모듈은 사용자이름과 비밀번호를 가로챈다. 만일 이름이 "ftp" "anonymous" 이면, 사용자의 비밀번호는 '@' 구분자로 분리되어 PAM_RUSER PAM_RHOST부분에 설정된다. 이들 pam-항목들은 각각에 해당하는 값으로 설정된다. 사용자이름은 "ftp"로 설정된다. 이경우에는 모듈이 성공으로 처리하고 다른경우에는 모듈이 입력된 비밀번호로 PAM_AUTHTOK 아이템을 설정하고 실패로 처리한다.

 

다음의 플래그에 의해 모듈의 동작을 고칠 수 있다.

debug - syslog(3)로 더 많은 정보를 기록한다.

users=XXX,YYY,... - "ftp" "anonymouse"대신 "XXX,YYY,..."과 같이 쉼표로 분리된 사용자목록에 의해 익명 로그인을 제공한다. 만약 사용자가 이 중 하나의 이름을 입력했다면 사용자명은 그 목록의 첫번째에 나오는 "XXX"로 설정된다.

ignore - 사용자의 이메일 주소(입력되었다면)를 무시한다.

 

예제/추천하는 사용법:

이 모듈 사용의 예제는 환경설정 파일 부분(4. Linux-PAM 설정 파일)에 있다. 이 모듈은 새로운/임시적인 익명로그인 계정을 제공하는데 사용될수 있다는 것을 조심하기 바란다.

 

8) The group access module

1] 개요

모듈 이름: pam_group

제공되는 관리 그룹: authentication

보안 등급: 사용자가 접근 가능한 파일시스템의 setgid 상태에 민감하다.

시스템 의존성: /etc/security/group.conf파일이 필요하다. libpwdb가 있거나 없거나 컴파일 가능하다.

네트워크 인식: 올바르게 설정된 PAM_TTY 항목을 통해서만 인식함

 

2] 모듈의 전반적인 설명

이 모듈은 주어진 서비스를 요구하고 있는 사용자명과 터미널에 기반한 그룹세팅을 제공한다. 이는 time of day의 기록을 갖는다.

 

3] 인증관리 구성요소

설명:

이 모듈은 사용자를 인증하지는 않는 대신 인증모듈의 보증서(credential) 설정상태에 따라 사용자에게 그룹 멤버쉽을 부여한다. 멤버쉽은 사용자가 요구하는 서비스에 기반한다. 그룹 멤버쉽은 /etc/security/group.conf 파일에 텍스트 형태로 나열되어 있다.

 

예제/추천하는 사용법:

이 모듈이 올바르게 동작하기 위해서는 올바르게 설정된 /etc/security/groups.conf 파일이 존재해야 한다. 이 파일의 포맷은 다음과 같다. 그룹 멤버쉽은 설정파일 행의 조합을 만족하는 서비스 응용프로그램에 기반하여 부여된다. 각 줄('#'으로 시작하는 주석문을 제외)은 다음과 같은 문법을 갖는다.

 

services             ;            ttys        ;            users    ;            times     ;            groups

처음 네개의 필드는 pam_time 설정파일(/etc/security/pam_time.conf)의 문법과 같다. 마지막 필드인 groups는 쉼표(혹은 빈칸)로 구분된 그룹 선택의 텍스트 이름 목록이다. 만일 서비스에 대한 사용자 응용프로그램이 처음 네개의 필드를 만족한다면 사용자는 목록에 나열된 그룹의 멤버쉽을 부여받는다. 앞에서 언급한바와 같이 이 모듈의 유용성은 사용자가 접근가능한 파일시스템에 달려있다. 그룹의 멤버쉽을 부여받은 시점에서 사용자는 제한된 그룹의 소유권을 가진 setgid 바이너리를 만들려고 시도할 수도 있다. 후에 사용자가 이 그룹에 대한 멤버쉽을 부여받지 못했을 때 그들은 미리 컴파일 된 바이너리를 이용해 그룹 멤버쉽을 복원하려고 할 수 있다. 사용자가 접근 가능한 파일 시스템이 매우 중요한 이유는 시스템이 nosuid로 마운트 되었을 때 사용자는 그런 바이너리 파일을 만들거나 생성할 수 없다는 것이다. 이 모듈이 보안 기능을 제공하길 바란다면 사용자가 쓰기권한을 갖는 모든 파일 시스템은 nosuid로 마운트 시켜야 한다.

 

pam_group 모듈은 /etc/group 파일과 함께 동작한다. 사용자가 이 모듈의 동작방식에 기반하여 어떤 그룹을 부여받으면 그들은 /etc/group 파일의 내용 (또는 동등한 내용의 다른 파일)에 덧붙여 추가로 그룹의 권한을 부여받는다.

9) Add issue file to user prompt

1] 개요

모듈 이름: pam_issue

제공되는 관리 그룹: Authentication(pam_sm_authenticate)

 

2] 모듈의 전반적인 설명

이 모듈은 사용자명을 입력대기하고 있을 때 issue 파일(기본적으로 /etc/issue 파일)을 앞에 출력한다.

 

3] 인증관리 구성요소

인식하는 인자들: issue=issue-file-name; noesc;

 

설명:

이 모듈은 사용자명을 입력대기하고 있을 때 issue파일을 앞에 출력한다. 또한 기본적으로 issue 파일에 있는 이스케이프 코드(escape code)를 파싱한다. 이 이스케이프 코드는 일반적인 getty의 것(\x 형태로 사용)과 비슷하다.

 

인식하는 탈출코드

d - 현재 시간

s - 운영체제 이름

l - 현재 tty 이름

m - 시스템 아키텍쳐(i386, sparc, powerpc, ...)

n - 시스템의 호스트명

o - 시스템의 도메인명

r - 운영체제 릴리즈 번호(. 2.2.12)

t - 현재 시간

u - 현재 로그인한 사용자 숫자

U - "user" "users"가 뒤에 붙는 것을 제외하고는 u와 같다.(. "1 user" or "10 users")

v - 운영체제의 버전/빌드 날짜(. "#3 Mon Aug 23 14:38:16 EDT 1999" on Linux)

 

이 모듈의 동작은 다음과 같은 플래그에 의해 변경될 수 있다.

issue - 기본 파일을 사용하지 않으면 이 파일을 출력한다.

noesc - 이스케이프 코드 파싱을 하지 않는다.

 

예제/추천하는 사용법:

login auth pam_issue.so issue=/etc/issue

 

10) The Kerberos 4 module

1] 개요

모듈 이름: pam_kbr4

제공되는 관리 그룹: authentication; password; session

암호학적 민감성: API를 사용함

시스템 의존성: 라이브러리 - libkrb, libdes, libcom_err, libkadm; 일련의 Kerberos include 파일들

네트워크 인식: 네트워크를 통해 접속한 Kerberos 키 배포 센터로부터 Kerberos 티켓을 주는 티켓을 받는다.

 

2] 모듈의 전반적인 설명

이 모듈은 사용자 비밀번호의 Kerberos 검증을 하고, Kerberos 티켓발급 서비스를 받기 위해서 Kerberos 티켓을 주는 티켓을 받고, 로그아웃할 때 사용자의 티켓을 파괴하고, Kerberos 비밀번호를 변경하는 인터페이스를 제공한다.

 

3] 세션관리 구성요소

설명:

모듈의 이 구성요소는 사용자의 KRBTKFILE 환경변수를 설정할 뿐 아니라 (현재로서는 이 변수를 export하는 방법은 없다) 로그아웃시에 (login에 의해 PAM_CRED_DELETE가 유지될 때까지)사용자의 티켓을 삭제한다.

 

예제/추천하는 사용법:

우리가 Linux-PAM 모듈 내부로부터 환경설정(environment)을 변경할 수 있을 때까지 모듈의 이 구성요소는 그리 유용하지 못할 것이다.

 

4] 패스워드관리 구성요소

인식하는 인자들: use_first_pass; try_first_pass

 

설명:

모듈의 이 구성요소는 먼저 사용자의 옛날 패스워드를 받아 패스워드 변경 서비스의 세션키를 받는데 사용하고 다음에 새 패스워드를 그 서비스에 보내서 사용자의 Kerberos 패스워드를 변경한다.

 

예제/추천하는 사용법:

이것은 real Kerberos v4 kadmind하고만 사용해야 한다. 특별한 부분이 만들어지지 않으면 AFS kaserver와 함께 사용할 수 없다. 더 많은 정보를 위해서는 모듈 작성자에게 문의하기 바란다.

 

5] 인증관리 구성요소

인식하는 인자들: use_first_pass: try_first_pass

 

설명:

모듈의 이 구성요소는 Kerberos 서버에 티켓발급 티켓을 요청하거나 선택적으로 로컬컴퓨터의 호스트키를 얻고 만약 로컬컴퓨터에 키 파일이 존재한다면 그것을 검사함으로써 사용자의 Kerberos 패스워드를 검사한다.

 

이것은 또한 사용자가 나중에 사용할 티켓파일을 쓰고, 로그아웃을 할 때 티켓파일을 삭제한다. (login에서 PAM_CRED_DELETE가 불릴때까진 삭제하지 않는다)

 

예제/추천하는 사용법:

이 모듈은 MIT v4 Kerberos 키를 사용하는 real Kerberos서버와 함께 사용할 수 있다. 모듈이나 시스템 Kerberos 라이브러리는 AFS 방식의 Kerberos키를 지원하도록 수정할 수 있다. 현재로서는 암호학적 제한을 피하기 위해 이것을 지원하지 않고 있다.

 

11) The last login module

1] 개요

모듈 이름: pam_lastlog

 

저자:

Andrew G. Morgan <morgan@kernel.org>

제공되는 관리 그룹: auth

암호학적 민감성: API를 사용함

시스템 의존성: /var/log/lastlog파일에 있는 내용을 사용한다.

 

2] 모듈의 전반적인 설명

 session 모듈은 /var/log/lastlog 파일을 관리한다. pam_open_session()함수를 통해 호출될 때 접속 열림 기록을 추가하고 pam_close_session()이 호출될 때 그것을 완성한다. 이 모듈은 사용자의 마지막 로그인에 관한 정보를 한줄로 표시할 수 있다. 만일 응용프로그램이 이미 이러한 작업을 수행중이라면 이 모듈을 사용할 필요는 없다.

 

3] 세션관리 구성요소

인식하는 인자들: debug; nodate; noterm; nohost; silent; never

 

설명:

PAM 라이브러리를 사용하는 어떤 프로그램을 사용하던지 사용자가 시스템에 로그인할 때 "Last login on ..." 메시지를 제공하는데 이 모듈을 사용할 수 있다. 추가로 모듈은 /var/log/lastlog 파일을 관리한다.

 

이 모듈의 동작은 다음과 같은 플래그에 의해 제어할 수 있다.

debug - syslog(3)에 더 많은 정보를 기록한다.

nodate - 시스템에 마지막 로그인한 정보를 출력할 때 날짜 정보를 생략한다.

noterm - 마지막으로 로그인 시도한 터미널 이름을 출력하는 것을 생략한다.

nohost - 마지막으로 로그인 시도한 호스트명을 나타내는 것을 생략한다.

silent - 사용자의 이전 로그인에 대한 어떠한 정보도 출력하지 않는다. 단지 /var/log/lastlog 파일에 기록하기만 한다.

never - 만일 /var/log/lastlog 파일에 사용자의 옛날 정보가 존재하지 않으면 사용자는 이전에 로그인 하지 않았다는 것을 나타내고 "welcome..."아라는 메시지를 출력한다.

 

예제/추천하는 사용법:

이 모듈은 시스템에 로그인 했을 때 새로운 메일이 있다는 것을 나타내는데 사용될 수 있다. 다음은 /etc/pam.d/XXX 파일의 예제이다.

 

#

# 우리가 언제 마지막으로 여기 있었는가?

#

session              optional pam_lastlog.so

 

 

몇몇 응용프로그램은 이 기능을 자체적으로 수행할 수도 있다. 그런 경우에 이 모듈은 필요하지 않다.

 

12) The resource limits module

1] 개요

모듈 이름: pam_limits

제공되는 관리 그룹: session

시스템 의존성: /etc/security/limits.conf 파일이 필요하고 커널이 리소스 제한을 지원해야한다. 또한 libpwdb 라이브러리를 사용한다.

 

2] 모듈의 전반적인 설명

이 모듈은, Linux-PAM open-session을 가로채는 것을 통해 user-session에서 얻을 수 있는 시스템 자원을 제한한다. 이 동작에 대해서는 아래에서 얘기할 설정파일을 통해 더 자세히 설명할 것이다.

 

3] 세션관리 구성요소

인식하는 인자들: debug; conf=/path/to/file.conf

 

설명:

/etc/security/limits.conf 설정파일의 내용에 따라서 사용자 세션에서 자원제한이 설정된다. uid=0인 사용자는 이러한 제한에 영향을 받지 않는다.

 

이 모듈의 동작은 다음의 매개변수들에 의해 제어할 수 있다.

debug - syslog(3)의 기록을 자세하게 한다.

conf=/path/to/file.conf - 디폴트 파일이 아닌 제한 설정 내용을 가지는 다른 파일의 위치를 나타낸다.

change_uid - 실제 uid를 제한사항이 설정된 사람으로 변경한다. 프로세스가 없는 사용자가 login shell을 포크하지 않는 것과 같은 문제가 있을 때 이 옵션을 사용하라. 이렇게 하면 누군가가 침입할 수도 있음을 주의하라.

 

예제/추천하는 사용법:

이 모듈을 사용하기 위해서 시스템 관리자는 먼저 root만 읽기 가능한 파일을 만들어야 한다. (기본적으로 /etc/security/limits.conf이다) 이 파일은 수퍼유저가 제한하려고 하는 사용자와 그룹의 자원제한 사항을 갖고 있다. uid=0인 계정은 어떠한 제한도 할 수 없다.

 

설정파일의 각 줄은 다음과 같은 형식으로 사용자별 제한을 나타낸다.

 

<domain>  <type>  <item>  <value>

위에 나열된 필드들은 다음과 같은 내용을 갖는다.

<domain>

사용자명

@group 형태의 그룹명

기본엔트리를 위한 와일드카드 *

 

<type>은 세가지 값을 가질 수 있다.

hard - hard 리소스 제한을 실시한다. 이 제한은 수퍼유저에 의해 설정되고 리눅스 커널에 의해 실시된다. 사용자는 이런 값을 가진 시스템 자원에 대한 요구량을 올릴 수 없다.

soft - soft 리소스 제한을 실시한다. 이러한 제한은 존재하는 hard제한 범위내에서 사용자가 올리거나 내릴 수 있는 제한이다. 이 식별자로 표시된 값은 일반적인 시스템 사용법의 기본값으로 간주될 수 있다.

- soft, hard 리소스 제한을 동시에 걸 때 사용한다.

 

<item> 다음 값들 중 하나가 될 수 있다.

core - core파일 크기를 제한한다.(KB)

data - 최대 데이타 크기(KB)

fsize - 최대 파일크기(KB)

memlock - 최대 locked-in-memory 주소공간(KB)

nofile - 최대 열린 파일 개수

rss - 최대 resident set 크기(KB)

stack - 최대 스택 크기(KB)

cpu - 최대 CPU time(MIN)

nproc - 최대 프로새스 개수

as - 주소공간 제한

maxlogins - 이 사용자를 위한 로그인 최대 개수

priority - 사용자 프로세스가 실행되는 우선순위

 

만일 "-" 타입을 사용하면서 item value값을 주지 않으면 모듈은 user/group 멤버 등에 해당하는 어떤 제한도 시행하지 않음을 주의하라. 사용자 인증이 적용되는 첫번째 엔트리는 설정파일의 다른 모든 제한 사항의 엔트리에 우선한다는 것을 주의하라. 그런 경우에 pam_limits는 항상 PAM_SUCCESS를 리턴한다.

 

일반적으로 사용자별 제한은 그룹의 제한에 우선한다. 그래서 만일 admin 그룹에 아무 제한을 두지 않고, 이 그룹의 멤버중 한명에 대한 제한을 등록했다면 그 사용자는 이 줄에 의해 제한을 받을 것이다.

 

또한 모든 제한설정 사항은 login 단위로 설정된다는 것을 주의하라. 이것들은 글로벌한 것도 아니고 영원한 것도 아니다. 단지 세션이 유지되는 동안만 존재한다.

 

제한 설정파일에서 '#' 문자로 시작하는 문장은 주석문이다. 그 줄의 나머지 부분은 모두 무시된다.

 

pam_limits 모듈은 설정파일에 문제가 생겼을 때 syslog(3)을 통해 설정문제를 보고한다.

 

다음은 설정파일의 예제이다.

 

# EXAMPLE /etc/security/limits.conf file:

# =======================================

# <domain> <type> <item> <value>

*               soft    core            0

*               hard    rss             10000

@student        hard    nproc           20

@faculty        soft    nproc           20

@faculty        hard    nproc           50

ftp             hard    nproc           0

@student        -       maxlogins       4

 

주의, 같은 자원(@faculty를 보라) soft hard 제한을 사용하는 것은 주어진 서비스 세션에서 사용자가 얻을 수 있는 자원의 기본값과 최대 레벨의 값을 설정한다.

 

리소스 제한을 필요로 하는 서비스(예를들어 login) /etc/pam.conf의 해당 서비스의 설정 마지막줄에 다음과 같은 줄을 추가하면 된다.(보통 pam_unix session줄 다음에)

 

#

# pam_limits를 통해서 로그인 세션에 자원 제한을 설정

#

login   session    required     pam_limits.so

 

 

13) The list-file module

1] 개요

모듈 이름: pam_listfile

제공되는 관리 그룹: authentication

 

2] 모듈의 전반적인 설명

list-file 모듈은 임의의 파일에 대해 서비스를 허가하거나 거부하는 방법을 제공한다.

 

3] 인증관리 구성요소

인식하는 인자들: onerr=succeed|fail; sense=allow|deny; file=filename;

item=user|tty|rhost|ruser|group|shell apply=user|@group

 

설명:

모듈은 다음과 같이 지정된 타입에 해당하는 항목의 값을 얻는다. -- user - 사용자명; PAM_USER tty - 요청된 터미널의 이름을 나타낸다; PAM_TTY rhost - 요청이 들어온 원격 호스트의 이름(가능하면)을 나타낸다; PAM_RHOST ruser - 요청이 들어온 원격 사용자의 이름을 나타낸다; PAM_RUSER -- 또한 file=filename에 해당하는 파일을 읽어서 나타난 항목의 인스턴스를 찾는다. filename은 나열된 아이템당 한 줄을 포함한다. 만일 아이템이 발견될때 sense=allow이면 PAM_SUCCESS가 리턴되고 권한요구는 성공하고, sense=deny이면 PAM_AUTH_ERR가 리턴되고 권한요구는 실패한다.

 

만일 오류가 발생하고(예를들어 filename이 존재하지 않는다거나 잘못된 인자를 만났을때) onerr=succeed이면 PAM_SUCCESS를 리턴하고 그렇지 않을때 즉, onerr=fail이면 PAM_AUTH_ERR 또는 PAM_SERVICE_ERR(적절하게)이 리턴된다.

 

추가적인 매개변수로 'apply='는 특정 사용자(apply=사용자명) 또는 주어진 그룹(apply=@그룹명)으로 적용을 제한하는데 사용할 수 있다. 이는 tty, rhost, shell 아이템과 함께 사용될 때만 의미가 있는 제한이다.

 

마지막것을 제외하면 모든 매개변수는 필수적이다. 이 모듈이 기본적으로 무엇을 해 줄 것이라고 기대하지 마라. 이 모듈의 기본 동작은 언제나 변할 수 있다.

 

예제/추천하는 사용법:

전통적인 'ftpusers' 인증은 /etc/pam.conf에 아래의 예를 사용하여 가능하다:

#

# /etc/ftpusers 파일에 존재하는 사용자는 ftp 접속을 거부

#

ftp auth     required   pam_listfile.so onerr=succeed item=user sense=deny file=/etc/ftpusers

/etc/ftpusers파일에 있는 사용자는 (직관과는 반대로) ftp서비스를 사용할 수 없음을 유의하라.

 

특정 사용자만 login을 하게하려면 pam.conf를 아래와 같이 하라.

#

# /etc/loginusers 파일에 있는 사용자만 로그인을 허용

#

login   auth     required   pam_listfile.so onerr=fail item=user sense=allow file=/etc/loginusers

이 예제가 제대로 동작하기 위해서는, login서비스를 허용하려는 모든 사용자는 /etc/loginusers에 열거되어 있어야 한다. 일부러 root login하지 않게 하는게 아니라면, root가 로그인할 수 있는 방법을 열어 놓았는지 확인해라. /etc/loginusers root를 넣어 놓던지, root su를 할 수 있는 사용자를 넣어 놓던지 해서 root login할 방법을 열어 두어라.

 

14) The Mail module

1] 개요

모듈 이름: pam_mail

제공되는 관리 그룹: authentication (credential) Session(open)

시스템 의존성: 기본 mail 디렉토리 /var/spool/mail/

2] 모듈의 전반적인 설명

이 모듈은 사용자의 메일 디렉토리를 보고 메일이 들어 있는지 알려준다.

 

3] 세션관리 구성요소

인식하는 인자들:

debug; dir=directory-name; nopen; close; noenv; empty; hash=hashcount; standard; quiet;

 

설명:

이 모듈은 사용자에게 "you have new mail" 서비스를 제공한다. 이는 보증서를 가로채는 어떤 응용프로그램에도 끼워 넣을 수 있다. 이는 사용자의 메일 폴더에 어떤 새로운 메일이 있음을 나타내는 간단한 메시지를 보낸다. 이 모듈은 Linux-PAM 환경변수인 MAIL을 사용자의 메일 디렉토리로 설정한다.

 

이 모듈의 동작은 다음 플래그들에 의해 변경할 수 있다.

debug - syslog(3)로 더 많은 정보를 기록한다.

dir=pathname - 기본값 대신 지정된 pathname에서 사용자의 메일을 찾는다. 메일의 기본 위치는 /var/spool/mail이다. 주의할 점은 만일 주어진 pathname '~'로 시작한다면 디렉토리는 사용자 홈 디렉토리에 있는 파일을 나타내는 것으로 해석될 것이라는 것이다.

nopen - 모듈이 사용자의 보증서를 얻었을 때 어떤 메일에 대한 정보도 출력하지 않도록 한다. 이것은 MAIL환경변수의 값을 얻지만 정보를 표시하지 않을때 유용하다.

close - 사용자의 보증서가 취소되었을 때 모듈이 사용자에게 온 메일이 있는지 알려준다.

noenv - MAIL 환경변수를 설정하지 않는다.

empty - 만일 사용자의 메일디렉토리가 비었다면 사용자에게 그 사실을 알린다.

hash=hashcount - 메일디렉토리 해쉬 깊이. 예를들어 hashcount 2라는 것은 메일파일은 /var/spool/mail/u/s/user가 되도록 만든다.

standard - 예전 방식의 "You have..." 형태의 메시지를 보여준다. 이것은 사용되는 메일 스풀을 보여주지 않는다. 또한 이것은 'empty'를 포함한다.

quiet - 새로운 메일이 있을 때만 알려준다.

 

예제/추천하는 사용법:

이 모듈은 사용자가 시스템에 로그인 했을 때 새로운 메일이 있음을 나타내는 데 사용될 수 있다. 여기 /etc/pam.conf 파일의 예제가 있다.

#

# 새 메일이 왔는가?

#

login      session              optional pam_mail.so

 

주의할 점은, 만일 메일 스풀파일(/var/spool/mail/$USER 또는 dir=parameter로서 주어지는 경로가 될 수 있다)이 디렉토리라면 pam_mail은 그것이 Qmail Maildir 형태라고 생각한다는 것이다. 몇몇 응용프로그램은 이 기능을 자체적으로 수행할 수도 있다. 그런경우에 이 모듈은 필요하지 않다는 점을 주의하라.

 

4] 인증관리 구성요소

인증관리 부분은 모든 동작이 pam_setcred() 상태에서 이루어진다는 것을 제외하면 session 부분과 같게 동작한다.

 

15) 첫 로그인시 홈 디렉토리 만들기(Create home directories on initial login)

1] 개요

모듈 이름: pam_mkhomedir

제공되는 관리 그룹: Session

 

2] 모듈의 전반적인 설명

인증된 사용자를 로그인시키는 중에 홈 디렉토리를 생성한다.

 

3] 세션관리 구성요소

인식하는 인자들:

debug; skel=skeleton=dir; umask=octal-umask;

 

설명:

이 모듈은 사용자가 중앙 데이타베이스(NIS, NIS+, LDAP)에 의해서 관리되고 여러 시스템을 통해 접근하는 분산시스템에서 유용하게 사용된다. 이는 사용자가 처음으로 성공적으로 인증된 로그인을 했을 때 사용자의 기본 홈 디렉토리를 생성함으로써 관리자가 각각의 시스템에 직접 홈디렉토리를 생성하는 수고를 덜어준다. 기본 파일을 복사하기 위해 skeleton 디렉토리(보통 /etc/skel/)가 사용되고 또한 생성시에 umask값도 설정한다.

 

이 모듈의 동작은 다음중 하나의 플래그들에 의해 제어된다.

skel - 새로운 홈 디렉토리에 복사할 기본파일이 있는 skeleton 디렉토리

umask - 쉘의 umask 명령어에게 전달할 8진수의 숫자

 

예제/추천하는 사용법:

session              required pam_mkhomedir.so skel=/etc/skel/ umask=0022

 

 

16) 오늘의 메시지 출력(Output the motd file)

1] 개요

모듈 이름: pam_motd

제공되는 관리 그룹: Session(open)

 

2] 모듈의 전반적인 설명

이 모듈은 성공적인 로그인시에 motd 파일(기본적으로 /etc/motd파일)을 출력한다.

 

3] 세션관리 구성요소

인식하는 인자들:

debug; motd=motd-file-name;

 

설명:

이 모듈은 여러분이 성공적인 로그인 후에 임의의 motd(message of the day)를 출력할 수 있게 한다. 기본적으로 /etc/motd파일이 사용되고 어떤 파일로도 설정이 가능하다.

 

이 모듈의 동작은 다음 플래그들에 의해 제어된다.

motd - 기본파일을 사용하지 않을 때 출력할 파일

 

예제/추천하는 사용법:

login      session              pam_motd.so motd=/etc/motd

 

17) The no-login module

1). 개요

모듈 이름: pam_nologin

제공되는 관리 그룹: authentication

 

2] 모듈의 전반적인 설명

표준 UNIX nologin 인증을 제공한다.

 

3] 인증관리 구성요소

설명:

표준 UNIX nologin인증을 제공한다. /etc/nologin파일이 존재하면, root만 로그인할 수 있고; 다른 사용자는 에러메시지와 함께 거부된다. 모든 사용자들(root또는 일반 사용자) /etc/nologin의 내용에 들어갈 수 있다.

 

/etc/nologin파일이 없다면, 모듈은 조용히 성공을 리턴한다.

 

예제/추천하는 사용법:

이 모듈이 효과적이려면, 모든 login방법들이 이것을 사용하게 해야한다. 표준 UNIX nologin동작을 제대로 하려면 sufficient모듈 앞에 required로 이 모듈을 설정해야 한다.

 

18) 무조건 신뢰 모듈(The promiscuous module)

1] 개요

모듈 이름: pam_permit

유지보수: Linux-PAM 유지보수자

제공되는 관리 그룹: account; authentication; password; session

보안 등급: 매우 낮음. 사용시 주의요함.

 

2] 설명

이 모듈은 보안상으로 매우 위험하므로 대단히 주의해서 사용해야 한다. 이것이 행하는 일은 언제나 접근을 허용하는 것 뿐이기 때문이다. 그 외의 다른 일은 전혀 하지 않는다.

 

3] 계정관리 + 인증관리 + 패스워드관리 + 세션관리 구성요소

설명:

어떤 관리그룹에 속하건간에 이 모듈이 하는 동작은 작업이 성공적이었음을 알리는 PAM_SUCCESS를 돌려주는 일 뿐이다.

 

인증의 경우에는 사용자의 이름을 얻는다. 만약 이 이름이 없다면 많은 프로그램들이 작업에 혼란을 겪게 되기 때문이다.

 

예제/추천하는 사용법:

이 모듈은 사용하는 것은 거의 바람직하지 않다. 그렇지만 이 모듈의 사용이 적절한 경우도 있다. 예를들어 만약 시스템 관리자가 계정관리를 꺼버리지만 동시에 로그인을 허용하는 경우 다음의 설정파일 내용을 이용할 수도 있다.

#

# 사용자 로그인을 계속허용하지만 계정관리를 꺼버리기 위해서

# 다른 로그인 등록에 이 줄을 추가하라.

#

login   account  required       pam_permit.so

 

 

19) The Password-Database module

1] 개요

모듈 이름: pam_pwdb

제공되는 관리 그룹: account; authentication; password; session

시스템 의존성: 올바르게 설정된 libpwdb 필요함

 

2] 모듈의 전반적인 설명

이 모듈은 pam_unix_.. 모듈의 대체판이다.

이 모듈은 http://linux.kernel.org/morgan/libpwdb/index.html에 있는 Password Database library의 일반적인 인터페이스를 따른다.

 

3]. 계정관리 구성요소

 

인식하는 인자들:

debug

 

설명:

debug 옵션을 주면 이 모듈의 추적기능을 맡은 syslog(3)에 더 많은 정보를 기록한다. (이 모듈에서 지원되는 다른 옵션들은 에러 메시지를 내보내지 않고 조용히 무시된다. 그렇지만 그외의 옵션들을 입력한 경우 syslog(3)를 통해서 에러로 기록된다.)

 

이 모듈은 다음의 pwdb_element들에 기반하는데 그 pwdb_element들은 다음과 같다. expire; last_change; max_change; defer_change; warn_change. 이 모듈은 사용자의 계정과 패스워드의 상태를 확인한다. 패스워드의 상태를 확인할 때에는 사용자의 패스워드를 바꾸도록 권고하거나 PAM_AUTHTOKEN_REQD를 돌려줌으로써 새 패스워드를 입력할 때까지 서비스 실행을 늦추게 할 수 있다. 앞에서 언급한 pwdb_element들에 대한 접근은 Password Database Library Guide에 기술되어 있다. 만약 사용자의 기록이 이 모듈들중 하나 이상을 포함하지 않는다면 해당하는 shadow에 대한 검사는 하지 않는다.

 

예제:

계정관리 모드에서는 다음과 같이 이 모듈을 사용할 수 있다.

 

#

# 사용자의 계정과 패스워드가 아직 유효한지 확인

#

login   account  required       pam_pwdb.so

4] 인증관리 구성요소

인식하는 인자들:

debug; use_first_pass; try_first_pass; nullok; nodelay; likeauth

 

설명:

debug 옵션을 주면 이 모듈의 추적기능을 맡은 syslog(3)에 더 많은 정보를 기록한다.

이 모듈은 만약 사용자의 패스워드가 비어있다면 사용자가 서비스를 사용하는 것을 거부하는 것을 기본으로 하도록 설정되어 있다. 만약 nullok옵션을 사용한다면 이 기본동작을 무시하고 패스워드가 비어있어도 사용자가 서비스를 사용하는 것이 가능하다.

 

try_first_pass옵션을 사용한 경우 우선적으로 auth-module에 정의되어 있는 다른 모듈에서 사용된 패스워드를 먼저 대입해보고 실패한 경우 사용자에게 패스워드를 입력하도록 요구한다. 만약 use_first_pass를 옵션으로 사용한경우에는 이렇게 기억된 패스워드만을 사용하도록 설정되므로 사용자에게 패스워드를 입력하도록 요구하지 않는다. 만약 이 경우에 패스워드가 틀리거나 사용할 수 있는 기억된 패스워드가 아무것도 없다면 인증에 실패하게 된다.

 

nodelay를 옵션으로 사용한 경우에 만약 인증이 전체적으로 실패한 경우 인증모듈이 기다리지 않고 바로 처리하도록 하는 경우에 쓰일 수 있다. 기본적인 모듈의 동작은 실패한 경우 초 단위로 연기를 요청하도록 되어 있다.

 

이 모듈의 다른 기능에서 지원되는 남은 인자들은 조용히 무시된다. 그외의 인자들은 syslog(3)에서 에러로 기록된다.

 

pwdb_chkpwd프로그램은 사용자의 패스워드가 읽기를 막아놓은 database에 저장한 경우 사용자의 패스워드를 검사하기 위해서 제공된다. 이 프로그램은 매우 간단하며 이 프로그램을 실행한 사용자의 패스워드만을 검사한다. 이 프로그램은 이 모듈의 인증 부분만을 호출하며 사용자를 위해서 투명하게 실행된다. 이런 방식을 통해서 xclock같은 응용프로그램들이 setuid-root를 걸지 않고도 실행될 수 있다.

 

likeauth옵션을 사용하면 신임하는 모듈로 호출할때나 인증모듈로 호출할때나 같은 값을 돌려주도록 만든다. 이렇게 하도록 하면 libpam이 당신의 만든 설정파일의 설정을 인증관리 구성요소가 정상적인 경로를 따라 수행가능하다.

 

예제/추천하는 사용법:

이 모듈의 적절한 작동을 위해서는 /etc/pwdb.conf파일의 설정이 올바르게 되어 있어야 한다. 그 파일에 지정된 사용자 database는 인증된 사용자의 기록을 가지고 있다.

 

5] 패스워드관리 구성요소

인식하는 인자들:

debug; nullok; not_set_pass; use_authtok; try_first_pass; use_first_pass; md5; bigcrypt; shadow; radius; unix

 

설명:

pam_pwdb의 이 모듈은 사용자의 패스워드를 갱신하는 역할을 한다. libpwdb의 유연성 덕분에 이 모듈은 사용자의 패스워드를 다른 database로 옮길 수 있게 해 준다. 이것은 아마도 동적으로 사용자의 database접근을 안전하게 해주는 역할을 할 것이다. (현재 이 기능은 매우 불안정하다!) - 이것이 shadow, radius, 그리고 unix argument들의 목적이다.

 

보통의 unix database의 경우(암호화된 사용자 패스워드를 저장) md5옵션을 사용하는데 이것은 전통적인 crypt(3)대신 MD5 function을 사용해서 암호화한다. 이 외의 선택사항으로 DEC (Digital Equipment Cooperation) `C2' extension을 사용해서 8자이상을 암호화할 수 있는 bigcrypt옵션을 줄 수 있다.

 

nullok 모듈을 사용해서 사용자의 패스워드를 빈 것으로 만들 수 있다. 만약 nullok옵션을 사용하지 않은 경우엔 빈 패스워드는 계정을 잠그는 것과 같이 처리된다.

 

use_first_pass 옵션은 앞에서 사용된 패스워드 모듈에서 쓴 패스워드로 고정시킬 때 사용된다. try_first_pass옵션은 앞에서 사용되었을지도 모르는 패스워드를 다시 공유해서 사용하도록 지정해서 사용자가 패스워드를 다시 입력할 필요가 없도록 할 경우 사용할 수 있다. 만약 이전에 사용된 패스워드가 올바르지 않다면 사용자가 올바른 패스워드를 입력하도록 허용한다. use_authtok옵션은 앞서 사용된 패스워드 모듈에서 사용했던 패스워드를 새 패스워드로 지정한다. (앞서 설명된 Cracklib모듈에서 예제로 사용되었다.)

 

not_set_pass옵션은 현재 모듈에게 앞서 사용된 모듈이나 뒤에 사용될 모듈에서 참고로 할 옛 패스워드나 새 패스워드를 참고하거나 저장하지 않을 것임을 지정한다.

 

debug옵션은 이 모듈의 동작을 syslog(3)에게 더 많은 정보를 알려준다. 다른 옵션들은 syslog(3)에 의해서 에러로 기록될 수 있다.

 

예제:

이 모듈의 패스워드 점검 모듈인 pam_cracklib과의 적층예제는 앞선 모듈에 대한 설명에서 이미 다루어졌다.

 

6] 세션관리 구성요소

설명:

이 모듈 구성요소에서 인식하는 옵션은 아무것도 없다. 이 구성요소는 단지 사용자이름과 서비스의 종류를 syslog(3)를 통해서 기록할 뿐이다. 사용자의 세션의 시작과 끝에 대한 내용은 로그에 기록된다.

 

예제/추천하는 사용법:

세션 모듈에 대한 사용은 매우 직관적이다:

#

# pwdb - unix 와 비슷한 세션 시작과 종료

#

login   session  required       pam_pwdb.so

 

20) The RADIUS session module

1) 개요

모듈 이름: pam_radius

제공되는 관리 그룹: session

암호학적 민감성: 이 모듈은 암호를 다루지 않음.

네트워크 인식: 인식함. 네트워크 모듈임.(응용프로그램에 무관함)

 

2] 모듈의 전반적인 설명

이 모듈은 RADIUS server로 인증된 사용자들에게 세션 서비스를 제공할 목적으로 제작되었다. 현재로는 계정 서버로 RADIUS서버를 사용하는 것만 지원된다.

 

3] 세션관리 구성요소

인식하는 인자들:

debug - syslog(3)에 상세한 로그를 기록함.

 

설명:

이 모듈은 RADIUS server로 인증된 사용자들에게 세션 서비스를 제공할 목적으로 제작되었다. 현재로는 계정 서버로 RADIUS서버를 사용하는 것만 지원된다.

 

(PAM 프로젝트에서 이 모듈을 사용해서 RADIUS서버에 반응해 자동으로 pppd를 시작해서 사용자를 위한 PPP접속을 연다든가 다른 호스트로의 telnet접속을 한다던가 RADIUS서버에서의 인자에 따라 전화를 되걸어주는 것을 실제로 동작하게 하려면 먼저 확실하게 매듭지어야 하는 부분들이 있다. 대부분의 것들은 radius login 응용프로그램에서 처리하는 것이 보다 적합해 보인다. 이런 식으로 동작하는 Real Soon(tm) 로그인 패치를 만들기를 기대한다.)

 

세션을 시작할 때 ``Accounting-Start'' 메시지를 모듈에서 RADIUS 서버로 보내는데 이 메시지는 사용자 database에 로그기록을 하던 갱신을 하던 어떤 식으로든 작용한다. 세션을 닫을 때 ``Accounting-Stop'' 메시지가 RADIUS서버로 보내진다.

 

이 모듈은 동작하기 위해서 요구하는 선결조건이 없다. 누구든 RADIUS서버를 그냥 재미삼아 설치하고 계정관리 서버를 중앙에서 운영하면서 wtmp/last/sac같은 것들은 그냥 잊고 지낼 수 있다.

 

예제/추천하는 사용법:

이 모듈이 필요한 서비스(예를들어 login)를 위해서 /etc/pam.conf파일에서 그 서비스의 마지막 줄에(보통은 pam_unix session 줄 다음이다) 다음의 예를 추가하라.

 

login   session  required       pam_radius.so

 

이 모듈을 쓰는 서비스각각에 대해서 'login'대신 대체하라.

 

이 모듈은 libpwdb 0.54preB또는 그 이후에서 제공되는 API를 광범위하게 사용하고 있다. 기본적으로 이 모듈은 /etc/raddb/server파일에서 radius 서버에 대한 설정(hostname, secret)을 읽어들인다. 이것은 libpwdb에서 기본값으로 컴파일되어 있으며 현재로서는 libpwdb를 다시 컴파일하지 않고는 바꿀 수 있는 방법이 없다. 현재 libpwdb에서 runtime에 설정을 바꿀수 있는 radius지원하기 위해서 작업중이다.

 

libpwdb RADIUS dictionary도 필요로 함을 또한 기억하기 바란다. (/etc/raddb/dictionary파일이다)

 

21) The rhosts module

1] 개요

모듈 이름: pam_rhosts_auth

제공되는 관리 그룹: authentication

네트워크 인식: 표준 inet_addr(), gethostbyname() 함수 호출

 

2] 모듈의 전반적인 설명

이 모듈은 rlogin이나 rsh같은 프로그램에서 전통적으로 쓰던 방식으로 서비스의 네트워크 인증을 한다.

 

3] 인증관리 구성요소

인식하는 인자들:

no_hosts_equiv; no_rhosts; debug; no_warn; privategroup; promiscuous; suppress

 

설명:

이 모듈의 인증체계는 /etc/host.equiv (또는 #include <netdb.h>에 있는 _PATH_HEQUIV) ~/.rhosts두 파일에 있는 내용에 기반한다.

 

우선 앞의 파일에 나열되어 있는 호스트들은 localhost처럼 취급된다. 그리고 사용자가 가지고 있는 .rhosts파일은 "원격 호스트 원격 사용자"짝을 현재 호스트의 사용자 계정과 대응시키는데 쓰인다. 만약 사용자의 호스트가 /etc/host.equiv파일에 등록되어 있고 그들의 계정이 원격호스트와 localhost에서 일치하는 경우에는 접근이 허용된다. 또한 그들의 원격계정이 개인적인 설정파일에 등록되어 있는 경우에도 접근이 허용된다.

 

사용자의 개인적인 설정파일에는 몇가지 속성의 제한이 따른다. 먼저 파일은 POSIX.1 S_ISREG(x)에서 정의된 정규파일이어야 한다. 그리고 설정파일은 superuser나 사용자가 소유한 파일이어야 하며 소유자외에는 아무도 쓰기 권한을 가지면 안된다.

 

이 모듈은 원격 호스트(PAM_RHOST에서 내부적으로 지정한 호스트)에서 접속한 사용자(PAM_RUSER에서 내부적으로 지정한 사용자)를 인증하는 역할을 한다. 따라서 이 인증 모듈과 호환성을 가지기 위해서는 응용프로그램 또한 pam_authenticate()를 호출하기 전에 이 항목들을 먼저 확인해야 한다. 이 모듈은 그런 정보를 확인하기 위해서 독자적으로 네트워크 접속을 확인할 수 있는 능력이 없다.

 

root로 접속하는 경우 hosts_equiv_rootok옵션이 사용되지 않으면 /etc/host.equiv파일은 무시된다. 대신 superuser는 올바르게 설정된 개인적인 설정파일이 있어야 한다.

 

모듈의 동작은 다음의 플래그에 의해서 제어할 수 있다.

debug - syslog(3)에 더 많은 정보를 기록한다. (XXX - 실제로 이 모듈은 현재 전혀 로그를 남기지 않는다. 이것을 고치기 위한 자원자를 구하는 중이다!)

no_warn - 사용자에게 실패등에 대해서 에러메시지를 보내지 않는다. (XXX - 이 모듈은 현재 아무런 경고도 출력하지 않는다. 역시 자원자를 구한다!)

no_hosts_equiv - /etc/hosts.equiv 파일의 내용을 무시한다.

hosts_equiv_rootok - superuser에 대해서도 /etc/hosts.equiv 파일을 참고한다. 이 옵션이 없는 경우 superuser에 대해서는 /etc/hosts.equiv를 참고하지 않는다. 만약 no_host_equiv옵션이 사용된 경우 host_equiv_rootok옵션은 무시된다.

no_rhosts - 모든 사용자의 ~/.rhosts설정파일의 내용을 무시한다.

privategroup - 정상적인 경우 ~/.rhosts 파일은 소유자외에는 아무도 쓰기 권한을 가져서는 안된다. 이 옵션은 인증되는 사용자의 이름과 그룹 소유권자의 이름이 같은 경우 그룹이 쓰기 권한을 가진 경우에도 접근을 허용한다. 이 옵션으로 인해 발생할지 모르는 보안 문제를 줄이기 위해서 이 모듈은 사용자가 그 그룹의 유일한 구성원인지도 검사한다.

 

promiscuous - 호스트 등록에서 `+' 로 된 경우 모든 호스트에서의 접근이 허용된다. 이 옵션이 없다면 '+'로 쓴 등록은 무시된다. 후자의 경우 debug옵션이 켜져있으면 syslog에 경고메시지를 남기게 된다.

suppress - 만약 인증에 실패했을 경우에도 syslog(3)에 경고메시지를 남기지 않는다. 이 옵션은 모듈이 충분한 제어 flag로 동작하는 상황에서 의미없는 에러로 가득찬 로그를 만들지 않기 위해서 사용된다.

 

예제/추천하는 사용법:

신뢰하는 원격 컴퓨터에서 사용자의 접속을 허용하기 위해서는 /etc/pam.conf파일에서 사용자에서 암호를 입력하기를 요구하기 전에 다음의 줄들을 추가해야 한다.

#

# 위에 나열된 호스트의 사용자는 패스워드를 요구하지 않는다.

#

login  auth  sufficient  pam_rhosts_auth.so no_rhosts

 

이 예제에서 시스템 관리자는 모든 사용자의 개인 rhosts 설정파일을 무시하도록 설정했음을 주목하라. 그리고 위의 예에서 sufficient required로 바꿈으로써 /etc/host.equiv파일에 등록된 서버들로부터만 접속할 수 있게 되어 있음을 주의해서 보기 바란다.

 

22) The root access module

1] 개요

모듈 이름: pam_rootok

유지보수: Linux-PAM 유지보수자

제공되는 관리 그룹: authentication

 

2] 모듈의 전반적인 설명

이 모듈은 superuser가 암호의 입력없이 서비스에 대한 접근을 하도록 허용할 때 사용하도록 만들어졌다.

 

3] 인증관리 부분

인식하는 인자들: debug

 

설명:

이 모듈은 사용자의 uid 0인 경우 인증에 성공한 것으로 처리한다. ustuid-root로 처리된 프로그램들은 사용자의 uid를 유지하고 있지만 euid에 있는 사용자의 권한을 가진채로 실행된다. 실제로 사용자에 대한 권한 검사가 이루어지는 것은 이 euid이다.

 

예제/추천하는 사용법:

su 프로그램의 경우 전통적으로 superuser가 일반 사용자의 암호를 입력하지 않고도 일반 사용자로 작업을 수행할 수 있도록 하는 기능을 사용해 왔다. Linux-PAM에서 이 기능을 쓰기 위해서는 다음의 두 줄이 설정파일에 포함되어야 한다.

#

# su 인증. Root 는 기본적으로 접근 허용

#

su      auth     sufficient     pam_rootok.so

su      auth     required       pam_unix_auth.so

 

주의사항) superuser에 의해서 수행되는 프로그램들이나 시스템 부팅시에 시작되는 프로그램들에는 사용자 인증에 이 모듈을 사용하면 안된다.

 

23) The securetty module

1] 개요

모듈 이름: pam_securetty

제공되는 관리 그룹: authentication

시스템 의존성: /etc/securetty 파일

네트워크 인식: 정상적으로 동작하기 위해서는 응용프로그램에서 PAM_TTY항목을 정확히 기록해야 함.

 

2] 모듈의 전반적인 설명

표준적인 UNIX securetty 검사를 제공한다.

 

3] 인증관리 구성요소

설명:

표준의 UNIX securetty검사를 해서 /etc/securetty파일에 기록된 내용과 PAM_TTY항목의 내용과 일치하는 경우에만 root계정에 대한 인증이 성공하게 된다. 그 외의 다른 사용자에 대해서는 항상 인증이 성공한 것으로 처리한다.

 

예제/추천하는 사용법:

다른 suffient 인증 방법보다 앞서 required 인증 방법으로 등록하는 것이 표준 사용방식이다.

 

24) The login counter(tallying) module

1] 개요

모듈 이름: pam_tally

제공되는 관리 그룹: auth; account

시스템 의존성: faillog 파일(/var/log/faillog가 기본 위치다)이 필요

 

2] 모듈의 전반적인 설명

이 모듈은 총 접근 시도회수를 관리하며 로그인 성공시에는 접근 시도 회수를 0으로 만들 수 있고 너무 많은 실패한 시도횟수에 도달하면 접근을 차단할 수 있다.

 

pam_tally pam_tally.so pam_tally의 두 개로 나뉘어 제공된다. 전자는 PAM 모듈이고 후자는 단독실행형(stand-alone) 프로그램이다. pam_tally (선택적인) 프로그램으로 카운터 파일을 조회할 수도 있고 관리할 수도 있다. 이 프로그램은 사용자의 카운터를 보여주고 개인별 카운트 회수를 수정하거나 모든 카운트 회수를 지우는 것도 가능하다. 이 카운트를 인위적으로 높게 설정하면 사용자의 암호를 고치지 않고도 사용자 로그인을 막을 수 있다. 예를들어 cron job으로 매일밤 자정에 모든 카운트 회수를 지워버리는 것도 유용한 설정일 수도 있다.

 

카운트 파일은 uid로 인덱스된 바이너리 형식의 배열이다. 만약 제공되는 프로그램을 사용하지 않을 생각이라면 od프로그램으로도 이 파일을 이해할 수 있을 것이다.

 

주의사항) 현재 이 모듈에는 몇가지 문제점이 남아있다. pam_tally모듈은 getpw*()에 매우 의존적이다. - 사용자의 계정에 대한 database는 훨씬 더 다양할 것이다. '현재 로그인에 대한 카운트 유지'비트는 #ifdef로 처리되어 현재는 기본적으로 지원하지 않는다. 따라서 현재는 인증에 성공하는 것만이 카운터 숫자를 초기화하는 유일한 방법이다.

 

3] 두 구성요소에서 모두 사용되는 일반적인 옵션

onerr=(succeed|fail): 만약 파일을 열 수 없다든가 하는 이상한 일이 생긴다면 모듈이 어떻게 반응할 것인가?

file=/where/to/keep/counts: 카운트를 저장할 파일 위치를 지정한다. 기본위치는 /var/log/faillog이다.

 

4] 인증관리 구성요소

인식하는 인자들:

onerr=(succeed|fail); file=/where/to/keep/counts; no_magic_root

 

설명:

이 모듈의 인증 구성요소는 시도된 로그인 카운트를 증가시킨다.

 

예제:

no_magic_root옵션이 쓰이면 만약 uid 0인 사용자가 이 모듈을 호출한 경우 카운트를 증가시킨다. 시스템 관리자는 이것을 telnet/rsh/login같이 데몬이 실행시키는 서비스에 사용해야 한다. 사용자가 실행시키는 su같은 프로그램에서는 이 옵션이 빠져야 한다.

 

설명을 더 하자면 이미 root권한으로 돌고 있는 프로세스가 다른 서비스에 접근할 경우 이 접근은 magic이 되고 pam_tally의 검사를 받지 않는다. 이것은 root로 부터 다른 방법으로는 접근이 막혀있는 계정으로 su할 때 편리하다. 그러나 telnet이나 login같이 언제나 root권한으로 실행되는 서비스들의 경우 앞서 기술한 그대로 root(즉 전원)는 이런 magic상태가 허용되어서는 안되므로 no_magic_root옵션이 켜져있어야 하다.

 

5] 계정관리 구성요소

인식하는 인자들:

onerr=(succeed|fail); file=/where/to/keep/counts; deny=n; no_magic_root; even_deny_root_account; reset; no_reset; per_user; no_lock_time

 

설명:

계정관리 구성요소는 시도횟수에 대한 접근을 막거나 시도횟수를 초기화 할 수 있다. 또한 카운트 파일이 plain파일인지 쓰기 권한이 모두에게 주어지지 않고 적절히 유지되고 있는지를 검사한다.

 

예제:

deny=n 만약 사용자별 tally회수가 n을 넘어선 경우 그 사용자의 접근을 막는다. 이 옵션이 사용되면 접근 권한을 요구하는 사용자가 root이고 no_magic_root옵션이 지정되지 않았던 경우가 아니라면 reset/no_reset옵션의 기본값이 reset으로 바뀐다.

 

no_magic_root root로 부터의 접근을 무시하지 말고 거부하도록 만든다. 이 옵션을 telnet/rsh/login같은 데몬이 실행시키는 서비스들에 적용하라.

 

even_deny_root_account 옵션은 root계정을 사용불가능하게 만든다. root를 얻으려는 magic root는 이 옵션이 설정되어 있어도 통과하고 일반 유저들만 막힌다는 것을 기억해두기 바란다.

 

reset 인자는 magic root의 경우이거나 아니거나 상관없이 인증에 성공했을 경우 모듈이 카운트를 0으로 초기화하도록 한다. no_reset옵션은 성공적인 로그인에도 카운터값을 초기화하지 않는다. deny가 없고 접근하는 사용자가 magic root가 아닌 상태에서는 이것이 기본으로 적용된다.

 

만약 /var/log/faillog 파일에서 이 사용자에 대해서 .fail_max필드가 0이 아닌 값을 가지고 있다면 per_user옵션이 전체에 공동으로 해당되는 deny=n값 대신 이 값을 사용하도록 한다.

 

no_lock_time 옵션은 /var/log/failog파일에 있는 .fail_locktime필드값을 사용하지 않도록 한다.

 

정상적인경우 Denial Of Service공격을 막기 위해서 root계정에 대한 접근 실패는 누적되더라도 root계정은 사용정지되지 않는다. 만약 사용자들은 shell계정이 주어지지 않고 root계정은 단지 su명령을 통해서나 console login을 통해서만 로그인할 수 있다면(telnet, rsh등을 통하지 않고) 이 정책은 안전하다고 할 수 있다. 만약 당신이 진정으로 특정서비스에 대해서 root가 접근하는 것을 허용하길 원하지 않는다면 even_deny_root_account옵션을 사용하도록 하라.

 

25) Time control

1] 개요

모듈 이름: pam_time

제공되는 관리 그룹: account

시스템 의존성: /etc/security/time.conf 설정 파일 필요

네트워크 인식: PAM_TTY 항목을 통해서만 인식

 

2] 모듈의 전반적인 설명

잘 정비된 시스템은 때때로 특정 서비스에 대해서는 선택적으로 접근을 허용하도록 만들어 놓기도 한다. 이 모듈은 설정파일에 있는 내용을 바탕으로 시스템에서 제공되는 서비스에 접근할 수 있는 시간을 제어할 수 있게 해 준다. 이 모듈은 사용자가 접근하는 로그인 이름, 하루중의 시간, 요일, 접근을 요구하는 서비스, 사용자의 터미널에 대한 정보를 받아서 접근을 허가할 것인지를 판단한다.

 

3] 계정관리 구성요소

설명:

이 모듈은 /etc/security/pam.conf파일에 들어 있는 내용을 근거로 어떤 행동을 할 것인지를 결정한다. 각 규칙은 다음의 형태를 따른다.

services;ttys;users;times

 

설명하자면 각 규칙은 한줄로 되어 있고, newline 캐릭터가 나오거나 '#'로 표시하는 주석이 시작하는 시점에서 끝난다. 이 규칙은 세미콜론(';')으로 분리되는 네 개의 항목으로 분리된다. 각 항목은 다음과 같다.

 

services - 이 규칙이 적용될 서비스의 이름

ttys - 규칙을 적용할 터미널의 이름

user - 적용할 사용자이름의 목록

이 목록은 다음의 규칙을 따르는 토큰의 나열인데 이들은 적절한 PAM_ 항목과 연결되게 된다. - 적어도 하나 이상의 wildcard character '*'를 가진다. - 부정을 나타내는 '!'를 선택적으로 앞에 쓸 수 있다. - 이 나열에는 다음의 두 가지 논리 연산자를 쓸 수 있다. 논리적 AND '&'와 논리적 OR '|'이다. 두 가지 예를 들어보자. !morgan&!root - 이 규칙은 morgan에게도 root에게도 적용되지 않는다. tty*&!ttyp* - 이 규칙은 콘솔 터미널에만 적용되고 가상 터미널에는 적용되지 않음을 나타낸다.

 

times - 언제 이 규칙을 적용할 것인지를 지정한다. 각 부분은 날짜/시간 범위이다. 날짜는 두개의 글자의 조합으로 나타낸다. 예를들어 'MoTuSa'는 월, , 토요일을 나타낸다. 반복되는 날은 효력을 상쇄시킴을 주의하라. 'MoTuMo'라고 쓴 경우 실제로는 화요일만 유효하게 처리된다. 'MoWk'라고 쓴 경우 월요일을 제외한 평일이라는 뜻이다. 다음의 두글자 조합이 유효하게 처리된다.

 

Mo Tu We Th Fr Sa Su Wk Wd Al

 

마지막에서 두번째는 주말을 뜻하고 마지막 항목은 한 주의 모든 날에 해당한다.

 

시간 범위는 24시간 표시로 나타낸 HHMM형식에다가 하이픈'-'표시로 시작범위와 끝범위를 지정한다. 만약 끝시간이 시작시간보다 작다면 다음날의 해당시간으로 해석된다. 'Mo1800-0300'이라고 쓰면 허용되는 시간은 월요일 저녁 6시부터 다음날 새벽 3시까지라는 뜻이다.

 

주어진 시간제한조건은 앞의 세개의 필드의 조건이 만족되는 경우에만 적용된다.

 

읽기 쉽고 편리하도록 규칙은 newline chararacter로 분리해서 다음줄에 계속 쓰는 것이 가능하다.

 

예제/추천하는 사용법:

이 모듈의 사용은 Linux-PAM 설정 파일에서 다음과 같이 시작된다.

#

# pam_time 을 로그인 요청에 적용

#

login   account  required       pam_time.so

 

여기서의 예는 login 프로그램에 이 모듈을 사용하는 것이다.

/etc/security/time.conf설정파일에서 사용할 수 있는 규칙의 예는 다음과 같다.

login ; tty* & !ttyp* ; !root ; !Al0000-2400

 

root를 제외한 모든 사용자는 언제나 콘솔 로그인을 하는 것이 거부된다.

 

games ; * ; !waster ; Wd0000-2400 | Wk1800-0800

 

 

 

games (Linux-PAM을 사용하기 위해서 설정됨) 서비스는 근무시간대에는 사용이 불가능하다. 이 규칙은 waster라는 사용자에게는 적용되지 않는다.

 

현재 세션을 강제로 종료하는 데몬은 없다. 이것은 나중에 고쳐져야 할 부분이다.

 

잘못 설정된 규칙은 syslog(3)에 의해서 에러로 기록된다.

 

26) The Unix Password module

1) 개요

모듈 이름: pam_unix

제공되는 관리 그룹: account; authentication; password; session

 

2) 모듈의 전반적인 설명

이것은 표준 UNIX인증 모듈이다. 계정의 정보를 얻고 쓰고 인증처리를 하기 위해서 시스템의 라이브러리를 사용한다. 보통 이 정보는 /etc/passwd파일이나 shadow가 사용되는 경우 /etc/shadow파일에서 얻어온다.

 

3) 계정관리 구성요소

인식하는 인자들: debug; audit

 

설명:

debug 옵션의 경우 syslog(3)에 모듈의 동작에 대해서 더 많은 정보를 기록한다. 다른 구성요소가 지원하는 옵션은 기록을 하지 않고 무시하고 그 외의 옵션은 로그에 에러로 기록된다. audit옵션을 사용하는 경우 보다 더 많은 정보를 기록한다.

 

expire; last_change; max_change; min_change; warn_change shadow구성요소들에 기반하고 있는 이 모듈은 사용자의 계정과 패스워드를 확인한다. 패스워드를 확인하는 경우 사용자의 패스워드를 변경하도록 권유하거나 PAM_AUTHTOKEN_REQD를 돌려줌으로써 사용자가 새 패스워드를 입력할 때까지 서비스의 실행을 유보한다. 앞에서 기술된 내용은 GNU Libc info문서에서 기록되어 있다. 만약 이 항목중 하나이상의 기록을 읽어들일 수 없다면 해당되는 shadow의 체크를 행하지 않는다.

 

예제/추천하는 사용법:

계정관리 모드에서 다음과 같이 이 모듈을 실행시키는 것이 가능하다.

 

#

# 사용자의 계정과 패스워드가 유효한지 확인

#

login   account  required       pam_unix.so

 

4] 인증관리 구성요소

인식하는 인자들:

debug; audit; use_first_pass; try_first_pass; nullok; nodelay

 

설명:

debug 옵션의 경우 syslog(3)에 모듈의 동작에 대해서 더 많은 정보를 기록한다. 다른 구성요소가 지원하는 옵션은 기록을 하지 않고 무시하고 그 외의 옵션은 로그에 에러로 기록된다. audit옵션을 사용하는 경우 보다 더 많은 정보를 기록한다.

 

이 모듈의 기본적으로 사용자의 암호가 비어있다면 사용자가 서비스를 사용하지 못하게 한다. nullok옵션을 사용하면 이 기본동작을 무효화시킨다.

 

try_first_pass옵션을 사용하면 사용자에게 암호를 입력하는 것을 요구하기 전에 앞선 인증모듈에서 사용된 암호를 먼저 사용해서 대입해본다. use_first_pass옵션을 사용하는 경우 이렇게 저장된 암호만을 사용하며 사용자에게 암호를 입력할 것을 요구하는 메시지를 내보내지 않는다. 만약 사용가능한 암호가 없거나 틀리다면 사용자가 서비스를 사용하는 것을 막는다.

 

nodelay옵션을 사용한 경우 인증전체가 실패하게 되는 경우 잠시 기다리는 것을 취소시킨다. 기본적으로 각 묘듈은 초 단위로 delay-on-failure를 요청하게 되어 있다.

 

이 모듈의 다른 구성 요소에서 지원되는 옵션들은 조용히 무시되고 그 외는 syslog(3)를 통해서 에러로 기록된다.

 

unix_chkpwd 라는 프로그램은 사용자의 암호가 읽을수 없는 장소에 보관되는 경우 사용자의 암호를 검사해주는 역할을 한다. 이 프로그램은 매우 단순하며 단지 이 프로그램을 호출한 사용자의 암호를 검사해주는 역할만 할 뿐이다. 이 프로그램은 사용자를 위해서 투명하게 작동되며 이 모듈의 인증 구성요소에 의해서 수행된다. 이러한 방식으로 xlock같은 프로그램이 setuid-root를 하지 않고도 실행되는 것이다.

 

예제/추천하는 사용법:

이 모듈의 정상적인 동작을 위해서는 /etc/nsswitch.conf파일이 올바르게 설정되어 있어야 한다. 그 파일에 지정된 사용자의 database는 인증된 사용자의 기록을 보관하고 있다.

 

인증 모드에서는 다음과 같이 사용할 수 있다.

 

#

# 사용자를 인증

#

login   auth  required       pam_unix.so

 

5] 패스워드관리 구성요소

인식하는 인자들:

debug; audit; nullok; not_set_pass; use_authtok; try_first_pass; use_first_pass; md5; bigcrypt; shadow; nis; remember

 

설명:

pam_unix모듈의 이 구성요소는 사용자의 암호를 갱신하는 역할을 한다.

 

통상적으로 쓰이는 암호화된 사용자암호를 저장하는 UNIX database의 경우 암호화 처리를 할 때 전통의 crypt(3)를 사용하지 않고 md5옵션을 사용해서 MD5 함수를 호출한다. 8자 이상을 암호화 처리해서 저장하기 위해서는 이 외에도 bigcrypt옵션을 사용하여 표준 UNIX crypt 알고리즘을 확장한 DEC 'C2'확장함수를 이용할 수 있다.

 

nullok 옵션을 사용하면 암호를 공란으로 비워두도록 바꾸는 것을 허용한다. 이 옵션이 없는 경우 암호가 없는 것은 계정을 잠그는 것으로 해석된다.

 

use_first_pass옵션은 옛날 암호와 새로운 암호를 앞선 모듈에서 사용된 암호로 고정시키는 역할을 한다. try_first_pass옵션이 사용된 경우 앞서 사용된 사용자의 옛 암호를 이용해서 사용자가 옛날 암호를 다시 입력할 필요가 없도록 한다. 만약 이 옛날 암호가 바르지 않다면 사용자는 옛날 암호를 입력하라는 메시지를 받게 된다. use_authtok옵션을 사용한 경우 이 모듈은 새 암호를 앞서 사용된 암호처리 모듈에서 사용한 암호로 만든다. (이 경우는 앞서 Cracklib모듈을 적층하는 예제에서 설명했다.)

 

not_set_pass옵션은 다른 암호처리 모듈과 옛날 암호나 새 암호를 주거나 받는 것에 대해서 전혀 신경쓰지 않도록 지시한다.

 

debug 옵션은 이 모듈의 암호처리 부분의 동작에 대해서 syslog(3)에 더 많은 정보를 기록하도록 한다. 다른 옵션들은 syslog(3)에 의해서 에러로 기록될 수도 있다. audit옵션을 사용하면 더 많은 정보를 기록한다.

 

nis옵션은 pam_unix모듈은 새 암호를 설정하는데 NIS RPC를 이용해서 시도할 것을 지시한다.

 

remember옵션은 하나의 값을 받아들인다. 이 값은 각 사용자별로 가장 최근에 사용된 암호의 갯수다. 이 암호들은 /etc/security/opasswd에 저장되며 사용자의 암호 변경 이력을 조사해 갈은 암호를 너무 자주 바꾸어서 사용하는 것을 막는다.

 

예제/추천하는 사용법:

표준 사용방법:

 

#

# 사용자 암호를 바꿈

#

passwd   password   required   pam_unix.so

 

 

 

pluggable 암호 검사 모듈인 pam_cracklib과 함께 적층해서 사용하는 예이다.

 

#

# 사용자 암호를 바꿈

#

passwd   password   required   pam_cracklib.so retry=3 minlen=6 difok=3

passwd   password   required   pam_unix.so use_authtok nullok md5

 

 

 

6] 세션관리 구성요소

설명:

이 구성요소에서 받아들이는 옵션은 아무것도 없다. 단지 사용자의 이름과 서비스의 종류를 syslog(3)에 기록하는 역할을 할 뿐이다. 사용자의 세션 시작과 끝을 기록한다.

 

예제/추천하는 사용법:

세션 모듈을 사용하는 것은 직관적이다.

 

#

# 세션 시작과 종료

#

login   session  required       pam_unix.so

 

27). The userdb module

1] 개요

모듈 이름: pam_userdb

제공되는 관리 그룹: authentication

시스템 의존성: Berkeley DB가 필요함.

 

2] 모듈의 전반적인 설명

.db database에서 사용자를 검색하고 그 database에서 사용자의 암호를 검사함

 

3] 인증관리 구성요소

인식되는 인자들: debug; icase; dump; db=XXXX;

 

설명:

이 모듈은 사용자명과 암호를 Berkely DB database에서 검사하는 역할을 한다. database는 사용자이름으로 정렬되어 있으며 사용자명의 키에 해당하는 자료는 암호화되지 않은 상태로 보관되고 있는 사용자 암호이다. 그러므로 DB database자체의 접근 권한에 대해서 주의를 기울여야 한다.

 

이 모듈은 사용자의 암호를 전통적인 방식으로 읽어들인다. 만약 당신이 이 모듈을 다른 인증 모듈(pam_pwdb같은 모듈)보다 먼저 사용하는 경우에는 그 모듈이 입력된 암호를 이 모듈에서 만드는 항목인 PAM_AUTHTOK로 부터 읽어들이도록 만들어야 한다.

 

이 모듈의 동작은 /etc/pam.d/<service>파일에 있는 설정에 따라 제어된다.

 

 

debug - syslog(3)에 더 많은 정보를 제공한다.

 

icase - 암호를 대소문자 구별하지 않고 검사한다.

 

dump - database의 모든 내용을 log에 기록한다. (이것을 기본동작으로 만들지 말라!)

 

db=XXXX - XXXX라는 위치에 있는 database파일을 사용한다. 보통 Berkeley DB는 필요한 확장자를 자동으로 붙여주므로 /etc/foodata.db대신 /etc/foodata만 써 주어야 한다.

 

 

예제/추천하는 사용법:

이것은 /tmp/dbtest.db파일에 저장된 사용자의 로그인이름과 암호를 검사해 맞으면 로그인을 허용하는 보통의 ftp설정 파일이다. (이 파일은 보통 대부분의 시스템에서 /etc/pam.d/ftp에 있다)

 

#%PAM-1.0

auth       required     pam_listfile.so item=user sense=deny file=/etc/ftpusers onerr=succeed

auth       sufficient   pam_userdb.so icase db=/tmp/dbtest

auth       required     pam_pwdb.so shadow nullok try_first_pass

auth       required     pam_shells.so

account    required     pam_pwdb.so

session    required     pam_pwdb.so

 

28) Warning logger module

1] 개요

모듈 이름: pam_warn

제공되는 관리 그룹: authentication; password

네트워크 인식:

원격 사용자와 호스트에 대한 정보를 로그에 기록(만약 pam-item을 알고 있으면)

 

2] 모듈의 전반적인 설명

이 모듈은 제안된 인증에 대한 정보를 기록하거나 프로그램이 암호를 갱신하도록 하는 것을 목적으로 만들어졌다.

 

3] 인증관리+패스워드관리 구성요소

설명:

서비스, 터미널, 사용자, 원격사용자, 원격호스트를 syslog(3)에 기록한다. 각 항목들은 조사해서 얻는 것이 아니라 표준의 pam-item들을 읽어들인다.

 

예제/추천하는 사용법:

앞의 설정 파일부분(4. Linux-PAM 설정파일)에서 설명되어 있음

 

29) 휠 그룹 모듈(The wheel module)

1] 개요

모듈 이름: pam_wheel

제공되는 관리 그룹: authentication

시스템 의존성: libpwdb 필요함.

 

2] 모듈의 전반적인 설명

root권한을 얻을 수 있는 자격을 wheel(gid=0) 그룹의 사용자에게만 준다.

 

3] 인증관리 구성요소

인식하는 인자들:

debug; use_uid; trust; deny; group=XXXX

 

설명:

이 모듈은 소위 wheel그룹을 사용하도록 한다. 이 모듈은 기본적으로는 root권한을 얻을 수 있는 자격을 사용자가 wheel그룹에 속한 경우에만 가능하도록 만든다. (우선 이 모듈은 'wheel'그룹이 존재하는지를 먼저 검사한다. 만약 없다면 이 모듈은 group id 0인 그룹을 wheel 그룹으로 지정한다)

 

이 모듈의 동작은 /etc/pam.conf파일에 정의된 내용에 따라서 제어할 수 있다.

 

 

debug - syslog(3)에 더 많은 정보를 제공한다.

 

use_uid - 이 옵션을 사용하면 사용자의 getlogin(3)이름을 이용하지 않고 현재 프로세스의 uid를 이용한다. 이 옵션은 예를 들어 'su'명령어 같은 경우와 같이 한 계정에서 다른 계정으로 뛰어 넘는 경우 유용하다.

 

trust - 이 옵션이 사용된 경우 root권한을 요구한 사용자가 wheel그룹에 속한 경우 PAM_SUCCESS를 돌려주도록 한다. 기본동작은 이런 경우에 PAM_IGNORE를 돌려주는 것이다. 이 옵션을 사용하면 wheel group사용자들이 암호를 입력하지 않고도 root권한을 획득할 수 있게 만든다. 주의해서 사용하기 바란다!

 

deny - 모듈의 동작을 반대로 하도록 만든다. 만약 사용자가 wheel그룹에 속한 사용자가 uid=0을 얻기 위한 접근을 한다면 접근을 거부한다. (아마도 이것은 터무니없는 짓일 것이다.) 이 옵션은 'group= '옵션과 같이 사용되기 위해서 만들어졌다.

 

group=XXXX - gid=0 인 그룹을 검사하는 대신 인증을 위해서 XXXX그룹을 검사한다. 여기서 XXXX는 그룹의 이름이지 숫자로 된 그룹의 id가 아니다.

예제/추천하는 사용법:

superuser 권한을 얻을 수 있는 권한을 wheel group 에만 허용하려는 경우 다음의 내용을 설정파일에 기록하면 된다.

 

#

# root 는 기본적으로 접근이 허용된다 (rootok), 오직 wheel 그룹의 사용자만

# root (wheel) 가 될 수 있지만 root가 아닌 사용자는 Unix 인증을 거친다.

#

su      auth     sufficient     pam_rootok.so

su      auth     required       pam_wheel.so

 

su      auth     required       pam_unix_auth.so

728x90
반응형

'IT > OracleLinux-1Z0460' 카테고리의 다른 글

리눅스 파일 찾기, 파일속 문자열 찾기  (0) 2022.08.02
오라클 리눅스 설치방법  (0) 2022.05.20
ssh 란  (0) 2022.05.20
IP Masquerading Configuration  (0) 2022.05.20
DHCP  (0) 2022.05.19