#!/bin/bash
. /root/bin/print.sh
echo "######################################################################"
echo " 리눅스 패스워드 정책 점검 - 사용규칙 분석결과 "
### 항목명 ###
echo " 1. 패스워드 사용규칙 적용"
### 위험도 ###
echo " 위험도 : 상"
### 기준설명 ###
echo " [진단결과]"
echo "######################################################################"
cat << EOF
[패스워드 정책 점검 리스트]
(1) 패스워드의 최소 길이 설정 8글자 이상(/etc/login.defs(PASS_MIN_LEN))
- /etc/login.defs(PASS_MIN_LEN)
(2) 패스워드는 문자 2글자 다른 문자(숫자 또는 특수문자) 1 글자 이상
- /etc/pam.d/passwd(/etc/pam.d/system-auth(pam_cracklib.so))
(3) 패스워드의 Min Age는 7 설정
- /etc/login.defs(PASS_MIN_DAYS)
(4) 패스워드 Max Age는 90 설정
- /etc/login.defs(PASS_MAX_DAYS)
(5) 패스워드 히스토리 기능, 이전 암호 4개 까지 저장
- /etc/pam.d/passwd, /etc/pam.d/system-auth(pam_unix.so(remember=N))
(6) root 사용자는 원격(EX: telnet)에서 로그인 금지, 시스템 관리자는 user01 사용자로 로그인하여 su 명령어를 통해 swiching 하도록 설정(단, user01 사용자만 su 명령어를 사용해야 한다.)
- /etc/securetty, /etc/pam.d/login(pam_securetty.so), - /etc/pam.d/su(pam_wheel.so), /etc/group
(7) user02 사용자는 /sbin/shutdown 명령어만 사용가능(단, su 명령어를 사용하지 않고 sudo 명령어를 사용하도록 해야 한다.)
- /etc/sudoers(user02, %user02)
(8) 일반 사용자가 원격에서 로그인하는 경우 5번 암호 실패 후 lock 되고 20분후에 다시 시도할 수 있도록 설정한다.
- /etc/pam.d/login, /etc/pam.d/system-auth(pam_tally.so)
EOF
echo "######################################################################"
echo
echo "##################진단 결과############################################"
### 항목명 ###
echo " 1. 패스워드의 최소 길이 설정 8글자 이상"
### 위험도 ###
echo " 위험도 : 상"
### 기준설명 ###
echo " [진단결과]"
NUM=`grep PASS_MIN_LEN /etc/login.defs | \
grep -v '^#' | \
grep '^PASS_MIN_LEN' | \
awk '{print $2}'`
if [ $NUM -ge 8 ] ; then
print_good "패스워드 최소 길이가 8자 이상으로 설정되어 있습니다. [GOOD]:)"
else
print_error "패스워드 최소 길이가 8자 미만으로 설정되어 있습니다. [WARM]:("
print_info "패스워드 정책 설정파일을 수정하여 패스워드 최소 길이를 8자 이상으로 설정하시오."
echo " # vi /etc/login.defs /PASS_MIN_LEN 8 으로 설정."
fi
echo
### 항목명 ###
echo " 2. 패스워드는 문자 2글자 다른 문자(숫자 또는 특수문자) 1 글자 이상"
### 위험도 ###
echo " 위험도 : 상"
### 기준설명 ###
echo " [진단결과]"
cat /etc/pam.d/system-auth | grep "^password requisite pam_cracklib.so" > /dev/null 2>&1
if [ $? -eq 0 ] ; then
print_good "적합한 패스워드 정책을 사용 중입니다. [GOOD]:)"
else
print_error "패스워드 정책이 올바르게 되어 있지 않습니다. [WARM]:("
print_info "관련 수정 경로 # vi /etc/pam.d/system-auth"
echo "password requisite pam_cracklib.so try_first_pass retry=3 type= minlen=8 dcredit=-1
ucredit=-1 lcredit=-1 ocredit=-1"
fi
echo
### 항목명 ###
echo " 3. 패스워드의 Min Age는 7 설정"
### 위험도 ###
echo " 위험도 : 상"
### 기준설명 ###
echo " [진단결과]"
NUM=`grep PASS_MIN_DAYS /etc/login.defs | grep -v '^#' | grep '^PASS_MIN_DAYS' | awk '{print $2}'`
if [ $NUM -ge 1 ] ; then
print_good "패스워드 최소 사용기간이 7 로 설정되어 있습니다. [GOOD]:)"
else
print_error "패스워드 최소 사용기간이 설정되어 있지 않습니다. [WARM]:("
print_info "패스워드 정책설정 파일을 수정하시오. (Min Age 7로 설정)"
echo " # vi /etc/login.defs /PASS_MIN_DAYS 7 로 설정."
fi
echo
### 항목명 ###
echo " 4. 패스워드 Max Age는 90 설정"
### 위험도 ###
echo " 위험도 : 상"
### 기준설명 ###
echo " [진단결과]"
NUM=`grep PASS_MAX_DAYS /etc/login.defs | \
grep -v '^#' | \
grep '^PASS_MAX_DAYS' | \
awk '{print $2}'`
if [ $NUM -le 90 ] ; then
print_good "패스워드 최대 사용기간이 90일 이하로 설정되어 있습니다."
else
print_error "패스워드 최대 사용기간이 90일 이하로 설정되어 있지 않습니다."
print_info "패스워드 정책설정 파일을 수정하시오. (Max Age 90으로 설정)"
echo " => vi /etc/login.defs 파일 열고 /PASS_MAX_DAYS 검색 후 90 으로 설정."
fi
echo
### 항목명 ###
echo " 5. 패스워드 히스토리 기능, 이전 암호 4개 까지 저장"
### 위험도 ###
echo " 위험도 : 상"
### 기준설명 ###
echo " [진단결과]"
echo
### 항목명 ###
echo " 6. root 사용자는 원격(EX: telnet)에서 로그인 금지"
### 위험도 ###
echo " 위험도 : 상"
### 기준설명 ###
echo " [진단결과]"
grep ^pts /etc/securetty >/dev/null 2>&1
if [ $? -eq 0 ] ; then
print_error "root 직접 접속이 허용되었거나, 원격서비스를 사용 중 입니다."
print_info "vi /etc/securetty 파일에서 pts 주석처리."
else
print_good "원격 서비스를 사용하지 않고 있거나, 접속이 차단 되어 있습니다."
fi
echo
### 항목명 ###
echo " 7. user02 사용자는 /sbin/shutdown 명령어만 사용가능"
### 위험도 ###
echo " 위험도 : 상"
### 기준설명 ###
echo " [진단결과]"
cat /etc/pam.d/su | grep "pam_wheel.so"| grep "^#" > /dev/null 2>&1
if [ $? -eq 1 ] ; then
print_good "su 명령어를 제한하고 있습니다."
else
print_error "su 명령어를 모든 사용자가 사용하도록 설정되어 있습니다."
print_info "LINUX PAM 모듈을 이용한 설정 방법"
cat << EOF
"\"/etc/pam.d/su\"" 파일을 아래와 같이 (주석제거)
auth sufficient /lib/security/pam_rootok.so
auth required /lib/security/pam_wheel.so debug group=wheel
EOF
fi
#cat /etc/pam.d/su | grep 'pam_wheel.so' | grep "required" | grep -v '^#' | wc -l
#if [ `cat /etc/pam.d/su | grep 'pam_wheel.so' | grep "required" | grep -v '^#' | wc -l` -eq 0 ]
echo
if [ `cat /etc/sudoers | grep "^user02" | grep "/sbin/shutdown" | wc -l` -eq 0 ]
then
print_error "user02 사용자가 모든 sudo 명령어를 사용하도록 설정되어 있습니다."
print_info "특정 사용자에게 제한적인 sudo 명령어를 사용"
cat << EOF
"/etc/sudoers 에 user02 ALL=(ALL) /sbin/shutdown 내용 추가"
/etc/sudoers파일은 ro(read only)이기 때문에 퍼미션 설정을 해 주어야 한다.
EOF
else
print_good "user02 사용자에 대한 sudo /sbin/shutdown 명령어 설정이 되어있습니다."
fi
echo
### 항목명 ###
echo " 8. 로그인 실패 후 암호 실패 후 lock "
### 위험도 ###
echo " 위험도 : 상"
### 기준설명 ###
echo " [진단결과]"
cat /etc/pam.d/system-auth | grep "^account required pam_tally2.so" > /dev/null 2>&1
if [ $? -eq 0 ]; then
print_good "계정 잠금 임계값이 5 이하의 값으로 설정되어 있는 경우입니다."
else
print_error "계정 잠금 임계값이 설정되어 있지 않거나, 5 이하의 값으로 설정되지 않은 경우 입니다."
print_info "vi /etc/pam.d/system-auth 확인."
echo "auth required pam_tally2.so no_magic_root deny=5 reset unlock_time=1200"
echo "account required pam_tally2.so no_magic_root"
fi
'Learning > └◆리눅스 서버 보안' 카테고리의 다른 글
02_로그보안 02_로그 분석 (리눅스침해사고) (0) | 2017.03.14 |
---|---|
02_로그보안 01_Log Server Guide (0) | 2017.03.14 |
01_사용자/그룹이 없는 파일에 대해서 (0) | 2017.02.20 |
01_관리자의 잘못된 PATH 변수 설정 (0) | 2017.02.20 |