Linux 基線檢查,安全加固腳本

#!/bin/bash
# Author:韓偉
# Date: 2019-12-29
# 實現對用戶密碼策略的設定,如密碼最長有效期等
date=`date +%Y-%m-%d`
read -p "是否設置密碼策略[y/n]:" Y
if [ "$Y" == "y" ];then
	read -p  "設置密碼最多可多少天不修改:" A
	read -p  "設置密碼修改之間最小的天數:" B
	read -p  "設置密碼最短的長度:" C
	read -p  "設置密碼失效前多少天通知用戶:" D
	cp /etc/login.defs /etc/login.defs.${date}
	sed -i '/^PASS_MAX_DAYS/c\PASS_MAX_DAYS   '$A'' /etc/login.defs
	sed -i '/^PASS_MIN_DAYS/c\PASS_MIN_DAYS   '$B'' /etc/login.defs
	sed -i '/^PASS_MIN_LEN/c\PASS_MIN_LEN     '$C'' /etc/login.defs
	sed -i '/^PASS_WARN_AGE/c\PASS_WARN_AGE   '$D'' /etc/login.defs
else
	break
fi
echo "已設置好密碼策略......"

read -p "是否設置密碼強度[y/n]:" Y
if [ "$Y" == "y" ];then
	read -p "定義新密碼中必須要有幾個字符和舊密碼不同:" AA
	read -p "設置新密碼的最小長度:" BB
	read -p "設定新密碼中可以包含的大寫字母的最大數目。-1 至少一個:" CC
	read -p "設定新密碼中可以包含的小寫字母的最大數目-1 至少一個:" DD
	read -p "設定新密碼中可以包含的數字的最大數目-1 至少一個: " EE
	cp /etc/pam.d/system-auth /etc/pam.d/system-auth.${date}
	sed -i '/pam_pwquality.so/c\password    requisite     pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type=  difok='$AA' minlen='$BB' ucredit='$CC' lcredit='$DD' dcredit='$EE'' /etc/pam.d/system-auth
else
	break
fi
echo "已設置密碼強度"

# 對用戶登錄輸入錯誤密碼次數做限制
n=`cat /etc/pam.d/sshd | grep "auth required pam_tally2.so "|wc -l`
if [ $n -gt 0 ];then
echo "已經設置了錯誤密碼限制,請覈實"
fi
read -p "是否設置錯誤密碼登錄限制[y/n]: " Y
if [ "$Y" == "y" ];then
	read -p  "請輸入限制次數: "  num
	read -p "請輸入鎖定時間(s):"  time
	echo $num $time
	cp /etc/pam.d/sshd /etc/pam.d/sshd.${date}
	sed -i '/%PAM-1.0/a\auth required pam_tally2.so deny='${num}' unlock_time='$time' even_deny_root root_unlock_time='$time'' /etc/pam.d/sshd
	sed -n '2,6p' /etc/pam.d/sshd
else
	break
fi

echo "限制次數設定爲'$num' 鎖定時間 '$time' "
##設置歷史命令保存條數和賬戶超時時間
read -p "設置歷史命令保存條數和賬戶超時時間[y/n]:" Y
if [ "$Y" == "y" ];then
	read -p "設置歷史命令保存條數:" E
	read -p "設置賬戶自動註銷時間:" F
	cp /etc/profile /etc/profile.${date}
	sed -i '/^HISTSIZE/c\HISTSIZE='$E'' /etc/profile
	sed -i '/^HISTSIZE/a\TMOUT='$F'' /etc/profile
else
	break
fi
echo "設置歷史命令保存條數爲'$E'   賬戶超時時間爲'$F'"

##設置只有指定用戶組才能使用su命令切換到root用戶
read -p " 設置只有指定用戶組才能使用su命令切換到root用戶 [y/n]:" Y
if [ "$Y" == "y" ];then
	cp /etc/pam.d/su /etc/pam.d/su.${date}
	sed -i '/pam_wheel.so use_uid/c\auth            required        pam_wheel.so use_uid ' /etc/pam.d/su
	n=`cat /etc/login.defs | grep SU_WHEEL_ONLY | wc -l`
	if [ $n -eq 0 ];then
	echo SU_WHEEL_ONLY yes >> /etc/login.defs
	fi
else
	break
fi
# 對系統中的用戶做檢查,加固系統
echo "系統中有登錄權限的用戶有:"
awk -F: '($7=="/bin/bash"){print $1}' /etc/passwd
echo "********************************************"
echo "系統中UID=0的用戶有:"
awk -F: '($3=="0"){print $1}' /etc/passwd
echo "********************************************"
N=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
echo "系統中空密碼用戶有:$N"
if [ $N -eq 0 ];then
 echo "恭喜你,系統中無空密碼用戶!!"
 echo "********************************************"
else
 i=1
 while [ $N -gt 0 ]
 do
    None=`awk -F: '($2==""){print $1}' /etc/shadow|awk 'NR=='$i'{print}'`
    echo "------------------------"
    echo $None
    echo "必須爲空用戶設置密碼!!"
    passwd $None
    let N--
 done
 M=`awk -F: '($2==""){print $1}' /etc/shadow|wc -l`
 if [ $M -eq 0 ];then
  echo "恭喜,系統中已經沒有空密碼用戶了!"
 else
echo "系統中還存在空密碼用戶:$M"
 fi
fi
##對重要的文件進行鎖定,即使ROOT用戶也無法刪除
echo "對重要文件鎖定:/etc/passwd /etc/shadow /etc/gshadow"
read -p "警告:此腳本運行後將無法添加刪除用戶和組!!確定輸入Y,取消輸入N;Y/N:" i
case $i in
      [Y,y])
            chattr +i /etc/passwd
            chattr +i /etc/shadow
            chattr +i /etc/group
            chattr +i /etc/gshadow
            echo "鎖定成功!"
;;
      [N,n])
            chattr -i /etc/passwd
            chattr -i /etc/shadow
            chattr -i /etc/group
            chattr -i /etc/gshadow
            echo "取消鎖定成功!!"
;;
       *)
            echo "請輸入Y/y or  N/n"
esac
發佈了14 篇原創文章 · 獲贊 2 · 訪問量 5460
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章