Linux基线安全检测-服务器安全配置检测

这篇具有很好参考价值的文章主要介绍了Linux基线安全检测-服务器安全配置检测。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

众所周知,服务器的安全配置是我们安全生产环境中很重要也是最为“硬性”的第一步;
譬如说,一个服务器创建好之后,它没有禁止空密码登录,那岂不是“人人都可以踩它两脚”,随便一个人都可以登录进去然后干一些“见不的人”的事情,因此,我们要打好第一枪,在第一步就要把一些小人卡在门外,在服务器创建好之后,立马进行安全配置检测,针对有问题的检测项进行修复处理;

以下则是我亲自编写测试上线使用的检测和修复脚本,如有不对的地方,欢迎大家留言,我会立马改正!!

各模块检测如下

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/
内容:

  1. password sufficient pam_unix.so: 这部分指定了当用户尝试更改密码时,应使用pam_unix.so模块来验证新密码。sufficient意味着如果这个模块成功验证了密码,那么密码更改操作就成功,不需要继续检查其他PAM模块。
  2. remember=5: 这个参数指定了密码策略应检查新密码与过去5次使用的密码是否重复。如果新密码与这5次中的任何一次重复,该策略将拒绝更改密码。
  3. 根据实际情况调整即可
    检测方式:
#!/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 remember=5 | grep pam_unix.so`" ]
then
echo "检测结果为:检测密码重用未限制为5次"
exit 1
else
echo "检测结果为:检测密码重用已限制为5次"
exit 0
fi
done

6、是否设置密码失效时间检测

系统版本:
CentOS 7/8
内容:
/etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间;
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "检测是否设置密码失效时间"
pass_max_days=`cat /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天范围内"
fi

7、密码修改最小间隔时间检测

系统版本:
CentOS 7/8
内容:
在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7:
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "检测是否设置修改密码最小间隔时间"
pass_min_days=`cat /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天范围内"
fi

8、密码过期警告时间是否大于等于7天检测

系统版本:
CentOS 7/8
内容:
密码过期警告时间应:大于等于7天;
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "检测密码过期告警时间是否大于等于7天"
set -e
cfgfile='/etc/login.defs'

if [ `grep -E '^PASS_WARN_AGE' ${cfgfile} | awk '{print $2}'` -ge 7 ]
then
echo "检测结果为:密码过期告警时间已设置大于等于7天"
exit 0
else
echo "检测结果为:密码过期告警时间未设置大于等于7天"
exit 1
fi

9、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'
sshstatus=`ps -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
fi

10、SSH LogLevel设置为INFO检测

系统版本:
CentOS 6/7/8
内容:
开启日志info日志格式可以记录很多的日志信息以便回溯,比如登录操作告警失败等信息
检测方式:

/usr/bin/env sh
echo "检测SSH LogLevel设置是否为INFO"
sshd_config='/etc/ssh/sshd_config'
log_level=`cat $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"
fi

11、SSH的MaxAuthTries是否设置为小于等于6检测

系统版本:
CentOS 6/7/8
内容:
用于指定SSH服务器允许客户端进行身份验证尝试的最大次数
根据实际情况调整即可
检测方式:

