CentOS6、7 安全基线检查脚本

#!/bin/bash

#变量
Server=`cat /etc/redhat-release`
Server_vsersion=`cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/'`
Server_Name=`hostname`
sixIP=`ifconfig  |egrep "inet addr" |grep Bcast |awk  '{print $2}' |awk -F: '{print $2}'`
sevenIP=`ifconfig |grep inet |grep broadcast |awk '{print $2}'`
Date=`date`
Super_account=`awk -F: '($3 == 0) { print $1 }' /etc/passwd`
Null_pass=`awk -F: '($2 == "") { print $1 }' /etc/shadow`
Pass_Max_Day=`cat /etc/login.defs  |grep PASS_MAX_DAYS |grep -e  [0-9].* |awk '{print $2}'`
Pass_Min_Day=`cat /etc/login.defs | grep PASS_MIN_DAYS |grep -e  [0-9].* |awk '{print $2}'`
Pass_Min_Len=`cat /etc/login.defs | grep PASS_MIN_LEN |grep -e [0-9].* |awk '{print $2}'`
Pass_Warn_Age=`cat /etc/login.defs | grep PASS_WARN_AGE  |grep -e [0-9].* |awk '{print $2}'`
Root_Path=`echo $PATH | sed 's|:|\n|g' | egrep "^\.$"`
Etc_Password=`ls -l  /etc/passwd |awk '{print $1}'`
Etc_Shadow=`ls -l /etc/shadow |awk '{print $1}'`
Etc_Group=`ls -l /etc/group |awk '{print $1}'`
Etc_Services=`ls -l /etc/services |awk '{print $1}'`
Etc=`ls -ld /etc/ |awk '{print $1}'`
Etc_Security=`ls -ld /etc/security |awk '{print $1}'`
Etc_Rcd=`ls -ld /etc/rc.d |awk '{print $1}'`
Etc_rsyslog_1=`cat /etc/rsyslog.conf | grep authpriv.*  |grep /var/log/secure |awk '{print $1}' `
Etc_rsyslog_2=`cat /etc/rsyslog.conf | grep authpriv.*  |grep /var/log/secure |awk '{print $2}' `
Remote_root_login=`cat /etc/ssh/sshd_config | grep PermitRootLogin | head -n 1 |grep PermitRootLogin |awk '{print $2}'`

#进度条
num=''
for ((i=0;$i<=100;i+=2))
do
    printf "正在检测:[%-50s]%d%%\r" $num $i
    sleep 0.1

    num=#$num
done
echo
#系统信息
echo "-----------------------------------------------------------------"
echo "系统:$Server"
if [[ $Server_vsersion = 6 ]];then
  echo "主机名:$Server_Name              IP:$sixIP "
elif [[ $Server_vsersion = 7 ]];then
  echo "主机名:$Server_Name              IP:$sevenIP "
else
  echo "非版本6或7"
fi
echo "时间:$Date"
echo "-----------------------------------------------------------------"

# 1. 账户管理
# 1.1 超级账户管理
#要求:保证系统中只有唯一的超级账户 root,卲只有 root 账户的 UID 为 0


if [ "$Super_account"  == root ] ;then
  echo "1. 仅有一个root用户,符合要求"
#UID 为 0 的账户卲系统超级管理员账户,拥有系统所有权限,默认情况下只有 root账户的 UID 为 0
else
  echo -e  "\033[31m1. 不仅有一个root用户,不符合要求\033[0m"
fi


# 1.2 空口令账户管理
if [ -z $Null_pass ] ;then
  echo "2. 系统中不存在空口令账户"
else
  echo -e "\033[31m2. 系统中存在空口令账户 $Null_pass\033[0m"
fi


# 2. 口令管理
# 2.1 口令最长使用期限
if (( $Pass_Max_Day > 90 )) ;then
  echo -e  "\033[31m3. 口令最长使用期限不符合要求,口令最长使用时间为: $Pass_Max_Day 天\033[0m"
else
  echo "3. 口令最长使用期限符合要求"
fi


# 2.2 口令更改最小间隔
if (( $Pass_Min_Day == 0  )) ;then
  echo -e "\033[31m4. 设置口令更改最小间隔天数不符合基线要求,建议改为1天\033[0m"
