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
위와 같은 방법으로 하시면 됩니다.
이번 스크립트의 경우, 경우의 수가 많기 때문에 각자에 맞게 변형해주시면 될것같습니다.
이상으로 마치겠습니다.
댓글 없음:
댓글 쓰기