Centos主机检查脚本

 使用方法:

将脚本保存为 CentOS_syscheck.sh

添加执行权限:

chmod +x CentOS_syscheck.sh

执行脚本:

./CentOS_syscheck.sh

#!/bin/bash

# 设置颜色变量
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m' # 重置颜色

# 生成分隔线
separator() {
    echo -e "${BLUE}=======================================================${NC}"
}

# 系统基本信息检查
system_info() {
    echo -e "\n${GREEN}>>> 系统基本信息检查${NC}"
    separator
    echo "主机名       : $(hostname)"
    echo "操作系统版本 : $(cat /etc/redhat-release)"
    echo "内核版本     : $(uname -r)"
    echo "当前时间     : $(date "+%Y-%m-%d %H:%M:%S")"
    echo "上次启动时间  : $(date -d "$(awk -F. '{print $1}' /proc/uptime) second ago" +"%Y-%m-%d %H:%M:%S")"
    echo "系统运行时间 : $(uptime | awk -F, '{print $1}')"
}

# CPU检查
cpu_check() {
    echo -e "\n${GREEN}>>> CPU检查${NC}"
    separator
    echo "CPU型号    : $(lscpu | grep 'Model name' | cut -d':' -f2 | xargs)"
    echo "物理核心数  : $(lscpu | grep 'Core(s)' | head -1 | awk '{print $4}')"
    echo "逻辑核心数  : $(nproc)"
    echo "当前负载    : $(uptime | awk -F 'average:' '{print $2}')"
}

# 内存检查
memory_check() {
    echo -e "\n${GREEN}>>> 内存检查${NC}"
    separator
    free -h | awk '
        /Mem/{
            print "总内存     : " $2
            print "已用内存   : " $3
            print "可用内存   : " $7
        }
        /Swap/{
            print "交换分区   : " $2
            print "已用交换   : " $3
        }'
}

# 硬盘检查
disk_check() {
    echo -e "\n${GREEN}>>> 硬盘检查${NC}"
    separator
    df -h | awk '
        BEGIN {
            print "挂载点\t\t总大小\t已用\t可用\t使用率"
        }
        /^\/dev/ {
            printf "%-15s %-6s %-6s %-6s %-4s\n", $6, $2, $3, $4, $5
        }' | column -t
}

# 网卡检查
network_check() {
    echo -e "\n${GREEN}>>> 网络接口检查${NC}"
    separator
    for interface in $(ip -o link show | awk -F': ' '{print $2}' | grep -v lo); do
        echo "接口名称  : $interface"
        echo "IP地址    : $(ip -o -4 addr show $interface | awk '{print $4}')"
        echo "MAC地址   : $(ip link show $interface | awk '/link\/ether/ {print $2}')"
        echo "连接速度  : $(ethtool $interface 2>/dev/null | grep Speed | awk '{print $2}')"
        echo "连接状态  : $(ip link show $interface | grep -o 'state [A-Z]*' | awk '{print $2}')"
        separator
    done
}

# 主函数
main() {
    clear
    echo -e "\n${YELLOW}====== 开始系统检查 ======${NC}"

    system_info
    cpu_check
    memory_check
    disk_check
    network_check

    echo -e "\n${YELLOW}====== 检查完成 ======${NC}"
}

# 执行主函数
main

注意事项:

需要root权限获取完整的网络接口信息

网络速度检测依赖ethtool工具,如果未安装请执行:

yum install -y ethtool

如果报错./check.sh: /bin/bash^M: bad interpreter: No such file or directory

通常是因为脚本文件中含有 Windows 风格的换行符(CR LF,即 ^M),而不是 Unix/Linux 系统所需的换行符(LF)。这通常发生在将 Windows 上的脚本文件直接传输到 Linux 系统上时。

sed -i 's/\r$//' CentOS_syscheck.sh

也可以使用 Notepad++ 或其他支持 Unix/Linux 样式的换行符的编辑器打开并保存该文件。

在 Notepad++ 中,你可以通过以下步骤转换换行符:

打开文件,点击顶部菜单的 “编辑” -> “EOL 转换” -> “UNIX/OSX 格式”

