IT보안관의 공부 클라우드

PAM - 3 본문

IT/리눅스

PAM - 3

ㅡㅡㅡㅡㄷ 2020. 6. 10. 16:28

주요 모듈에 대한 설명
(1) 설명리눅스(레드햇 8.0기준)에서 사용가능한 모듈들은 /lib/security디렉토리에 있다주요 
          모듈에 대해 알아본다.

(2) 지원 모듈 목록
   [root@www root]# cd /lib/security
   [root@www security]# ls
   pam_access.so    pam_group.so      pam_mail.so         pam_shells.so     pam_unix_auth.so
   pam_chroot.so    pam_issue.so      pam_mkhomedir.so    pam_smb_auth.so   pam_unix_passwd.so
   pam_console.so   pam_krb5.so       pam_motd.so         pam_stack.so      pam_unix_session.so
   pam_cracklib.so  pam_krb5afs.so    pam_nologin.so      pam_stress.so     pam_userdb.so
   pam_deny.so      pam_lastlog.so    pam_permit.so       pam_tally.so      pam_warn.so
   pam_env.so       pam_ldap.so       pam_pwdb.so         pam_time.so       pam_wheel.so
   pam_filter       pam_limits.so     pam_rhosts_auth.so  pam_timestamp.so  pam_winbind.so
   pam_filter.so    pam_listfile.so   pam_rootok.so       pam_unix.so       pam_xauth.so
   pam_ftp.so       pam_localuser.so  pam_securetty.so    pam_unix_acct.so