#!/usr/bin/env sh
echo "检测SSH的MaxAuthTries是否设置为小于等于4"
set -e
cfg='/etc/ssh/sshd_config'
cfgstatus1=`cat $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"
fi

12、禁用ssh端口转发检测

系统版本:
CentOS 6/7/8
内容:
GatewayPorts 设置no或者注释掉
检测方式:

#!/usr/bin/env sh
echo "检测是否禁用ssh端口转发功能"
result=`cat /etc/ssh/sshd_config | grep GatewayPorts | grep -v '#' | awk -F ' ' '{print$NF}'`

if [ "$result" == "no" ] | [ -z  "$result" ];then
   echo "检测结果为:已禁用ssh端口转发"
else
   echo "检测结果为:已启用ssh端口转发"
fi

13、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
fi

14、root用户默认组的GID是否为0检测

系统版本:
CentOS 6/7/8
内容:
root应为唯一的GID为0用户
检测方式:

#!/usr/bin/env sh
echo "检测ROOT是否GID为0的唯一用户"
set -e
cfgfile='/etc/passwd'
root_gid=`cat ${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
fi

15、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_key=`cat ${cfgfile} | grep ClientAliveInterval | awk '{print $1}'`
ClientAliveInterval_value=`cat ${cfgfile} | grep ClientAliveInterval | awk '{print $2}'`
ClientAliveCountMax_key=`cat ${cfgfile} | grep ClientAliveCountMax | awk '{print $1}'`
ClientAliveCountMax_value=`cat ${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小时)X2=36000秒(10小时)"
exit 0
else
echo "检测结果为:最大空闲时间未设置为18000秒(5小时)X2=36000秒(10小时)"
exit 1
fi
fi

16、用户禁止使用高危命令检测

系统版本:
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" ##禁止普通用户执行
permission="700"  # 替换为你期望的权限值,此值为仅支持root用户执行  
if [[ -f "$file1" && "$(stat -c '%a' "$file1")" == "$permission" ]]; then  
    echo "检测结果为:已禁止普通用户执行rz命令"
else
    echo "检测结果为:未禁止普通用户执行rz命令"    
fi  
  
if [[ -f "$file2" && "$(stat -c '%a' "$file2")" == "$permission" ]]; then  
    echo "检测结果为:已禁止普通用户执行sz命令"
else
    echo "检测结果为:未禁止普通用户执行sz命令"    
 
fi  
  
if [[ -f "$file3" && "$(stat -c '%a' "$file3")" == "$permission" ]]; then  
    echo "检测结果为:已禁止普通用户执行scp命令"
else
    echo "检测结果为:未禁止普通用户执行scp命令"     
fi  
  
if [[ -f "$file4" && "$(stat -c '%a' "$file4")" == "$permission" ]]; then  
    echo "检测结果为:已禁止普通用户执行yum命令"
else
    echo "检测结果为:未禁止普通用户执行yum命令"    
fi

if [[ -f "$file5" && "$(stat -c '%a' "$file5")" == "$permission" ]]; then  
    echo "检测结果为:已禁止普通用户执行rpm命令"
else
    echo "检测结果为:未禁止普通用户执行rpm命令"      
 
fi

17、普通用户禁止修改高危文件检测

系统版本:
CentOS 6/7/8
内容:
/etc/passwd权限为644
/etc/group权限为644
/etc/shadow权限为400
/etc/gshadow权限为400
/etc/hosts.deny权限为644
/etc/hosts.allow权限为644
根据实际情况调整即可
检测方式:文章来源地址https://www.toymoban.com/news/detail-843525.html

#!/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" ##禁止普通用户更改
permission1="644"  # 替换为你期望的权限值,此值为仅支持root用户更改  
permission2="400"  # 替换为你期望的权限值,即只有root用户可查看
if [[ -f "$file1" && "$(stat -c '%a' "$file1")" == "$permission1" ]]; then  
    echo "检测结果为:已禁止普通用户更改passwd文件"
else
    echo "检测结果为:未禁止普通用户更改passwd文件"    
fi  
if [[ -f "$file3" && "$(stat -c '%a' "$file3")" == "$permission1" ]]; then  
    echo "检测结果为:已禁止普通用户更改group文件"
else
    echo "检测结果为:未禁止普通用户更改group文件"    
fi  

if [[ -f "$file2" && "$(stat -c '%a' "$file2")" == "$permission2" ]]; then  
    echo "检测结果为:已禁止普通用户读取shadow文件"
else
    echo "检测结果为:未禁止普通用户读取shadow文件"    
 fi
if [[ -f "$file4" && "$(stat -c '%a' "$file4")" == "$permission2" ]]; then  
    echo "检测结果为:已禁止普通用户读取gshadow文件"
else
    echo "检测结果为:未禁止普通用户读取gshadow文件"    
fi  
if [[ -f "$file5" && "$(stat -c '%a' "$file5")" == "$permission2" ]]; then  
    echo "检测结果为:已禁止普通用户更改hosts.deny文件"
else
    echo "检测结果为:未禁止普通用户更改hosts.deny文件"    
fi  
if [[ -f "$file6" && "$(stat -c '%a' "$file6")" == "$permission2" ]]; then  
    echo "检测结果为:已禁止普通用户更改hosts.allow文件"
else
    echo "检测结果为:未禁止普通用户更改hosts.allow文件"    
fi  

到了这里,关于Linux基线安全检测-服务器安全配置检测的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网安云新品速递 | 移动应用安全检测服务,为App合规与安全保驾护航

    移动应用安全攻击层出不穷 近年来,移动应用安全攻击事件频发,衍生出的用户数据安全问题,也逐渐成为用户、社会,乃至整个国家高度重视的问题。立法层面上,数据安全保护不断加强;监管层面上,相关部门的监管力度也在不断加大。一旦发生移动应用安全问题,企业

    2024年02月11日
    浏览(33)
  • Linux——系统安全及应用(账号安全、su命令、PAM认证、sudo命令、开关机安全机制、系统弱口令检测、NMAP)

    文件无法被修改的原因:权限不够或者账号被锁住了 设置密码有效期 闲置600秒后自动注销 用途:Substitute User,切换用户 格式:su - 目标用户 root-任意用户,不验证密码 普通用户-其他用户,验证目标用户的密码 将允许使用su命令的用户加入wheel组 启用pam_wheel认证模块 [root@

    2024年01月23日
    浏览(44)
  • 信息服务上线渗透检测网络安全检查报告和解决方案4(网站风险等级评定标准、漏洞危害分级标准、漏洞安全建议)

    信息服务上线渗透检测网络安全检查报告和解决方案3(系统漏洞扫描、相对路径覆盖RPO漏洞、nginx漏洞修复) 信息服务上线渗透检测网络安全检查报告和解决方案2(安装文件信息泄漏、管理路径泄漏、XSS漏洞、弱口令、逻辑漏洞、终极上传漏洞升级) 信息服务上线渗透检测网络安

    2024年02月12日
    浏览(39)
  • Linux服务器安全设置

    参考文章: https://www.cnblogs.com/dadonggg/p/7977099.html https://linux.cn/article-2518-1.html https://www.136.la/nginx/show-83625.html 密码的复杂度越高,毋庸置疑,安全性肯定相对就越高。 编辑 /etc/pam.d/system-auth 文件,找到同时具有“password”和“pam_cracklib.so”字段并且附加有 “ucredit=-1 lcredit=-2

    2024年02月07日
    浏览(41)
  • Linux 服务器如何做好安全防护?

    Linux服务器安全技巧有: 网络安全重磅福利:入门进阶全套282G学习资源包免费分享! 1. 物理系统的安全性 配置BIOS,禁用从CD/DVD、外部设备、软驱启动。下一步,启用BIOS密码,同时启用GRUB的密码保护,这样可以限制对系统的物理访问。 2. 磁盘分区 使用不同的分区很重要,

    2024年02月22日
    浏览(42)
  • linux服务器远程控制安全配置

    一、设置linux服务器用户登录错误次数锁定配置         为防止遭受恶意暴力破解,设置账户登录尝试次数并进行锁定,有效保护账户的安全。         1、登录失败处理功能策略(服务器终端)                 注:用户锁定期间,无论在输入正确还是错误的密码

    2024年04月12日
    浏览(33)
  • 如何保护linux服务器远程使用的安全

    服务器安全是一个非常敏感的问题,因服务器远程入侵导致数据丢失的安全问题频频出现,一旦服务器入侵就会对个人和企业造成巨大的损失。因此,在日常使用服务器的时候,我们需要采取一些安全措施来保障服务器的安全性。 目前服务器系统使用到比较多的就是Linux,大

    2024年01月25日
    浏览(41)
  • 【安全狗】linux免费服务器防护软件安全狗详细安装教程

    在费用有限的基础上,复杂密码+云服务器基础防护+常见端口替换+安全软件,可以防护绝大多数攻击 官方提供了两个下载方式,本文采用的是 方式2 wget安装 方法1:在安全狗官网直接下载软件安装包(.tar.gz 格式:safedog_linux64.tar.gz) 方法2:采取wget方式下载发布包: tar xzv

    2024年02月16日
    浏览(41)
  • Linux中FTP服务器搭建与安全配置

    FTP(File Transfer Protocol)是一种用于在计算机之间传输文件的标准协议。在Linux系统上,您可以搭建自己的FTP服务器,以便轻松共享和传输文件。本文将提供详细的步骤和示例代码,帮助大家安全地搭建和配置Linux FTP服务器。 首先,需要选择并安装一个FTP服务器软件。在Linux中

    2024年02月04日
    浏览(40)
  • 利用Ansible实现批量Linux服务器安全配置

    1.摘要 在上一篇初步利用Ansible实现批量服务器自动化管理文章中, 我初步实现了通过编写清单和剧本来实现多台服务器的自动化管理,在本章节中, 我将利用Ansible的剧本来实现更实用、更复杂一点的功能, 主要功能包括三个:1.同时在三台服务器中增加IP访问控制,只允许192.168.2

    2024年01月20日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包