适用于系统版本:CentOS 6/7/8的基线安全检测脚本

#!/bin/bash
#适用于系统版本:CentOS 6/7/8
echo "----------------检测是否符合密码复杂度要求----------------"
#把minlen(密码最小长度)设置为8-32位,把minclass(至少包含小写字母、大写字母、数字、特殊字符等4类字符中等3类或4类)设置为3或4;
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

echo "----------------检测rsyslog服务是否启用----------------"
#确保rsyslog服务已启用,记录日志用于审计
rsyslog="active(running)"
rsyslogstatus=`systemctl status rsyslog| grep Active | awk  '{print$2$3}' `
if [ "$rsyslogstatus" == "$rsyslog" ]; then
echo "检测结果为:rsyslog服务已启用"
else
echo "检测结果为:rsyslog服务未启用"
fi


echo "----------------检测是否禁止ROOT远程登录----------------"
#/etc/ssh/sshd_config文件中PermitRootLogin应设置为:no
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远程登录"

else
echo "检测结果为:已禁止root远程登录"

fi

echo "----------------检测是否禁止空密码登录----------------"
#/etc/ssh/sshd_config文件中PermitEmptyPasswords应设置为:no
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 "检测结果为:未禁止空密码登录"

else
echo "检测结果为:已禁止空密码登录"

fi

echo "----------------检测密码重用是否限制为5次----------------"
#password sufficient pam_unix.so: 这部分指定了当用户尝试更改密码时,应使用pam_unix.so模块来验证新密码。sufficient意味着如果这个模块成功验证了密码,那么密码更改操作就成功,不需要继续检查其他PAM模块。
#remember=5: 这个参数指定了密码策略应检查新密码与过去5次使用的密码是否重复。如果新密码与这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次"
else
echo "检测结果为:检测密码重用已限制为5次"

fi
done

echo "----------------检测是否设置密码失效时间----------------"
#/etc/login.defs 中将 PASS_MAX_DAYS 参数设置为 60-180之间;
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

echo "----------------检测是否设置修改密码最小间隔时间----------------"
#在 /etc/login.defs 中将 PASS_MIN_DAYS 参数设置为7-14之间,建议为7:
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

echo "----------------检测密码过期告警时间是否大于等于7天----------------"
#密码过期警告时间应:大于等于7天;
set -e
cfgfile='/etc/login.defs'

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

else
echo "检测结果为:密码过期告警时间未设置大于等于7天"

fi

echo "----------------检测SSH访问是否受限制----------------"
#/etc/ssh/sshd_config文件中应存以下其中之一:
#AllowUsers <userlist>
#AllowGroups <grouplist>
#DenyUsers <userlist>
#DenyGroups <grouplist>
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访问未受限制"
else
echo "检测结果为:SSH访问已受限制"
fi

echo "----------------检测SSH LogLevel设置是否为INFO----------------"
#开启日志info日志格式可以记录很多的日志信息以便回溯,比如登录操作告警失败等信息
sshd_confi='/etc/ssh/sshd_config'
log_level=`cat $sshd_confi | grep "LogLevel"| grep -v '^#'| awk -F ' ' '{print$1}'`
if [ -z "$log_level" ]; then
echo "检测结果为:SSH LogLevel设置为INFO"
elif [ "`cat $sshd_confi | grep "LogLevel"| grep -v '^#LogLevel' | awk '{print $2}'`" == "INFO" ]; then
echo "检测结果为:SSH LogLevel设置为INFO"
else
echo "检测结果为:SSH LogLevel设置为$log_level"
fi

echo "----------------检测SSH的MaxAuthTries是否设置为小于等于4----------------"
#用于指定SSH服务器允许客户端进行身份验证尝试的最大次数
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

echo "----------------检测是否禁用ssh端口转发功能----------------"
#GatewayPorts 设置no或者注释掉
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

echo "----------------检测ROOT是否UID为0的唯一用户----------------"
#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的唯一用户"

else
echo "检测结果为:root不是uid为0的唯一用户"

fi

echo "----------------检测ROOT是否GID为0的唯一用户----------------"
#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的唯一用户"

else
echo "检测结果为:root不是gid为0的唯一用户"

fi