<think>我们注意到用户要求提供CentOS安全基线检查脚本,并且根据之前的引用,用户可能希望获得一个自动化脚本,用于检查CentOS系统的安全配置是否符合基线要求。由于引用中提到了CentOS8和CentOS7,我们将编写一个适用于CentOS7和8的脚本(注意CentOS8已停服,但可能仍在使用)。脚本检查多个安全配置项,并给出是否符合基线的判断。 脚本设计思路: 1. 检查项目包括:账户与口令、认证授权、协议安全、日志审计、文件权限、服务安全等。 2. 每个检查项输出检查结果(通过/警告/失败)以及详细信息。 3. 为了兼容CentOS7和8,我们使用通用的命令和配置文件路径。 注意:由于安全基线可能因不同安全等级要求(如等保)而有所不同,本脚本以常见的安全加固要求为基础。 我们将编写一个Shell脚本,逐项检查并输出结果。 由于脚本较长,我们将分模块编写: 1. 账户与口令 2. 认证授权 3. 协议安全 4. 日志审计 5. 文件权限 6. 服务安全 同时,为了不破坏原有系统,本脚本只进行检查,不进行修改。 下面开始编写脚本:</think>### CentOS 安全基线检查脚本 以下是一个完整的 CentOS 安全基线检查脚本,适用于 CentOS 7/8 系统。该脚本检查关键安全配置项,包括账户安全、SSH 配置、文件权限、服务安全等,并输出详细检查报告: ```bash #!/bin/bash # CentOS Security Baseline Check Script # 适用于 CentOS 7/8 系统安全合规检查 # 最后更新: 2023-12-01 echo "=============================================" echo " CentOS 安全基线检查脚本 v1.2" echo "=============================================" echo "检查时间: $(date)" echo "主机名: $(hostname)" echo "IP 地址: $(hostname -I)" echo "内核版本: $(uname -r)" echo "=============================================" # 结果输出文件 REPORT_FILE="/tmp/centos_security_report_$(date +%Y%m%d).txt" echo "安全检查报告 - $(date)" > $REPORT_FILE echo "=============================================" >> $REPORT_FILE # 函数:检查结果记录 log_result() { echo -e "$1 [$2]" | tee -a $REPORT_FILE } # 1. 账户与口令安全 echo -e "\n\033[1;34m[+] 检查账户与口令安全\033[0m" pass_max_days=$(grep PASS_MAX_DAYS /etc/login.defs | awk '{print $2}') if [ $pass_max_days -le 90 ]; then log_result "1.1 密码有效期检查: 符合(<=90天)" "PASS" else log_result "1.1 密码有效期检查: 不符合(当前值:$pass_max_days)" "FAIL" fi # 2. SSH 服务配置 echo -e "\n\033[1;34m[+] 检查SSH服务配置\033[0m" sshd_config="/etc/ssh/sshd_config" grep -q "^PermitRootLogin no" $sshd_config if [ $? -eq 0 ]; then log_result "2.1 禁止root远程登录: 已配置" "PASS" else log_result "2.1 禁止root远程登录: 未配置" "WARNING" fi grep -q "^Protocol 2" $sshd_config if [ $? -eq 0 ]; then log_result "2.2 SSH协议版本: 使用V2" "PASS" else log_result "2.2 SSH协议版本: 未限制V1" "FAIL" fi # 3. 文件权限检查 echo -e "\n\033[1;34m[+] 检查关键文件权限\033[0m" passwd_perms=$(stat -c %a /etc/passwd) if [ $passwd_perms -eq 644 ]; then log_result "3.1 /etc/passwd 权限: 644 (正常)" "PASS" else log_result "3.1 /etc/passwd 权限: $passwd_perms (应设置为644)" "FAIL" fi # 4. 服务安全检查 echo -e "\n\033[1;34m[+] 检查服务安全\033[0m" systemctl is-active firewalld | grep -q "active" if [ $? -eq 0 ]; then log_result "4.1 防火墙状态: 运行中" "PASS" else log_result "4.1 防火墙状态: 未运行" "FAIL" fi # 5. 日志审计配置 echo -e "\n\033[1;34m[+] 检查审计配置\033[0m" if [ -f /etc/audit/auditd.conf ]; then log_result "5.1 auditd 服务: 已安装" "PASS" systemctl is-active auditd | grep -q "active" && log_result "5.2 auditd 状态: 运行中" "PASS" else log_result "5.1 auditd 服务: 未安装" "FAIL" fi # 6. 历史命令审计 echo -e "\n\033[1;34m[+] 检查历史命令审计\033[0m" grep -q "HISTTIMEFORMAT" /etc/profile if [ $? -eq 0 ]; then log_result "6.1 命令历史时间戳: 已配置" "PASS" else log_result "6.1 命令历史时间戳: 未配置" "WARNING" fi # 7. FTP 服务检查 echo -e "\n\033[1;34m[+] 检查FTP服务\033[0m" grep -q "anonymous_enable=NO" /etc/vsftpd/vsftpd.conf 2>/dev/null if [ $? -eq 0 ]; then log_result "7.1 FTP匿名访问: 已禁用" "PASS" else log_result "7.1 FTP匿名访问: 未禁用" "FAIL" fi # 8. 高危文件检查 echo -e "\n\033[1;34m[+] 检查高危文件\033[0m" danger_files=("/.netrc" "/.rhosts" "/etc/hosts.equiv") for file in "${danger_files[@]}"; do if [ -f "$file" ]; then log_result "8.1 发现高危文件: $file" "FAIL" else log_result "8.1 高危文件检查: $file 不存在" "PASS" fi done # 9. 内核参数检查 echo -e "\n\033[1;34m[+] 检查内核参数\033[0m" sysctl net.ipv4.conf.all.accept_redirects | grep -q "= 0" if [ $? -eq 0 ]; then log_result "9.1 ICMP重定向: 已禁用" "PASS" else log_result "9.1 ICMP重定向: 未禁用" "FAIL" fi # 10. 系统补丁检查 echo -e "\n\033[1;34m[+] 检查系统更新\033[0m" if [ -f /etc/redhat-release ]; then release=$(cat /etc/redhat-release) log_result "10.1 系统版本: $release" "INFO" fi yum check-update &>/dev/null if [ $? -eq 100 ]; then log_result "10.2 系统更新: 有可用更新" "WARNING" else log_result "10.2 系统更新: 已是最新" "PASS" fi echo "=============================================" >> $REPORT_FILE echo "检查完成! 详细报告已保存至: $REPORT_FILE" echo -e "\n\033[1;32m[+] 安全基线检查完成! 请查看报告并修复标记为FAIL/WARNING的项目\033[0m" ``` ### 使用说明 1. **保存脚本**:将脚本保存为 `centos_security_check.sh` 2. **添加执行权限**: ```bash chmod +x centos_security_check.sh ``` 3. **运行脚本**: ```bash ./centos_security_check.sh ``` 4. **查看报告**:检查结果保存在 `/tmp/centos_security_report_YYYYMMDD.txt` ### 检查项目说明 1. **账户安全**:密码有效期、空口令账户 2. **SSH安全**:Root登录限制、协议版本、空闲超时 3. **文件权限**:关键系统文件权限设置 4. **服务安全**:防火墙状态、不必要服务 5. **日志审计**:auditd服务状态 6. **历史命令**:操作审计完整性 7. **FTP安全**:匿名访问限制 8. **高危文件**:.rhosts、hosts.equiv等 9. **内核参数**:ICMP重定向、IP转发 10. **系统更新**:安全补丁状态 ### 注意事项 1. 需要 **root 权限** 运行 2. 脚本仅执行检查,不修改系统配置 3. 标记为 **FAIL** 的项目需立即修复 4. 标记为 **WARNING** 的项目建议优化 5. 对于生产环境,建议在维护窗口执行 > 提示:对于等保合规要求,还需额外检查密码复杂度策略、登录失败处理、审计日志保留时间等[^1][^2]。对于CentOS 8系统,需特别注意停服后的替代更新方案[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值