게시물 261건
   
[Redhat] PAM 설정
글쓴이 : theko 날짜 : 2014-02-04 (화) 16:17 조회 : 12256

PAM(Pluggable Authentication Module)
 
1. PAM(Pluggable Authentication Module)
사용자를 인증하고 그 사용자의 서비스에 대한 액세스를 제어하는 모듈화된 방법
PAM은 관리자가 응용프로그램들의 사용자인증방법을 선택할 수 있도록 해준다.
 
2. PAM의 동작
PAM라이브러리는 /etc/pam.d에서 각 시스템에 맞게 설정하여, 각 시스템에서 사용가능한 인증 모듈을 통해 사용자의 인증 요구를 처리
 
3. PAM의 구성파일
 - /etc/pam.d 디렉토리에 설치
 - PAM파일의 구성문법   
   구조 : type   control   module-path   module-arguments    
          ex) # cat login
   auth       include      system-auth
   account    required     pam_nologin.so
   password   include      system-auth
   session    required     pam_selinux.so close
   session    include      system-auth
  - type : 어떤 타입의 인증이 사용될 것인지를 알려줌
           같은 타입의 모듈은 쌓일 수 있고, 사용자에 인증되기 위한 다중 요구사항을 만족하도록 요청할 수 있다. 
           • account: 사용자가 해당 서비스에 접근이 허용되었는지, 패스워드가 기간이 만료가 되었는지를 결정.
           • auth: 패스워드 보다 정교한 방법을 통해서 사용자가 인증 결정
           • password: 사용자가 인증방법을 변경하도록 제공
           • session: 사용자가 인증받기 전후에 해야 할 것을 나타낸다.
  - control : 통제를 담당하는 부분, PAM에 무엇을 해야할 지를 알려준다.
           • requisite: 모듈을 이용하는 인증이 실패할 경우, 즉시 인증을 거부
           • required: 인증이 거부되기 전에 비록 PAM이 이 서비스에 등록된 다른 모든 모듈들을 요구함에도 불구하고 실패할 경우 인증을 거부
           • sufficient: 비록 이전에 요청되어진 모듈이 실패하더라도 이 모듈에 의해서 인증이 성공할 경우, PAM은 인증을 승인한다.
           • optional : 서비스에 대한 응용프로그램의 성공/실패에 중요하지 않다는 것을 의미
  - module-path : 모듈경로, ex)/lib/security
  - module-argument : 모듈에게 전달되는 인수

4. /etc/pam.d : 특정한 서비스에 대한 요청이 오면 /etc/pam.d 디렉토리안의 파일의 설정을 보고 처리하며,
                그 외의 서비스들은 /etc/pam.d/other에서 처리한다.
  - login : 슈퍼유저로 로그인할 수 있는 사용자 인증과 관련된 파일       
 ex)# cat /etc/pam.d/login            
  auth       required     /lib/security/pam_securetty.so            
  // pam_securetty.so 모듈이 지정해놓은 보안 규칙을 만족해야만 로그인이 허용
  // 이 모듈 /etc/securetty 파일에서 지정되어있는 tty에서 요청한 슈퍼유저만 로그인을 허용한다.            
 - other : PAM에서 별도로 지정하지 않은 서비스에 대한 인증을 위한 참조하는 파일
   ex)# cat other
 auth     required       /lib/security/pam_deny.so             
 account  required       /lib/security/pam_deny.so             
 password required       /lib/security/pam_deny.so             
 session  required       /lib/security/pam_deny.so               
 //알지 못하는 서비스가 4개의 구성타입 중 어떤 곳에 접근을 시도하더라도 PAM은 인증을 거부한다.(pam_deny.so 모듈)
 