echo "----------------SSH空闲超时间隔是否设置----------------"
#/etc/ssh/sshd_config文件中 ClientAliveInterval应设置为:等于18000 ClientAliveCountMax应设置为:等于2
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 "检测结果为:未设置最大空闲时间"

else
if [ ${ClientAliveInterval_value} -eq 18000 -a ${ClientAliveCountMax_value} -eq 2 ]
then
echo "检测结果为:最大空闲时间已设置为18000秒(5小时)X2=36000秒(10小时)"

else
echo "检测结果为:最大空闲时间未设置为18000秒(5小时)X2=36000秒(10小时)"

fi
fi

echo "----------------检测是否禁止普通用户执行高危命令----------------"  
#/usr/bin/yum 权限为700 /usr/bin/rpm权限为700 /usr/bin/rz权限为700 /usr/bin/sz权限为700 /usr/bin/scp权限为700
#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

echo "----------------检测是否禁用普通用户修改高危文件----------------"
#/etc/passwd权限为644/etc/group权限为644/etc/shadow权限为400/etc/gshadow权限为400/etc/hosts.deny权限为644/etc/hosts.allow权限为644
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  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/457712.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JVM及垃圾回收算法

一、JVM 1、jvm的内存组成 五大内存区域,分1.7和1.8 1.堆内存:引用类型的数据,内部组成:1.新生代(伊甸区和幸存者区)2.老年代。该区域经常发生垃圾回收的操作 堆是JVM中最大的一块内存区域,用…

mac安全干净卸载Anaconda3

使用which python显示当前使用的是/Users/username/anaconda3/bin/python 现在想卸载Anaconda,恢复使用mac系统自带的Python 删除隐藏文件目录 rm -rf ~/.anaconda修改~/.bash_profile文件,将anaconda相关删除 也有可能不是~/.bash_profile而是~/.zs…

声卡喊话IP喇叭,IP网络吸顶天花喇叭

声卡喊话IP喇叭,IP网络吸顶天花喇叭 SV-7043VP是一款ip/sip网络吸顶喇叭,具有10/100M以太网接口,从网络接口接收网络的音频数据后播放。本网络吸顶喇叭可以与其他广播主机、服务器软件和采播主机配合使用,实现音频的播放&#xf…

【DL经典回顾】深度学习概述

深度学习概述 一、引言 在过去的几年里,深度学习已经从学术研究的领域走向了主流,彻底改变了我们对人工智能的认识和应用。这种强大的技术,以其独特的能力模仿人脑处理和分析复杂数据的方式,不仅在科学界引起了革命,…

ThingsBoard Edge 安装部署

文章目录 一、概述1.官方文档2.部署说明3.安装准备3.1. 克隆服务器3.2.安装 Docker3.3.安装 Java 113.4.安装 PostgreSQL3.5.下载安装包 二、安装部署1.创建 Edge 实例2.创建数据库3.Edge 服务安装3.1.安装服务3.2.配置 Edge3.3.运行安装脚本3.4.重新启动服务 4.访问 Edge5.故障…

基于PHP的数字化档案管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的数字化档案管理系统 一 介绍 此数字化档案管理系统基于原生PHP,MVC架构开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 php(mvc)mysqlbootstrapphpstudyvscode 二 功能 …

django-comment-migrate 模型注释的使用

django-comment-migrate 的使用 django-comment-migrate 是一个 Django 应用,用于将模型注释自动迁移到数据库表注释中。它可以帮助您保持数据库表注释与模型定义的一致性,并提高代码的可读性。 安装 要使用 django-comment-migrate,您需要…

Arcgis新建位置分配求解最佳商店位置

背景 借用Arcgis帮助文档中的说明:在本练习中,您将为连锁零售店选择可以获得最大业务量的商店位置。主要目标是要将商店定位在人口集中地区附近,因为这种区域对商店的需求量较大。设立这一目标的前提是假设人们往往更多光顾附近的商店,而对于距离较远的商店则较少光顾。您…

C++学习随笔(5)——类和对象的深窥

本章我们来学习一下更深入了解一下类和对象! 目录 1.类的6个默认成员函数 2. 构造函数 2.1 概念 2.2 特性 3.析构函数 3.1 概念 3.2 特性 4. 拷贝构造函数 4.1 概念 4.2 特征 5.赋值运算符重载 5.1 运算符重载 5.2 赋值运算符重载 5.3 前置和后置重载…

