Linux 服务器安全巡检与加固:从命令到实操(CentOS/Ubuntu 通用)

在服务器运维中,Linux 凭借稳定性成为主流,但 "无安全不运维"------ 未及时巡检会遗漏隐藏风险,缺乏加固则等于给攻击者留 "后门"。本文针对CentOSUbuntu两大主流发行版,梳理从账号、密码到服务、网络的全维度巡检命令,搭配可直接落地的加固方案,帮你快速筑牢服务器安全防线。

一、前提说明

  1. 操作权限 :所有命令需以rootsudo权限执行,避免因权限不足导致结果不准确。
  2. 配置备份 :修改任何系统配置文件(如/etc/ssh/sshd_config/etc/profile)前,建议先备份(例:cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak),防止配置错误导致服务异常。
  3. 适用范围:覆盖 CentOS 7+/Ubuntu 18.04+,部分命令因系统版本差异略有调整,执行后可根据提示微调。

二、安全巡检:先找风险点

巡检的核心是 "发现隐患",需按「账号→密码→服务→日志→应用→网络」的逻辑逐层排查,以下是各模块的实操命令(分 CentOS 与 Ubuntu 标注差异)。

2.1 账号与权限巡检(最易被突破的入口)

账号是服务器的 "第一道门",需重点检查空口令、超权账号(如 UID=0 的非 root 账号)和远程登录权限。

巡检项 CentOS 命令 Ubuntu 命令 说明
空口令账号 awk -F: '$2==""{print $1}' /etc/passwd 同 CentOS 输出为空则无空口令账号
UID=0 的 root 权限账号 awk -F: '$3==0{print $1}' /etc/passwd 同 CentOS 正常仅输出root
可远程登录账号 `awk -F: '{ if(2 !\~ /\^!\^\*/) {print 1} }' /etc/shadow` 同 CentOS 密码字段非 "!""*" 的账号可远程登录
sudo 权限账号 more /etc/sudoers | grep "ALL=(ALL)" | grep -v "^#" 同 CentOS 过滤注释后,查看拥有全量 sudo 权限的账号

2.2 密码与登录策略巡检(防止暴力破解)

弱密码和宽松的登录策略是暴力破解的 "温床",需检查密码周期、复杂度、账户锁定等配置。

巡检项 CentOS 命令 Ubuntu 命令 说明
密码周期策略 `cat /etc/login.defs grep "^\s*[^# \t].*$" grep ^PASS` 同 CentOS 查看密码有效期(PASS_MAX_DAYS)、最小长度(PASS_MIN_LEN)等
密码复杂度 + 账户锁定 cat /etc/pam.d/system-auth 密码复杂度:cat /etc/pam.d/common-password账户锁定:cat /etc/pam.d/common-auth 检查是否包含pam_cracklib.so(复杂度)、pam_tally2.so(锁定)
SSH 登录锁定 cat /etc/pam.d/sshd 同 CentOS 查看 SSH 登录是否启用失败锁定
连接超时配置 `cat /etc/profile sed '/^#/d' grep -i TMOUT` 同 CentOS 输出为空则未设置超时,需加固

2.3 服务与端口巡检(关闭无用 "窗口")

闲置服务和高危端口是攻击者的 "突破口",需重点检查 telnet、未授权端口等。

巡检项 通用命令 说明
telnet 服务(高危) `netstat -an grep ":23"` 有输出则 telnet 未关闭,需禁用
高危监听端口 `netstat -anpe grep "LISTEN " awk '{print 4, 8, $9}'` 输出端口、进程信息,排查非必要端口(如 3306 未授权访问)
计划任务(隐藏风险) 当前用户:crontab -l系统级:cat /etc/crontab任务目录:ls -ll /etc/cron.d 检查是否有未知计划任务(如恶意脚本定时执行)

2.4 日志与审计巡检(追溯安全事件)

日志是 "事后追溯" 的关键,需确认日志服务运行正常、配置合理。

巡检项 通用命令 说明
日志服务状态 `systemctl list-units --type=service grep "rsyslog|auditd"` 确保 rsyslog(系统日志)、auditd(审计日志)为active
日志轮转配置 `cat /etc/logrotate.conf grep "^\s*[^# \t].*$"` 查看日志是否按周期轮转(避免日志过大占满磁盘)
历史命令记录 `history tail -n 5` 查看最近执行的命令,排查异常操作

2.5 应用与组件巡检(防范漏洞攻击)

Web 组件(如 Tomcat、Nginx)和第三方库(如 FastJSON、Shiro)常存在漏洞,需确认版本安全性。

巡检项 通用命令 说明
Web 服务器排查 find / -name *apach*``find / -name *nginx*``find / -name *tomcat* 定位服务安装目录,确认版本是否有已知漏洞
高危组件排查 find / -name "*shiro*.jar" 2>/dev/null``find / -name "*fastjson*.jar" 2>/dev/null``find / -type f -name "*struts*.jar" 2>/dev/null 过滤错误输出,排查是否存在漏洞版本(如 FastJSON 1.2.24)

2.6 网络安全巡检(拦截非法访问)

通过hosts配置和防 SYN 攻击优化,减少外部非法连接。