(3) 주요 모듈
   1) pam_securetty.so
    설명 모듈은 표준의 UNIX securetty검사해서 /etc/securetty파일에 기록된 내용과 비교

             하는데 root계정인 경우에만 확인한다.
               외의 다른 사용자에 대해서는 항상 인증이 
             성공한 것으로 처리한다.
              다른 sufficient인증 방법보다 앞서 require인증방법으로 
             등록하는 것이 표준사용방식이다
    사용된  : /etc/pam.d/login 

   2) pam_listfile.so
    설명 모듈은 임의의 파일에 대해 서비스를 허가하거나 거부하는 방법을 제공한다.


    모듈인자(module-argument)
       onerr=succeed|fail
        => onerr=succeed이면 PAM_SUCCESS 리턴하고, onerr=fail이면 PAM_AUTH_ERR 또는 PAM_SER
          VICE_ERR 리턴된다보통 sense 반대로 적는다.
       file=filename
        => 지정한 파일을 읽는다한줄에  아이템만 적는다.
       sense=allow|deny
        => allow 특정한 아이템이 발견되면 PAM_SUCCESS 리턴되고 권한요구는 성공한다값이 
          deny이면 PAM_AUTH_ERR 리턴되고 권한요구는 실패한다.
       item=user|tty|rhost|ruser|group|shell
        => 아이템을 지정한다각각 사용자명요청한 터미널원격사용자,그룹,쉘을 나타낸다.
       apply=user|@group
        => 특정사용자 또는 주어진 그룹으로 적용을 제한하는데 사용한다이것은 tty, rhost, shel
          l아이템과 함께 사용될 때만 의미가 있는 제한이다생성시에  모듈인자를 제외하고는 
          모듈인자는 필수적이다.

    사용예(/etc/pam.d/ftp)
       [root@www root]# cat /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_stack.so service=system-auth
       auth       required     /lib/security/pam_shells.so
       account    required     /lib/security/pam_stack.so service=system-auth
       session    required     /lib/security/pam_stack.so service=system-auth

   3) pam_nologin.so
    설명
              /etc/nologin파일이 존재하면 root 로그인할  있고 다른 사용자는 에러메시지와
             함께 거부된다
              /etc/nologin파일이 없다면 모듈은 성공을 리턴한다
               모듈을 효과
             적으로 사용하려면 모든 login방법들(login, rlogin ) 이것을 사용하게 해야 한다.
             또한  설정은 sufficient 모듈 앞에 required 설정해야 한다.

    사용된곳: /etc/pam.d/login

   4) pam_deny.so
    설명 모듈은 접근을 거부하는  사용한다응용프로그램에게 항상 실패를 리턴한다.


    사용예
      a. 모든 계정에 대한 로그인을 막으려면 /etc/pam.d/login이라는 파일에 아래와 같이 설정해주
         된다.
       account    required     /lib/security/pam_deny.so
      b. 응용프로그램이 사용자의 패스워드를 변경하는 것을 막고 login 예전에 사용하던 패스워

        드가 만료되어  패스워드를 자동적으로 묻는 것을 막으려면 /etc/pam.d/login이라는 파일
         아래 내용을 추가한다.
       password   required     /lib/security/pam_deny.so

   5) 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
        =>  인자는 사용자에게  패스워드를 묻지말고 앞서 실행된 패스워드모듈에서 받은 것을 사용하도록 모듈에게 강제한다.

    . minlen값과 크레디트(credit)
        모듈은 크레디트(credit)라는 것을 사용한다만약 minlen=12 이면 실제적으로 보면 최소패스워드의 길이 12 되어야 한다
       소문자를 사용함으로 1크레디트숫자를 사용하여 1크레디트특수문자를 사용하여 1크레디트를 얻으므로 도합 3크레디트를 얻는다
       이런 경우 총문자의 길이는 12-3임으로 실제적으로 9자이상이면 가능하다.

   6) pam_wheel.so
    설명: root권한을 얻을  있는 사용자를 wheel(gid=0)이라는 그룹으로 묶어서 사용하도록 

             지원하는 모듈이다.

    모듈인자
       debug
        => syslog  많은 정보를 제공한다.
       group=그룹명
        => gid=0 그룹을 검사하는 대신 인증을 위해서 '그룹명'그룹을 검사한다여기서 그룹명은 그룹의 이름이지 숫자로  그룹의 id 와서는 안된다.
       trust
        =>  옵션을 사용하면 root권한을 요구한 사용자가 wheel그룹에 속한 경우 PAM_SUCCESS 돌려주도록 한다 wheel group 속한 사용자들은 암호를 입력하지 않고도 root권한을 획득할  있게 된다주의해서 사용해야 한다.
       deny 
        => 모듈의 동작을 반대로 하도록 만든다만약 사용자가 wheel그룹에 속한 사용자가 uid=0  얻기 시도하면 접근을 거부한다 옵션은 단독적으로는 쓸모가 없고 'group='옵션과 같이 사용하기 위해 만들어졌다.
       use_uid
        => login 때의 이름을 이용하지 않고 uid 이용한다.

    사용된 : /etc/pam.d/su

   7) pam_rootok
    설명 모듈은 superuser 암호입력없이 해당 서비스에 대한 접근을 허용할  사용한다.

    사용된 
       [root@www root]# cat /etc/pam.d/su
       #%PAM-1.0
       auth       sufficient   /lib/security/pam_rootok.so
        => root사용자는 기본적으로 접근이 가능하다, root사용자가 su명령으로 일반사용자로

          전환해도 패스워드를 묻지 않는다.
       # Uncomment the following line to implicitly trust users in the "wheel" group.
       #auth       sufficient   /lib/security/pam_wheel.so trust use_uid
       # Uncomment the following line to require a user to be in the "wheel" group.
       #auth       required     /lib/security/pam_wheel.so use_uid
       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
       session    required     /lib/security/pam_stack.so service=system-auth
       session    optional     /lib/security/pam_xauth.so

6. PAM
 사용예

(1) 특정계정에 대해 telnet 접속은 막고, ftp접속만 허가하도록 해보자.
   1) /etc/pam.d/login파일을 열어서 아래라인을 추가한다.
     auth       required     /lib/security/pam_listfile.so item=user sense=deny file=/etc/logi
     nusers onerr=succeed
   2) /etc/loginusers 파일을 만들고 telnet 접속을 막을 계정을 적는다.
     [root@www root]# cat /etc/loginusers
     prehee
       => prehee 이라는 계정은 텔넷은 사용할  없고 ftp 사용가능하다.