5. 모듈 설명
 - pam_securetty.so    
   : 표준의 UNIX securetty검사해서 /etc/securetty파일에 기록된 내용과 비교하는데 root계정인 경우에만 확인
     그 외의 다른 사용자에 대해서는 항상 인증이 성공한 것으로 처리
     사용된 곳 : /etc/pam.d/login 등    
 - pam_listfile.so
   : 임의의 파일에 대해 서비스를 허가하거나 거부하는 방법을 제공
    module-argument  • onerr=succeed|fail : onerr=succeed이면 PAM_SUCCESS를 리턴하고,
                                            onerr=fail이면 PAM_AUTH_ERR 또는 PAM_SERVICE_ERR이 리턴 
                              • file=filename : 지정한 파일을 읽는다. 한줄에 한 아이템만 적는다.
                              • ense=allow|deny : allow는 특정한 아이템이 발견되면 PAM_SUCCESS가 리턴되고 권한요구는 성공
                                         값이 deny이면 PAM_AUTH_ERR이 리턴되고 권한요구는 실패한다.
                              • item=user|tty|rhost|ruser|group|shell    => 아이템을 지정한다. 각각 사용자명, 요청한 터미널, 원격사용자,그룹,쉘을 나타낸다.
                              • apply=user|@group => 특정사용자 또는 주어진 그룹으로 적용을 제한하는데 사용한다.
 - pam_nologin.so
   : /etc/nologin파일이 존재하면 root만 로그인할 수 있고 다른 사용자는 에러메시지와 함께 거부
     /etc/nologin파일이 없다면 모듈은 성공을 리턴
     사용된곳: /etc/pam.d/login   
 - pam_deny.so
   : 이 모듈은 접근을 거부하는 데 사용
 - pam_cracklib.so
   : 이 모듈은 password를 설정한 정책과 비교,검사한다.
    모듈인자  • debug : 모듈이 동작을 보여주기 위해 syslog에 정보를 남기는데 이 옵션을 사용하면 패스워드정보를 남기지 않는다.
                  • type=LINUX : 모듈의 기본 동작은 패스워드를 물어볼 때 "New UNIX password: "라고 묻는데,
                             이 옵션을 사용하여 'UNIX'라는 말 대신 'LINUX'로 바꿀 수 있다.
                  • retry=N : 새 패스워드를 물어보는 횟수로서 기본값은 1이다. 이 옵션을 사용하면 N만큼 횟수를 늘릴 수 있다.
                  • difok=N : 새 패스워드에서 예전 패스워드에 있지 않는 문자들을 몇자나 사용해야 하는지 나타내는 수로 기본값은 10이고,  새 패스워드에서 1/2이상의 글자가 이전과 다르다면 새 패스워드로 받아들여 진다.        
                  • minlen=N : 새 패스워드의 최소 크기에 1을 더한 크기이다.
                           새 패스워드엔 사용된 문자열의 길이외에 각 문자종류(숫자, 대문자, 소문자, 특수문자)를 사용한 것에 대해 각각 크레디트(credit)를 준다.
                  • dcredit=N : 숫자문자가 가질 수 있는 크레디트값을 지정한다. 기본값은 1이다.
                  • ucredit=N : 대문자가 가질 수 있는 크레디트값을 지정한다. 기본값은 1이다.
                  • lcredit=N : 소문자가 가질 수 있는 크레디트값을 지정한다. 기본값은 1이다.
                  • ocredit=N : 특수문자가 가질수 있는 크레디트값을 지정한다. 기본값은 1이다.
                  • use_authok : 이 인자는 사용자에게 새 패스워드를 묻지말고 앞서 실행된 패스워드모듈에서 받은 것을  사용하도록 모듈에게 강제한다.
 - pam_wheel.so
   : root권한을 얻을 수 있는 사용자를 wheel(gid=0)이라는 그룹으로 묶어서 사용하도록  지원하는 모듈이다.
    모듈인자  • debug : syslog에 더 많은 정보를 제공한다.
                  • group=그룹명 : gid=0인 그룹을 검사하는 대신 인증을 위해서 '그룹명'그룹을 검사한다. 여기서 그룹명은  그룹의 이름이지 숫자로 된 그룹의 id가 와서는 안된다.
                  • trust : 이 옵션을 사용하면 root권한을 요구한 사용자가 wheel그룹에 속한 경우 PAM_SUCCESS를  돌려주도록 한다.
                  • deny : 모듈의 동작을 반대로 하도록 만든다.
                  • use_uid : login할 때의 이름을 이용하지 않고 uid를 이용한다.
    사용된 곳: /etc/pam.d/su   

