kkamagi's story

IT, 정보보안, 포렌식, 일상 공유

OS

계정 보안 - su, pam 설정

까마기 2020. 11. 2. 12:45
728x90
반응형

1. 특정 계정만 su 명령어 사용

 

리눅스 SSH 접속시 보안상 root접속을 막아놓고, 일반계정으로 접속 후 su 명령어를 이용하여 root접속을 한다. 하지만 일반계정 모두 su 명령어를 사용할 수 있기 때문에 특정 그룹(wheel)의 계정만 su 명령어가 사용 가능하도록 하는 것이 좋다.

 

가. 사용방법

 

1) /etc/group wheel그룹 사용자 등록

 

- 수동으로 입력 시

 

# vi /etc/group

 

wheel:x:10:root  ,(콤마)와 함께 사용자 계정 추가 후 저장

 

 

- gpasswd 명령어 사용하여 입력 시

 

# gpasswd –a [사용자계정] wheel    (-a대신 –d를 입력 시 사용자 삭제)

 

2) /etc/pam.d/su 파일 수정

 

# vi /etc/pam.d/su

 

아래 해당 되는 부분의 주석(#)을 지운다.

 

 

주석(#)을 지운 후에도 적용이 되지만, 로그 확인을 위해 아래와 같이 debug 를 추가한다.

 

 

3) /bin/su 권한설정


# chgrp wheel /bin/su
# ll /bin/su
# chmod 4750 

 

* wheel 그룹에 속한 사용자에 한하여 su 명령을 실행가능하도록 하기 위함

 

4) 저장 후 테스트

 

wheel그룹에 없는 계정으로 su 명령어 사용 시 :

 

아래와 같이 접속이 안됨을 확인 할 수 있으며,

 

/var/log/secure 로그 확인 시 아래와 같이 Access denied 됨을 볼 수 있다.

----------------------------------------------------------------------------------------------------------------------------------

 

Setuid란 ?

유닉스계열 파일 시스템에는 각각의 파일마다 권한이 설정되어 있다.

예를 들면 rwxr-x--x 이런 권한의 파일이 있다면 파일의 소유자는 읽기 쓰기 실행의 권한이 있고

(r = 읽기권한, w = 쓰기권한, x = 실행권한)

이 3개의 단위로 파일의 소유자, 소유자가 속한 그룹, 모든유저의 권한 을 설정하게 된다.

각각을 비트로 표현하면 r=4, w=2, x=1이 된다. 위의 예를 비트로 표현하면 751 이 되는것이다.

그렇다면 이제 Setuid를 살펴보자. 예를 들어 rwsr-x---x 로 표현한다. 여기서 setuid는 4000이 된다.

즉, rwsr-x--x 는 4751 이 된다.

(4000 setuid 실행시 소유자 권한을 갖고 ,2000 setgid 실행시 그룹 권한을 갖는다.)

 

그럼 Setuid는 왜 사용하는 것인가?

 

특정 파일에 Setuid Bit가 설정되어 있다면 다른 사용자들이 

그 파일을 실행하였을 경우 실행되는 동안에는 실행시킨 사용자의 권한(아이디의 권한)이 아닌

파일의 소유자권한으로 실행이 되게 하는 것이다. 

 

#ll /etc/shadow
-r--------  1 root root 1170 Jun 10 21:14 /etc/shadow
(/etc/shadow 파일은 root만접근 가능하도록 permission 설정되어 있다.)


#which passwd
/usr/bin/passwd


#ll /usr/bin/passwd
-r-s--x--x  1 root root 18852 Mar  7  2005 /usr/bin/passwd
--->setuid 가 적용되어 있다. 그러므로 일반 유저가 password를 바꾸려고 할때는 소유자 즉,

      root의 권한을 갖게 된다.

 

◆ SetUID 테스트 

* apple로 로그인(일반계정 user).

$cat  /etc/passwd (사용자 계정이 등록되어 있는 파일)
---> O
$cat  /etc/shadow (사용자 암호가 등록되어 있는 파일)
---> X (/etc/shadow 파일은 permission 설정이 root만 보이도록 설정되어있다. apple은 일반유저이므로 불가)


$ ll /etc/passwd  /etc/shadow
-rw-r--r--  1 root root 1841 12월 11 02:43 /etc/passwd
-r--------  1 root root 1170  3월 15 07:14 /etc/shadow

 