else
  echo "4. 设置口令更改最小间隔天数: $Pass_Min_Day 天"
fi


# 2.3 口令最小长度
if (( $Pass_Min_Len < 8)) ;then
  echo -e "\033[31m5. 口令最小长度不符合基线要求,口令最小长度为:$Pass_Min_Len ,建议大于8\033[0m"
else
  echo "5. 口令最小长度符合基线要求"
fi


# 2.4 口令过期前警告天数


if (( $Pass_Warn_Age < 14 )) ;then
  echo -e "\033[31m6. 口令过期前警告天数不符合基线要求,现警告天数为:$Pass_Warn_Age ,建议大于14\033[0m"
else
  echo "6. 口令过期前警告天数符合基线要求"
fi
# 3. 认证授权
# 3.1 root 账户环境变量管理


if [ "$Root_Path" != '.'  ];then
  echo "7. root 账户环境变量管理符合安全要求"
  #root 账户环境变量路径中丌应该包含”.”
else
  echo -e "\033[31m7. root 账户环境变量管理不符合安全要求\033[0m"
fi


# 3.2 重要文件权限设置
# /etc/passwd 的权限为-rw-r--r--,卲 644
# /etc/shadow 的权限为----------,卲 000
# /etc/group 的权限为-rw-r--r--,卲 644
# /etc/services 的权限为-rw-r--r--,卲 644


if [ "$Etc_Password" == "-rw-r--r--" ];then
  echo "8. /etc/passwd符合要求 644"
else
  echo -e "\033[31m8. /etc/passwd不符合要求 644\033[0m"
fi


if [ "$Etc_Shadow" == "----------" ];then
  echo "9. /etc/shadow 符合要求 000"
else
  echo -e "\033[31m9. /etc/shadow 不符合要求 000\033[0m"
fi


if [ "$Etc_Group" == "-rw-r--r--" ];then
  echo "10. /etc/group符合要求 644"
else
  echo -e "\033[31m10. /etc/group不符合要求 644\033[0m"
fi
if [ "$Etc_Services" == "-rw-r--r--." ];then
  echo "11. /etc/services符合要求 644"
else
  echo -e "\033[31m11. /etc/services不符合要求 644\033[0m"
fi




# 3.3 重要文件夹权限设置
# /etc 的权限为 drwxr-xr-x,卲 755
# /etc/security 的权限为 drwxr-xr-x,卲 755
# /etc/rc.d 的权限为 drwxr-xr-x,卲 755


if [ "$Etc" == "drwxr-xr-x." ];then
  echo "12. /etc符合要求 755"
else
  echo -e  "\033[31m12. /etc不符合要求 755\033[0m"
fi


if [ "$Etc_Security" == "drwxr-xr-x." ];then
  echo "13. /etc/security符合要求 755"
else
  echo -e "\033[31m13. /etc/security不符合要求 755\033[0m"
fi


if [ "$Etc_Rcd" == "drwxr-xr-x." ];then
  echo "14. /etc/rc.d符合要求 755"
else
  echo -e "\033[31m14. /etc/rc.d不符合要求 755\033[0m"
fi


# umask
# 4.日志审计
# syslog 日志审计
if [ "$Etc_rsyslog_1" == 'authpriv.*'  -a  "$Etc_rsyslog_2" == "/var/log/secure" ];then
  echo "15. syslog 日志审计符合要求 authpriv.*   /var/log/secure"
else
  echo -e "\033[31m15. syslog 日志审计不符合要求\033[0m"
fi


# 5.远程管理
#远程地址管理通过iptables控制,不做检测
if [ "$Remote_root_login"  == no  ];then
  echo "16. 已经限制 root 通过 SSH 远程登录"
elif [ "$Remote_root_login"  == yes  ];then
  echo -e "\033[31m16. root 可以用过 SSH 远程登录,不符合要求\033[0m"
else
  echo "16. 配置有误"
fi


echo "-----------------------------------------------------------------"

#SNMP未启用不做检测
#服务管理需自行检测
#Centos6命令为:chkconfig --list
#Centos7命令为:systemctl list-unit-files
#如需检测自行使用命令对比
#无关账户管理命令:cut -d: -f1 /etc/passwd   将此账户列表不检测结果对比,查看是否存在不工作无兲的账户,如果存在此类账户,表明丌符合安全要求。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值