6. PAM의 사용예 
 - 사용자 패스워드 길이 제한하기   
   : 리눅스에서 패스워드 기본설정과 관련된 파일이 /etc/login.defs이다.
     이 파일에서 패스워드의 길이는 최소 5자로 설정하고 있다. 이 파일에서 설정해도 되지만 PAM을 이용하여 패스워드의 길이를 설정할 수 있다.
     기본 설정파일은 /etc/pam.d/passwd이다.
 
   # cat /etc/pam.d/passwd       
     #%PAM-1.0       
     auth       required     /lib/security/pam_stack.so service=system-auth       
     account    required     /lib/security/pam_stack.so service=system-auth       
     password   required     /lib/security/pam_stack.so service=system-auth     
     // 현재 패스워드관련 정책은 /etc/pam.d/system-auth의 설정을 따른다는 뜻

   # cat /etc/pam.d/system-auth
     #%PAM-1.0       
     # This file is auto-generated.     
     # User changes will be destroyed the next time authconfig is run.       
     auth        required      /lib/security/pam_env.so       
     auth        sufficient    /lib/security/pam_unix.so likeauth nullok       
     auth        required      /lib/security/pam_deny.so        
     account     required      /lib/security/pam_unix.so        
     password    required      /lib/security/pam_cracklib.so retry=3 type=       
     password    sufficient    /lib/security/pam_unix.so nullok use_authtok md5 shadow       
     password    required      /lib/security/pam_deny.so        
     session     required      /lib/security/pam_limits.so       
     session     required      /lib/security/pam_unix.so

 - 패스워드 길이제한을 위한 /etc/pam.d/passwd 파일 수정 (3번째줄을 삭제하고 아래와 같이 3줄을 추가)

   # cat /etc/pam.d/passwd       
     #%PAM-1.0       
     auth       required     /lib/security/pam_stack.so service=system-auth       
     account    required     /lib/security/pam_stack.so service=system-auth       
     #password   required    /lib/security/pam_stack.so service=system-auth       
     password   required     /lib/security/pam_cracklib.so retry=3 minlen=12 type=LINUX       
     password   sufficient     /lib/security/pam_unix.so nullok use_authok md5 shadow       
     password   required     /lib/security/pam_deny.so        
     //기존의 내용을 주석처리하였다. 새로이 설정한 내용은 패스워드를 /etc/pam.d/system-auth파일의 설정을 따르지 않고 새로운 모듈로 설정하였다.    

   # cat /etc/pam.d/system-auth       
    #%PAM-1.0        # This file is auto-generated.       
    # User changes will be destroyed the next time authconfig is run.       
    auth        required      /lib/security/pam_env.so       
    auth        sufficient    /lib/security/pam_unix.so likeauth nullok       
    auth        required      /lib/security/pam_deny.so      
    account     required      /lib/security/pam_unix.so        
    session     required      /lib/security/pam_limits.so       
    session     required      /lib/security/pam_unix.so   
    // 패스워드 관련된 부분을 /etc/pam.d/passwd에서 직접 관여하므로 이 파일에서 password관련 3개의 항목을 제거       

 - 테스트     
 # passwd     
   Changing password for user posein.   
   Changing password for posein     
   (current) UNIX password:     
   New LINUX password: // LINUX라는 문구열이 보인다.     
   Retype new LINUX password: // LINUX라는 문구열이 보인다.     
   Enter new UNIX password:     
   Retype new UNIX password:     
   passwd: all authentication tokens updated successfully       
   //retry=3 으로 설정해서 3번 물어본다


이름 패스워드
비밀글 (체크하면 글쓴이만 내용을 확인할 수 있습니다.)
왼쪽의 글자를 입력하세요.
   

miwit.com sir.co.kr DNS Powered by DNSEver.com DNS Powered by DNSEver.com