$ cat /etc/shadow
-> 허가 거부됨

$ id
uid=500(apple) gid=500(apple) groups=500(apple)

 

$ passwd
---> passwd 명령어에 setuid 가 있어서 /etc/shadow 파일이 업데이트 된다.

       setuid 로 인하여 일반계정도 자신의 암호를 변경할 수 있다.

 

* root로 로그인
#ll  /usr/bin/passwd
-r-s--x--x  1 root root 21200  8월 22  2005 /usr/bin/passwd
--->실행권한이 없는 상태에서는 소문자 s 가 아니라 대문자 S 로 나타난다.

#chmod  u-s  /usr/bin/passwd

---> setuid 제거해보자.

 

 

#ll  /usr/bin/passwd
-r-x--x--x  1 root root 21200  8월 22  2005 /usr/bin/passwd

 

* 다시 apple로 로그인해서 테스트 해보면
$ passwd
passwd: Authentication token manipulation error
---> passwd 명령어에서 setuid 를 제거하면 일반계정은 password 변경시도시

        root의 권한을 얻을 수 없으므로 암호를 변경할 수 없다.

 

 

◆ passwd 권한 원래대로 설정
#ll  /usr/bin/passwd
#chmod  u+s  /usr/bin/passwd
#ll  /usr/bin/passwd

---> setuid 를 다시 설정하고 putty 에서 apple 의 암호를 변경할 때 안 되면 루트 계정에서 apple 의 암호를

 다시 설정하고 테스트 하면 된다.(setuid 를 제거하고 실행해서 오동작이 일어난다)

 

-----------------------------------------------------------------------------------------------------------------------------------

1. PAM(Pluggable Authentication Module: 착탈형 인증 모듈)이란?
사용자를 인증하고 그 사용자의 서비스에 대한 액세스를 제어하는 모듈화된 방법을 일컫는다. 
PAM은관리자가 응용프로그램들의 사용자인증방법을 선택할 수 있도록 해준다. 
즉 필요한 공유라이브러리의 묶음을 제공하여 PAM을 사용하는 응용프로그램을 재컴파일없이 인증 방법을 변경할 수 있다. 


2. PAM의 목적과 동작
리눅스에서 PAM프로젝트의 목적은 권한을 부여하는 소프트웨어의 개발과 안전하고 적정한 인증의 
개발을 분리하려는 데에 있다. 이것은 응용프로그램이 사용자 인증을 처리하기 위해 사용될 함수의 
라이브러리를 제공함으로써 가능하다. PAM라이브러리는 /etc/pam.d(또는 /etc/pam.conf)에서 각 시스
템에 맞게 설정하여, 각 시스템에서 사용가능한 인증 모듈을 통해 사용자의 인증 요구를 처리한다. 
모듈 자체는 /lib/security(또는 /usr/lib/security)에 위치하고 동적으로 로드가능한 오브젝트 파일
의 형태를 갖는다.


3. PAM의 설치
현재 대부분의 리눅스 시스템에 기본으로 설치되어 있으므로 설치는 생략한다. 
확인은 rpm -qi pam


4. PAM의 구성파일
(1) 개요: 기본적으로 PAM은 /etc/pam.d 디렉토리에 설치되어 있다. 이 디렉토리를 살펴본다. 인증
          과 관련된 많은 파일들이 존재하지만 그 중에 중요한 몇가지만 살펴보도록 한다.