(2) /etc/loginusers파일에 등록된 사용자만 로그인을 허용하도록 해보자
   1) /etc/pam.d/login파일을 열어 아래라인을 추가한다.
     auth       required     /lib/security/pam_listfile.so item=user sense=allow file=/etc/logi
     nusers onerr=fail
   2) /etc/loginusers 파일을 만들고 접속하고자 하는 계정을 한줄에 하나씩 적는다.

(3) 사용자 패스워드 길이 제한하기
   1) 설명리눅스에서 패스워드 기본설정과 관련된 파일이 /etc/login.defs이다.  파일에서 패스
           워드의 길이는 최소 5자로 설정하고 있다 파일에서 설정해도 되지만 PAM 이용하여
           패스워드의 길이를 설정할  있다기본 설정파일은 /etc/pam.d/passwd이다.

   2) 설정하기
    . /etc/pam.d/passwd파일의 기본설정상태
       [root@www root]# 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 설정을 따른다는 뜻이다.

    패스워드와 관련된 /etc/pam.d/passwd파일의 기본설정상태 확인
       [root@www root]# 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줄을 추가한다.
       [root@www pam.d]# 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파일의 설정을 따르지 않고 새로운 모듈로 설정하였다.

    . /etc/pam.d/system-auth 내용수정패스워드 관련된 부분을 /etc/pam.d/passwd에서 직접 관여하므로  파일에서 password관련 3개의 항목을 제거한다.
       [root@www root]# 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

   3) 테스트
     [posein@www posein]$ 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번물어본다.

(4) su명령어를 특정사용자에게만 허가하기
   1) 설명: PAM서는 특정사용자만 특정한 그룹(보통 wheel) 속하도록 하여  그룹에 속한 사용자만
           특정한 권한을 가도록 하기 위해 pam_wheel.so라는 모듈을 제공한다또한 리눅스에서는 
           기본적으로 wheel이라는 그룹이 생성되어 있으므로  두가지를 이용하면 된다.

   2) 설정하기
    . /etc/group파일에서 wheel그룹에 su명령어를 사용할 사용자를 추가한다.
      ) [root@www root]# cat /etc/group
          root:x:0:root
          bin:x:1:root,bin,daemon
          daemon:x:2:root,bin,daemon
          sys:x:3:root,bin,adm
          adm:x:4:root,adm,daemon
          tty:x:5:
           disk:x:6:root
          lp:x:7:daemon,lp
          mem:x:8:
          kmem:x:9:
          wheel:x:10:root,posein            // posein이라는 사용자를 추가하였다.
          ----- 이하생략 -----

    . /etc/pam.d/su 아래의 내용을 추가한다.
       auth       required     /lib/security/pam_wheel.so debug group=wheel
       ) [root@www root]# cat /etc/pam.d/su
           #%PAM-1.0
           auth       sufficient   /lib/security/pam_rootok.so
           auth       required     /lib/security/pam_wheel.so debug group=wheel      // 
추가
           # Uncomment the following line to implicitly trust users in the "wheel" group.
           #auth       sufficient   /lib/security/pam_wheel.so trust use_uid
           # Uncomment the following line to require a user to be in the "wheel" group.
           #auth       required     /lib/security/pam_wheel.so use_uid
           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
           session    required     /lib/security/pam_stack.so service=system-auth
           session    optional     /lib/security/pam_xauth.so

 

출처 : sysops.tistory.com/125

'IT > 리눅스' 카테고리의 다른 글

네트워크 본딩(Network bonding) 정리  (0) 2022.05.02
PAM - 2  (0) 2020.06.10
PAM - 1  (1) 2020.06.10
리눅스 콘솔 접속 불가  (7) 2020.06.03
Comments