一键切割,激发无限创意:体验全新图片批量编辑器

在数字创意的时代,图片编辑成为了表达个性和创造力的关键。然而,传统的图片编辑工具常常让人望而生畏,复杂的操作和高门槛的技术要求使得许多人望而却步。现在,我们为您带来一款全新的图片批量编辑器,只需一键切割&…

vivo统一接入网关VUA转发性能优化实践

作者:vivo 互联网服务器团队 - Qiu Xiangcun 本文将探讨如何通过使用Intel QuickAssist Technology(QAT)来优化VUA的HTTPS转发性能。我们将介绍如何使用QAT通过硬件加速来提高HTTPS转发的性能,并探讨QAT在不同应用场景中的表现。最…

Abaqus三维梯度泰森多边形插件:Voronoi FGM 3D(Mesh)- AbyssFish

插件介绍 Voronoi FGM 3D (Mesh) V1.0 - AbyssFish 插件可在Abaqus软件内生成梯度分布的三维泰森多边形长方体模型。插件可用于梯度功能材料(Functionally Gradient Materials)、梯度纳米金属材料、梯度金属结构等梯度晶体模型的建立。模型基于背景网格实现,通过单…

分布式数据处理MapReduce简单了解

文章目录 产生背景编程模型统计词频案例 实现机制容错机制Master的容错机制Worker的容错机制 产生背景 MapReduce是一种分布式数据处理模型和编程技术,由Google开发,旨在简化大规模数据集的处理。产生MapReduce的背景: 数据量的急剧增长&…

RAID技术知识详解到RAID 10的linux实现过程

1.RAID技术简介 RAID(Redundant Array of Independent Disks)独立磁盘冗余阵列。通俗来说就是将多个硬盘通过软件或硬件结合成虚拟单台大容量的硬盘使用。 RAID技术的特点: 可以自动检测故障硬盘; 可以重建硬盘坏道的资料&…

深度学习模型部署-番外-TVM机器学习编译

什么是机器学习编译器/AI编译? 图片来自知乎大佬的文章 机器学习编译是指:将模型从训练形式转变为部署模式 训练模式:使用训练框架定义的模型部署模式:部署所需要的模式,包括模型每个步骤的实现代码,管理资…

html--宠物

文章目录 htmljscss html <!DOCTYPE html> <html lang"en" > <head><meta charset"UTF-8"><title>CodePen - Spaceworm</title><script> window.requestAnimFrame (function() {return (window.requestAnimat…

简单的思考(一):MATLAB实现心形线

今天刷B站的时候看见了&#xff1a; 于是想着自己能不能也做出来 clc;clear; % 定义x的范围 x -2:0.01:2;% 初始化图形 figure; set(gcf,position,[0,0,800,600],color,w); h1 plot(x,abs(x).^(2/3) (0.9*sqrt((3.3-x.^2))).*sin(0.1*pi*x),r,LineWidth,3); hold on xlim(…

HAProxy——高性能负载均衡器

目录 一.常见的Web集群调度器 二.HAProxy基本介绍 1.HAProxy是什么&#xff1f; 2.HAProxy的特性 3.HAProxy常用的8种负载均衡调度算法 3.1 轮询&#xff1a;RR&#xff08;Round Robin&#xff09; 3.2 最小连接数&#xff1a;LC&#xff08;Least Connections&#xff…

基于JAVA的教务系统小程序的设计与实现【附项目源码】分享

基于JAVA的教务系统小程序的设计与实现: 源码地址&#xff1a;https://download.csdn.net/download/qq_41810183/88842782 一、引言 随着信息技术的不断发展&#xff0c;教务管理工作逐渐走向数字化、智能化。为了提高教务管理效率&#xff0c;方便师生查询教务信息&#xff…

ChatGPT 插件Plugin集合

ChatGPT的插件功能推出一段时间了&#xff0c;陆陆续续的上架了得有200了。 但是其中大部分都不是很好用&#xff0c;并且找起来也复杂。 推荐一个不知名热心人做的导航页。 ChatGPT Plugins Overview 基本上集合了所有的插件&#xff0c;并且还在实时更新中。 需要升级4.0&a…