(2) PAM파일의 구성문법
   1) 기본구조: 다음과 같이 구성되어 있다.
     type   control   module-path   module-arguments 
   2) 기본구조의 예
     [root@www /etc/pam.d]#cat login
     #%PAM-1.0
     auth       required     /lib/security/pam_securetty.so
     auth       required     /lib/security/pam_stack.so service=system-auth
     auth       required     /lib/security/pam_nologin.so
     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_console.so
   3) 구성의 종류
    ㄱ. type: 이 부분은 PAM에 어떤 타입의 인증이 사용될 것인지를 알려준다. 같은 타입의 모듈은
             쌓일 수 있고, 사용자에 인증되기 위한 다중 요구사항을 만족하도록 요청할 수 있다.
             다음과 같은 4개의 타입이 있다.
       - account: 계정은 사용자가 해당 서비스에 접근이 허용되었는지, 패스워드가 기간이 만료가 
                 되었는지를 결정한다.
       - auth: 주로 패스워드를 통하지만 생체인증과 같은 보다 정교한 방법을 통해서 사용자가 
              자신이 주장하는 사용자가 맞는지를 결정한다.
       - password: 패스워드는 사용자가 그들의 인증을 변경하도록 어떤 방법을 제공한다. 이것을 
                  결정하는 것이 패스워드이다.
       - session: 사용자가 인증받기 전후에 해야 할 것을 나타낸다. 사용자의 홈디렉토리를 마운
                 트/언마운트, 로그인/로그아웃 서비스를 제한하는 등의 포함한다.
    ㄴ. control: 통제를 담당하는 부분으로  PAM에 무엇을 해야할 지를 알려준다. 4가지의 형식이 
                있다.
       - requisite: 이 모듈을 이용하는 인증이 실패할 경우, 즉시 인증을 거부하도록 한다.
       - required: 인증이 거부되기 전에 비록 PAM이 이 서비스에 등록된 다른 모든 모듈들을 요구
                  함에도 불구하고 실패할 경우 인증을 거부하도록 한다.
       - sufficient: 비록 이전에 요청되어진 모듈이 실패하더라도 이 모듈에 의해서 인증이 성공할
                    경우, PAM은 인증을 승인한다.
       - optional : 이 모듈이 서비스에 대한 응용프로그램의 성공/실패에 중요하지 않다는 것을 의
                   미한다. 보통 PAM은 모듈들의 성공/실패 판단시에 이런 모듈은 무시한다. 그러나
                   이전/이후의 모듈들이 명확한 성공/실패가 없다면 이 모듈이 응용프로그램에게
                   주는 결과를 결정짓는다.
    ㄷ. module-path: 모듈경로는 PAM에게 어떤 모듈을 사용하고 그 경로를 알려준다. 대부분 PAM모
                    듈은 /lib/security에 있다.
    ㄹ. module-argument: 모듈-인수는 모듈에게 전달되는 인수를 나타낸다. 각각의 모듈은 각각의
                        인수를 가지고 있다. 

(3) /etc/pam.d 디렉토리와 인증
   1) 설명: /etc/pam.d 디렉토리는 리눅스 커널 2.4버전에서 사용하는 /etc/xinetd.d 디렉토리와
           유사하다. 특정한 서비스에 대한 요청이 오면 /etc/pam.d 디렉토리안의 파일의 설정을 
           보고 처리하며, 그 외의 서비스들은 /etc/pam.d/other에서 처리한다.

   2) 주요파일분석
    ㄱ. login: 슈퍼유저로 로그인할 수 있는 사용자 인증과 관련된 파일이다.
       -예) [root@mybestone /etc/pam.d]#cat /etc/pam.d/login
            #%PAM-1.0
            auth       required     /lib/security/pam_securetty.so
            // pam_securetty.so 모듈이 지정해놓은 보안 규칙을 만족해야만 로그인이 허용된다는 
            //뜻이다. 이 모듈은 /etc/securetty 파일에서 지정되어있는 tty에서 요청한 슈퍼유저
            //만 로그인을 허용한다.
            auth       required     /lib/security/pam_stack.so service=system-auth
            auth       required     /lib/security/pam_nologin.so
            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_console.so

    ㄴ. other: PAM에서 별도로 지정하지 않은 서비스에 대한 인증을 위한 참조하는 파일이다.
       - 예) [root@mybestone /etc/pam.d]#cat other
             #%PAM-1.0
             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. 주요 모듈에 대한 설명
