2017년 6월 9일 금요일

[보안] 리눅스 패스워스 사용정책

centos rhel
패스워드 사용 정책에 관한 포스팅을 하겠습니다.

주요 파일은 /etc/login.defs , /etc/pam.d/common-password 입니다.

 

오늘 포스팅 주제에 관해서는 제 환경이 우분투이라는 점입니다.

오늘 다룰 주제에서 레드헷 계열과는 조금 다른점이 있어서 이점 양해바랍니다.

 

유저가 접속 할때 ID/PW 를 입력하여 접속을 시도합니다.

모든 사용자가 거처야할 필수 코스죠

가장 기본적인 코스인 만큼 그에 대한 정책은 제각각입니다.

 

그중 가장 기본적인 세가지의 설정에 대해서 언급하겠습니다.

 

패스워드 최소길이 (PASS_MIN_LEN)

최대 사용기간(PASS_MAX_DAYS)

최소 사용기간(PASS_MIN_DAYS)

 

이렇게 있습니다. 정해져있는 값은 없습니다.

PASS_MIN_LEN      8 (자리)

PASS_MAX_DAYS   60 (일)

PASS_MIN_DAYS    7 (일)

위와 같은 설정으로 잡겠습니다.

 

패스워드 정책에 대해서는 위와 같은 설정 파일을 설정해주는 방법과 

각 기관에 따른 정책(ex. 패스워드의 영문/숫자/특수문자 조합 및 길이) 두가지로 나뉠수 있습니다.

 

아래 그림을 보시면 주석(#)이 아닌 세개의 줄을 보실수 있습니다.

위의 2개는 앞서 설명드렸고, PASS_WARN_AGE는 암호 만료일 지정시 만료전 경고를 보여주기 시작하는 일 수 입니다.

]# vi /etc/login.defs

명령어를 사용하여 아래의 숫자를 원하는 수로 변경해주시면 됩니다.

[ 그림 1 - /etc/login.defs 설정 파일 일부분 ]

 

PASS_MIN_LEN의 경우 앞서 말씀드린것과 같이 우분투 계열은 다른 설정 파일에 존재합니다.

 

기본적으로 대부분 아래 그림과 같이 설정되어 있을겁니다. 빨간부분 중간에 그림 3과 같이 입력해 주시면 됩니다.

[ 그림 2 - /etc/pam.d/common-password /설정 파일 일부분(수정 전) ]

 

아래 그림처럼 min=8 을 입력해주시면 8자리 이상의 패스워드를 입력하셔야 합니다.

[ 그림 3 - /etc/pam.d/common-password /설정 파일 일부분(수정 후) ]

 

그럼 위를 토대로 스크립트를 작성하겠습니다.

 #!/bin/bash

PASSWD_CONF=/etc/login.defs

PASSWD_LEN=/etc/pam.d/common-password

 

echo "########## 1. 계정관리 - 1.4 패스워드 사용규칙 적용 ######################"

### 항목구분 ###

echo "    1. 계정관리"

### 항목명 ###

echo "    1.4 패스워드 사용규칙 적용"

### 위험도 ###

echo "    위험도 : 상"

### 기준설명 ###

echo "    [기준]"

echo "     가. 패스워드 사용규칙 설정 "

echo "          패스워드 최소길이, 최대 사용기간, 최소 사용기간, 계정잠금 임계값 설정"

echo "         # vi /etc/login.defs를 실행하여 아래와 같은 설정 적용 (단위: 일)"

echo "           PASS_MIN_LEN  8"

echo "           PASS_MAX_DAYS  60"

echo "           PASS_MIN_DAYS  7" 

echo "         Ubuntu의 경우 길이제한 부분은 # vi /etc/pam.d/common-password를 실행하여 아래와 같은 설정을 적용"

echo "         (수정 전) password      [success=1  default=ignore]    pam_unix.so  obscure sha512"

echo "         (수정 후) password      [success=1  default=ignore]    pam_unix.so  obscure min=8 sha512"

echo "      나. 패스워드 설정"

echo "           문자/숫자/특수문자의 2종류 조합으로 8자리 이상, 3종류으로 10자리 이상"

echo "※ 가, 나 항목 모두 적용 해야 함"

 

### 현재설정 ###

echo "/etc/login.defs 설정 확인 "

if [ `cat $PASSWD_CONF | grep -v "^#" | grep 'PASS_MIN_LEN' | awk '{if ($2 < 8) print $0}' | wc -l` -eq 1 ]

then

echo ">>취약: 패스워드 최소길이가 8보다 작게 설정되어 있습니다."

cat $PASSWD_CONF | grep -v "^#" | grep 'PASS_MIN_LEN' | awk '{if ($2 < 8) print $0}' 

else

echo ">>양호: 패스워드 최소길이가 8 이상으로 설정되어 있습니다."

fi

if [ `cat $PASSWD_CONF | grep -v "^#" | grep 'PASS_MAX_DAYS' | awk '{if ($2 > 70) print $0}' | wc -l` -eq 1 ]

then

echo ">>취약: 패스워드 최대 사용기간이 70일보다 크게 설정되어 있습니다."

cat $PASSWD_CONF | grep -v "^#" | grep 'PASS_MAX_DAYS' | awk '{if ($2 > 70) print $0}' 

else

echo ">>양호: 패스워드 최대 사용기간이 70일 이하로 설정되어 있습니다."

fi

if [ `cat $PASSWD_CONF | grep -v "^#" | grep 'PASS_MIN_DAYS' | awk '{if ($2 < 7) print $0}' | wc -l` -eq 1 ]

then

echo ">>취약: 패스워드 최소 사용기간이 7일보다 작게 설정되어 있습니다." 

cat $PASSWD_CONF | grep -v "^#" | grep 'PASS_MIN_DAYS' | awk '{if ($2 < 7) print $0}' 

else

echo ">>양호: 패스워드 최소 사용기간이 7일 이상으로 설정되어 있습니다."

fi

echo "/etc/pam.d/common-password 설정 확인 "

if [ `cat $PASSWD_LEN | grep -v "^#" | grep 'min' | wc -l` -eq 1 ]

then

echo "양호 : 패스워드 최소 길이가 설정되어 있습니다."

cat $PASSWD_LEN | grep -v "^#" | grep 'min'

else

echo " 취약 : 패스워드 최소 길이가 설정되어 있지않습니다."

fi

 

 

위와 같은 방법으로 하시면 됩니다.

이번 스크립트의 경우, 경우의 수가 많기 때문에 각자에 맞게 변형해주시면 될것같습니다.

 

이상으로 마치겠습니다.

댓글 없음:

댓글 쓰기