LINUX基线安全检测-服务器安全配置检测
- 前言
-
- 各模块检测如下
-
- 1、密码复杂度检测
- 2、rsyslog服务是否启用检测
- 3、禁止ROOT远程登录检测
- 4、禁止空密码登录检测
- 5、密码重用是否限制为5次检测
- 6、是否设置密码失效时间检测
- 7、密码修改最小间隔时间检测
- 8、密码过期警告时间是否大于等于7天检测
- 9、SSH访问是否受限制检测
- 10、SSH LogLevel设置为INFO检测
- 11、SSH的MaxAuthTries是否设置为小于等于6检测
- 12、禁用ssh端口转发检测
- 13、root是否为唯一的UID为0用户检测
- 14、root用户默认组的GID是否为0检测
- 15、SSH空闲超时间隔是否设置检测
- 16、用户禁止使用高危命令检测
- 17、普通用户禁止修改高危文件检测
前言
众所周知,服务器的安全配置是我们安全生产环境中很重要也是最为“硬性”的第一步;
譬如说,一个服务器创建好之后,它没有禁止空密码登录,那岂不是“人人都可以踩它两脚”,随便一个人都可以登录进去然后干一些“见不的人”的事情,因此,我们要打好第一枪,在第一步就要把一些小人卡在门外,在服务器创建好之后,立马进行安全配置检测,针对有问题的检测项进行修复处理;
以下则是我亲自编写测试上线使用的检测和修复脚本,如有不对的地方,欢迎大家留言,我会立马改正!!!
各模块检测如下
1、密码复杂度检测
系统版本:
CentOS7/8
内容:
把minlen(密码最小长度)设置为8-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4;
根据实际情况调整即可
检测方式:
!/usr/bin/env sh
echo "检测是否符合密码复杂度要求"
st1=`cat /etc/security/pwquality.conf | grep minlen| grep -v '#'`
st2=`cat /etc/security/pwquality.conf | grep minclass| grep -v '#'`
if [ -z "$st1" ] && [ -z "$st2" ]; then
echo "检测结果为:未设置密码复杂度"
elif [ `cat /etc/security/pwquality.conf | grep minlen| grep -v '#' |awk -F ' ' '{print $3}'` -gt 8 ] && [ `cat /etc/security/pwquality.conf | grep minclass| grep -v '#' |awk -F ' ' '{print $3}'` -gt 2 ]; then
echo "检测结果为:密码复杂度符合要求"
else
echo "检测结果为:密码复杂度不符合要求"
fi
2、rsyslog服务是否启用检测
系统版本:
CentOS7/8
内容:
确保rsyslog服务已启用,记录日志用于审计
检测方式:
#!/usr/bin/env sh
echo "检测rsyslog服务是否启用"
rsyslog="active(running)"
rsyslogstatus=`systemctl status rsyslog| grep Active | awk '{print$2$3}' `
if [ "$rsyslogstatus" == "$rsyslog" ]; then
echo "检测结果为:rsyslog服务已启用"
else
echo "检测结果为:rsyslog服务未启用"
fi
3、禁止ROOT远程登录检测
系统版本:
CentOS 6/7/8
内容:
/etc/ssh/sshd_config文件中PermitRootLogin应设置为:no
检测方式:
#!/usr/bin/env sh
echo "检测是否禁止ROOT远程登录"
set -e
cfgfile='/etc/ssh/sshd_config'
if [ "`cat ${cfgfile} | grep -E '^PermitRootLogin' | awk '{print $1}'`" == "#PermitRootLogin" -o "`cat ${cfgfile} | grep '^PermitRootLogin'`" == "" -o "`cat ${cfgfile} | grep '^PermitRootLogin' | awk '{print $2}'`" == "yes" ]
then
echo "检测结果为:未禁止root远程登录"
exit 1
else
echo "检测结果为:已禁止root远程登录"
exit 0
fi
4、禁止空密码登录检测
系统版本:
CentOS 6/7/
内容:
/etc/ssh/sshd_config文件中PermitEmptyPasswords应设置为:no
检测方式:
#!/usr/bin/env sh
echo "检测是否禁止空密码登录"
set -e
cfgfile='/etc/ssh/sshd_config'
if [ "`cat ${cfgfile} | grep 'PermitEmptyPasswords' | awk '{print $1}'`" == "#PermitEmptyPasswords" -o "`cat ${cfgfile} | grep 'PermitEmptyPasswords'`" == "" -o "`cat ${cfgfile} | grep 'PermitEmptyPasswords' | awk '{print $2}'`" == "yes" ]
then
echo "检测结果为:未禁止空密码登录"
exit 1
else
echo "检测结果为:已禁止空密码登录"
exit 0
fi
5、密码重用是否限制为5次检测
系统版本:
CentOS 6/7/
内容:
- password sufficient pam_unix.so: 这部分指定了当用户尝试更改密码时,应使用pam_unix.so模块来验证新密码。sufficient意味着如果这个模块成功验证了密码,那么密码更改操作就成功,不需要继续检查其他PAM模块。
- remember=5: 这个参数指定了密码策略应检查新密码与过去5次使用的密码是否重复。如果新密码与这5次中的任何一次重复,该策略将拒绝更改密码。
- 根据实际情况调整即可
检测方式:
#!/usr/bin/env sh
echo "检测密码重用是否限制为5次"
set -e
Authcfg='/etc/pam.d/password-auth /etc/pam.d/system-auth'
for filename in $