(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

 

--------------------------------------------------------------------------------------------------------------

일정횟수 로그인 실패시 자동으로 해당 계정을 잠금처리하는 법

확인은 /var/log/faillog 또는 /var/log/tallylog를 통해볼수있거나 pam_tally명령어를 통해 확인 가능합니다

Centos 6.7 기준

/etc/pam.d/system-auth    파일에  아래처럼 내용을 추가한다.  deny가 4로 설정하면 실제로는 5번실패시 계정이 잠금처리됩니다

# vim /etc/pam.d/system-auth       
auth required pam_tally2.so onerr=succeed deny=4
account required pam_tally2.so onerr=succeed
:wq

최신OS의 경우 경로없이 pam_tally2.so 만입력해도 되지만 그렇지 않을 경우  /lib64/security/pam_tally2.so 처럼 절대경로까지 입력해야되요

 /lib/security/ (32비트의 경우 위치)

 /lib64/security/ (64비트일 경우 위치)

pam_tally.so 와 pam_tally2.so가 있으니 둘중 정상작동하는것으로 선택해야딥니다

pam_tally.so파일의 경로를 꼭 확인해야됩니다 그렇지 않을 경우 모든 원격접속이 차단될수도 있습니다

설정을 /etc/pam.d/system-auth 에 넣게 되면, 모든 종류의 접속에 적용되고,

/etc/pam.d/sshd 나 /etc/pam.d/vsftp 에 삽입하게되면, 특정 서비스(SSH,FTP)에만 적용됩니다.

 

-로그 파일 명 –

pam_tally.so 와 pam_tally2.so 의 로그파일명이 틀림
pam_tally.so –> /var/log/faillog
pam_tally2.so –> /var/log/tallylog

적용법은 재시작할필요없이 /etc/pam.d/system-auth파일만 수정하면 바로적용됩니다.

서버에 위와같이 설정을한뒤

 

  

5번정도 패스워드를 틀립니다

그후 맞는 패스워드를 입력해도 접속이되지 않습니다.

@@확인법@@

pam_tally2 명령어로 아래와 같이 확인 할수 있습니다

 

– 잠금 처리된 유저 초기화 방법
[root@localhost ~]# pam_tally2 –user test01 –reset   
Login Failures Latest failure From
test01        0
 

다시 올바른 패스워드를 입력후 접속하면 접속됨

 

-----------------------------------------------------------------------------------------------------------------------------------

1.3 계정 잠금 임계값 설정

 

 점검 분류 항목: 계정 관리

 세부 점검 항목: 계정 잠금 임계값 설정

 대상: 리눅스

 위험도: 

 관련 코드: U-03

 

(1) 취약점 개요

침입자에 의한 패스워드 *무작위 대입 공격(Brute Force Attack)이나 패스워드 추측 공격(Password Guessing) 발생 시 암호입력 실패 횟수를 적정하게 제한함으로써 자동공격을 차단하고 공격 시간을 지체시켜 패스워드 유출 위험을 줄일 수 있음.

무작위 대입 공격(Brute Force Attack): 컴퓨터로 암호를 해독하기 위해 가능한 모든 키를 하나하나 추론해 보는 시도를 말함.

 

(2) 판단기준

양호: 계정 잠금 임계값이 5 이하의 값으로 설정되어 있는 경우

취약: 계정 잠금 임계값이 설정되어 있지 않거나, 5 이하의 값으로 설정되지 않은 경우

 

(3) 조치방법

계정 잠금 임계값을 5 이하로 설정

 

(4) 보안 설정 방법

# cat /etc/pam.d/system-auth

auth required /lib/security/pam_tally.so deny=5 unlock_time=120 no_magic_root

account required /lib/security/pam_tally.so no_magic_root reset

 

no_magic_root : root 사용자에게 패스워드 잠금 설정을 적용하지 않음

deny=5 : 5회 입력 실패시 패스워드 잠금

unlock_time : 계정 잠김 후 마지막 계정 실패 시간부터 설정된 시간이 지나면 자동 계정

잠김 해제(단위 : )

reset : 접속 시도 성공 시 실패한 횟수 초기화

 

(5) 조치시 영향

Trusted Mode로 전환 시 파일시스템 구조가 변경되어 운영 중인 서비스에 문제가 발생할 수 있으므로 충분한 테스트를 거친 후 Trusted Mode로의 전환이 필요함.

 

 

(고객에게 설명)

무작위 대입법이나 패스워드 추측 공격에 대해서 자동화된 툴을 통해 공격하는 방법의 위험을 줄일 수 있다.

xhydra 

 



참고 : https://22hz.tistory.com/68

 

반응형

'OS' 카테고리의 다른 글

Windows NIC 재시작 명령어  (0) 2020.11.24
Windows server - Active Directory 메모 정리  (0) 2020.11.09
리눅스 시간 변환(실시간, 또는 그때그때)  (0) 2020.10.28
ubuntu ssh timeout 설정  (0) 2020.10.28
vim colorscheme 적용  (0) 2020.10.28