网站制作工具 简易,聊城市住房和城乡建设局网站首页,网页设计制作网站总结,谷城网站制作LINUX基线安全检测-服务器安全配置检测 前言各模块检测如下1、密码复杂度检测2、rsyslog服务是否启用检测3、禁止ROOT远程登录检测4、禁止空密码登录检测5、密码重用是否限制为5次检测6、是否设置密码失效时间检测7、密码修改最小间隔时间检测8、密码过期警告时间是否大于等于7… 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 检测是否符合密码复杂度要求
st1cat /etc/security/pwquality.conf | grep minlen| grep -v #
st2cat /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 检测结果为:密码复杂度不符合要求
fi2、rsyslog服务是否启用检测
系统版本 CentOS7/8 内容 确保rsyslog服务已启用记录日志用于审计 检测方式
#!/usr/bin/env sh
echo 检测rsyslog服务是否启用
rsyslogactive(running)
rsyslogstatussystemctl status rsyslog| grep Active | awk {print$2$3}
if [ $rsyslogstatus $rsyslog ]; then
echo 检测结果为:rsyslog服务已启用
else
echo 检测结果为:rsyslog服务未启用
fi3、禁止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
fi4、禁止空密码登录检测
系统版本 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
fi5、密码重用是否限制为5次检测
系统版本 CentOS 6/7/ 内容
password sufficient pam_unix.so: 这部分指定了当用户尝试更改密码时应使用pam_unix.so模块来验证新密码。sufficient意味着如果这个模块成功验证了密码那么密码更改操作就成功不需要继续检查其他PAM模块。remember5: 这个参数指定了密码策略应检查新密码与过去5次使用的密码是否重复。如果新密码与这5次中的任何一次重复该策略将拒绝更改密码。根据实际情况调整即可 检测方式
#!/usr/bin/env sh
echo 检测密码重用是否限制为5次
set -e
Authcfg/etc/pam.d/password-auth /etc/pam.d/system-auth
for filename in ${Authcfg}
do
if [ -z grep -E password ${filename} | grep sufficient | grep remember5 | grep pam_unix.so ]
then
echo 检测结果为:检测密码重用未限制为5次
exit 1
else
echo 检测结果为:检测密码重用已限制为5次
exit 0
fi
done6、是否设置密码失效时间检测
系统版本 CentOS 7/8 内容 /etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间 根据实际情况调整即可 检测方式
#!/usr/bin/env sh
echo 检测是否设置密码失效时间
pass_max_dayscat /etc/login.defs | grep PASS_MAX_DAYS | grep -v #
if [ -z $pass_max_days ]; then
echo 检测结果为:未设置密码失效时间
elif [ cat /etc/login.defs | grep PASS_MAX_DAYS | grep -v #| awk {print $2} -gt 180 ] || [ cat /etc/login.defs | grep PASS_MAX_DAYS | grep -v #| awk {print $2} -lt 60 ]; then
echo 检测结果为:设置密码失效时间不在60-180天范围内
else
echo 检测结果为:设置密码失效时间在60-180天范围内
fi7、密码修改最小间隔时间检测
系统版本 CentOS 7/8 内容 在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7 根据实际情况调整即可 检测方式
#!/usr/bin/env sh
echo 检测是否设置修改密码最小间隔时间
pass_min_dayscat /etc/login.defs | grep PASS_MIN_DAYS | grep -v #
if [ -z $pass_min_days ]; then
echo 检测结果为:未设置修改密码最小间隔时间
elif [ cat /etc/login.defs | grep PASS_MIN_DAYS | grep -v #| awk {print $2} -gt 14 ] || [ cat /etc/login.defs | grep PASS_MAX_DAYS | grep -v #| awk {print $2} -lt 7 ]; then
echo 检测结果为:设置修改密码最小间隔时间不在7-14天范围内
else
echo 检测结果为:设置修改密码最小间隔时间在7-14天范围内
fi8、密码过期警告时间是否大于等于7天检测
系统版本 CentOS 7/8 内容 密码过期警告时间应大于等于7天 根据实际情况调整即可 检测方式
#!/usr/bin/env sh
echo 检测密码过期告警时间是否大于等于7天
set -e
cfgfile/etc/login.defsif [ grep -E ^PASS_WARN_AGE ${cfgfile} | awk {print $2} -ge 7 ]
then
echo 检测结果为:密码过期告警时间已设置大于等于7天
exit 0
else
echo 检测结果为:密码过期告警时间未设置大于等于7天
exit 1
fi9、SSH访问是否受限制检测
系统版本 CentOS 6/7/8 内容 /etc/ssh/sshd_config文件中应存以下其中之一 AllowUsers userlist AllowGroups grouplist DenyUsers userlist DenyGroups grouplist 检测方式
#!/usr/bin/env sh
echo 检测SSH访问是否受限制
set -e ##返回任何非0状态即退出脚本执行
sshd_config/etc/ssh/sshd_config
sshstatusps -ef | grep sshd | grep -v grep | awk -F {print $8$9}
if [ -z $sshstatus ]
then
echo 检测结果为:未开启ssh服务
exit 2
fi
if [ -z grep -E ^AllowUsers|^AllowGroups|^DenyUsers|^DenyGroups ${sshd_config} ]
then
echo 检测结果为:SSH访问未受限制
exit 1
else
echo 检测结果为:SSH访问已受限制
exit 0
fi10、SSH LogLevel设置为INFO检测
系统版本 CentOS 6/7/8 内容 开启日志info日志格式可以记录很多的日志信息以便回溯比如登录操作告警失败等信息 检测方式
/usr/bin/env sh
echo 检测SSH LogLevel设置是否为INFO
sshd_config/etc/ssh/sshd_config
log_levelcat $sshd_config | grep LogLevel| grep -v #
if [ -z $log_level ]; then
echo 检测结果为:SSH LogLevel设置为INFO
elif [ cat $sshd_config | grep LogLevel| grep -v # | awk {print $2} INFO ]; then
echo 检测结果为:SSH LogLevel设置为INFO
else
echo 检测结果为:SSH LogLevel设置为$log_level
fi11、SSH的MaxAuthTries是否设置为小于等于6检测
系统版本 CentOS 6/7/8 内容 用于指定SSH服务器允许客户端进行身份验证尝试的最大次数 根据实际情况调整即可 检测方式
#!/usr/bin/env sh
echo 检测SSH的MaxAuthTries是否设置为小于等于4
set -e
cfg/etc/ssh/sshd_config
cfgstatus1cat $cfg | grep MaxAuthTries | grep -v #| awk -F {print$1}
if [ -z $cfgstatus1 ]
then
echo 检测结果为:未设置此参数
elif [ cat $cfg | grep MaxAuthTries | grep -v #| awk -F {print$2} -le 6 ]
then
echo 检测结果为:已设置为小于等于6
else
echo 检测结果为:未设置为小于等于6
fi12、禁用ssh端口转发检测
系统版本 CentOS 6/7/8 内容 GatewayPorts 设置no或者注释掉 检测方式
#!/usr/bin/env sh
echo 检测是否禁用ssh端口转发功能
resultcat /etc/ssh/sshd_config | grep GatewayPorts | grep -v # | awk -F {print$NF}if [ $result no ] | [ -z $result ];thenecho 检测结果为:已禁用ssh端口转发
elseecho 检测结果为:已启用ssh端口转发
fi13、root是否为唯一的UID为0用户检测
系统版本 CentOS 6/7/8 内容 root应为唯一的UID为0用户 检测方式
#!/usr/bin/env sh
echo 检测ROOT是否UID为0的唯一用户
set -e
cfgfile/etc/passwd
if [ cat passwd | awk -F : $3 0{print $1}|wc -l -eq 1 -a cat passwd | awk -F : $3 0{print $1} root ]
then
echo 检测结果为:root是uid为0的唯一用户
exit 0
else
echo 检测结果为:root不是uid为0的唯一用户
exit 1
fi14、root用户默认组的GID是否为0检测
系统版本 CentOS 6/7/8 内容 root应为唯一的GID为0用户 检测方式
#!/usr/bin/env sh
echo 检测ROOT是否GID为0的唯一用户
set -e
cfgfile/etc/passwd
root_gidcat ${cfgfile}|grep -E ^root | awk -F : {print $4}
if [ ${root_gid} -eq 0 ]
then
echo 检测结果为:root是gid为0的唯一用户
exit 0
else
echo 检测结果为:root不是gid为0的唯一用户
exit 1
fi15、SSH空闲超时间隔是否设置检测
系统版本 CentOS 6/7/8 内容 /etc/ssh/sshd_config文件中 ClientAliveInterval应设置为等于18000 ClientAliveCountMax应设置为等于2 根据实际情况调整即可 检测方式
#!/usr/bin/env sh
echo SSH空闲超时间隔是否设置
set -e
cfgfile/etc/ssh/sshd_config
ClientAliveInterval_keycat ${cfgfile} | grep ClientAliveInterval | awk {print $1}
ClientAliveInterval_valuecat ${cfgfile} | grep ClientAliveInterval | awk {print $2}
ClientAliveCountMax_keycat ${cfgfile} | grep ClientAliveCountMax | awk {print $1}
ClientAliveCountMax_valuecat ${cfgfile} | grep ClientAliveCountMax | awk {print $2}
if [ ${ClientAliveInterval_key} -o ${ClientAliveInterval_key} #ClientAliveInterval -o ${ClientAliveCountMax_key} -o ${ClientAliveCountMax_key} #ClientAliveCountMax ]
then
echo 检测结果为:未设置最大空闲时间
exit 1
else
if [ ${ClientAliveInterval_value} -eq 18000 -a ${ClientAliveCountMax_value} -eq 2 ]
then
echo 检测结果为:最大空闲时间已设置为18000秒(5小时)X236000秒(10小时)
exit 0
else
echo 检测结果为:最大空闲时间未设置为18000秒(5小时)X236000秒(10小时)
exit 1
fi
fi16、用户禁止使用高危命令检测
系统版本 CentOS 6/7/8 内容 /usr/bin/yum 权限为700 /usr/bin/rpm权限为700 /usr/bin/rz权限为700 /usr/bin/sz权限为700 /usr/bin/scp权限为700 根据实际情况调整即可 检测方式
#!/bin/bash
echo 检测是否禁止普通用户执行高危命令
#file1/usr/bin/rz 禁止普通用户上传
file2/usr/bin/sz ##禁止普通用户下载(办公网与运维网场景不一样可能需要开放)
file4/usr/bin/yum ##禁止普通用户执行
file5/usr/bin/rpm ##禁止普通用户执行
permission700 # 替换为你期望的权限值此值为仅支持root用户执行
if [[ -f $file1 $(stat -c %a $file1) $permission ]]; then echo 检测结果为:已禁止普通用户执行rz命令
elseecho 检测结果为:未禁止普通用户执行rz命令
fi if [[ -f $file2 $(stat -c %a $file2) $permission ]]; then echo 检测结果为:已禁止普通用户执行sz命令
elseecho 检测结果为:未禁止普通用户执行sz命令 fi if [[ -f $file3 $(stat -c %a $file3) $permission ]]; then echo 检测结果为:已禁止普通用户执行scp命令
elseecho 检测结果为:未禁止普通用户执行scp命令
fi if [[ -f $file4 $(stat -c %a $file4) $permission ]]; then echo 检测结果为:已禁止普通用户执行yum命令
elseecho 检测结果为:未禁止普通用户执行yum命令
fiif [[ -f $file5 $(stat -c %a $file5) $permission ]]; then echo 检测结果为:已禁止普通用户执行rpm命令
elseecho 检测结果为:未禁止普通用户执行rpm命令 fi17、普通用户禁止修改高危文件检测
系统版本 CentOS 6/7/8 内容 /etc/passwd权限为644 /etc/group权限为644 /etc/shadow权限为400 /etc/gshadow权限为400 /etc/hosts.deny权限为644 /etc/hosts.allow权限为644 根据实际情况调整即可 检测方式
#!/usr/bin/env sh
echo 检测是否禁用普通用户修改高危文件
file1/etc/passwd ##禁止普通用户更改
file2/etc/shadow ##禁止普通用户查看
file3/etc/group ##禁止普通用户更改
file4/etc/gshadow ##禁止普通用户查看
file5/etc/hosts.deny ##禁止普通用户更改
file6/etc/hosts.allow ##禁止普通用户更改
permission1644 # 替换为你期望的权限值此值为仅支持root用户更改
permission2400 # 替换为你期望的权限值,即只有root用户可查看
if [[ -f $file1 $(stat -c %a $file1) $permission1 ]]; then echo 检测结果为:已禁止普通用户更改passwd文件
elseecho 检测结果为:未禁止普通用户更改passwd文件
fi
if [[ -f $file3 $(stat -c %a $file3) $permission1 ]]; then echo 检测结果为:已禁止普通用户更改group文件
elseecho 检测结果为:未禁止普通用户更改group文件
fi if [[ -f $file2 $(stat -c %a $file2) $permission2 ]]; then echo 检测结果为:已禁止普通用户读取shadow文件
elseecho 检测结果为:未禁止普通用户读取shadow文件 fi
if [[ -f $file4 $(stat -c %a $file4) $permission2 ]]; then echo 检测结果为:已禁止普通用户读取gshadow文件
elseecho 检测结果为:未禁止普通用户读取gshadow文件
fi
if [[ -f $file5 $(stat -c %a $file5) $permission2 ]]; then echo 检测结果为:已禁止普通用户更改hosts.deny文件
elseecho 检测结果为:未禁止普通用户更改hosts.deny文件
fi
if [[ -f $file6 $(stat -c %a $file6) $permission2 ]]; then echo 检测结果为:已禁止普通用户更改hosts.allow文件
elseecho 检测结果为:未禁止普通用户更改hosts.allow文件
fi