巡检项 通用命令 说明
访问控制配置 允许列表:`cat /etc/hosts.allow grep "^\s*[^# \t].*$"<br>拒绝列表:cat /etc/hosts.deny grep "^\s*[^# \t].*$"` 检查是否限制了未知 IP 的访问
防 SYN 攻击配置 `more /etc/sysctl.conf grep net.ipv4.tcp_max_syn_backlog` 输出值建议≥1024,否则需优化

三、安全加固:针对性补漏洞

巡检发现风险后,需按 "先关键(账号 / 密码)后次要(端口 / 日志)" 的顺序加固,以下是可直接执行的方案。

3.1 账号加固:收紧 "第一道门"

  1. 删除空口令账号 :若巡检发现空口令账号(如test),执行userdel -r test-r删除用户家目录,避免残留文件)。
  2. 禁止 root 远程登录 :编辑 SSH 配置文件vim /etc/ssh/sshd_config,将PermitRootLogin改为PermitRootLogin no,保存后重启服务:
    • CentOS:systemctl restart sshd
    • Ubuntu:systemctl restart ssh
  3. 清理冗余 sudo 账号 :编辑sudoers文件visudo(避免直接 vim 导致语法错误),删除非必要账号的sudo权限行。

3.2 密码与登录加固:防暴力破解

  1. 设置密码周期与复杂度
    • 编辑/etc/login.defs,修改参数(示例值):

      复制代码
      PASS_MAX_DAYS   90    # 密码最长有效期90天
      PASS_MIN_DAYS   7     # 密码修改间隔7天
      PASS_MIN_LEN    10    # 密码最小长度10位
      PASS_WARN_AGE   7     # 密码过期前7天提醒
    • 启用密码复杂度(CentOS):编辑/etc/pam.d/system-auth,在password sufficient pam_unix.so前添加:

      复制代码
      password    requisite    pam_cracklib.so try_first_pass retry=3 minlen=10 ucredit=-1 lcredit=-1 dcredit=-1 ocredit=-1

      (含义:重试 3 次,最小 10 位,含至少 1 个大写、小写、数字、特殊字符)

  2. 设置连接超时 :执行echo "export TMOUT=1800" >> /etc/profile(1800 秒 = 30 分钟无操作自动退出),生效命令:source /etc/profile

3.3 服务与端口加固:关闭无用窗口

  1. 禁用 telnet 服务
    • CentOS:systemctl stop telnet.socket && systemctl disable telnet.socket
    • Ubuntu:apt remove -y telnetd(彻底卸载 telnet 服务)
  2. 关闭高危端口服务 :若巡检发现非必要端口(如 8080 未使用),先定位进程netstat -anpe | grep ":8080",再终止进程kill -9 进程ID,最后禁用对应服务(如systemctl disable tomcat)。

3.4 网络与攻击防护:优化防御配置

  1. 防 SYN 攻击优化 :编辑/etc/sysctl.conf,添加以下参数:

    复制代码
    net.ipv4.tcp_max_syn_backlog = 2048
    net.ipv4.tcp_synack_retries = 2
    net.ipv4.tcp_syn_retries = 2

    执行sysctl -p生效配置。

  2. 配置访问控制 :编辑/etc/hosts.allow,仅允许指定 IP 访问关键服务(示例:仅允许 192.168.1.0/24 网段访问 SSH):

    复制代码
    sshd: 192.168.1.0/24

    编辑/etc/hosts.deny,拒绝所有其他 IP:

    复制代码
    sshd: ALL

四、巡检与加固后验证

加固完成后,需再次执行巡检命令验证效果,核心验证点:

  1. more /etc/ssh/sshd_config | grep PermitRootLogin:确认输出PermitRootLogin no
  2. cat /etc/profile | grep TMOUT:确认输出export TMOUT=1800
  3. systemctl status rsyslog auditd:确认两个服务均为active (running)
  4. netstat -an | grep ":23":无输出则 telnet 已禁用。

五、总结与最佳实践

  1. 定期巡检 :建议每周执行 1 次全量巡检,可将巡检命令整理为脚本(如security_check.sh),定时执行crontab -e添加任务:0 2 * * 0 /root/security_check.sh > /var/log/security_check.log 2>&1(每周日凌晨 2 点执行,日志输出到指定文件)。
  2. 及时更新 :定期执行yum update -y(CentOS)或apt upgrade -y(Ubuntu),修复系统漏洞。
  3. 日志监控:使用 ELK、Zabbix 等工具监控日志,实时告警异常登录(如异地 IP 登录)、恶意命令执行。
相关推荐
TG_yunshuguoji3 小时前
阿里云云代理商:阿里云CDN刷新机制是什么?
服务器·阿里云·云计算
xiaogg36783 小时前
阿里云k8s1.33部署yaml和dockerfile配置文件
java·linux·kubernetes
python百炼成钢3 小时前
3.Linux 网络相关
linux·运维·网络·stm32·单片机
Jtti4 小时前
香港硬防服务器防御DDOS攻击的优点
运维·服务器·ddos
星哥说事4 小时前
网络安全设备:入侵检测系统(IDS)、入侵防御系统(IPS)的配置与使用
网络·安全·web安全
李白你好4 小时前
一个Burp Suite插件,用于自动化检测图片上传功能中的XSS漏洞
安全·自动化·xss
lpfasd1236 小时前
第2部分:Netty核心架构与原理解析
运维·服务器·架构
若尘拂风6 小时前
centos 7.9 编译安装 freeswitch 1.10.12
服务器·udp·freeswitch·sip