在服务器运维中,Linux 凭借稳定性成为主流,但 "无安全不运维"------ 未及时巡检会遗漏隐藏风险,缺乏加固则等于给攻击者留 "后门"。本文针对CentOS 和Ubuntu两大主流发行版,梳理从账号、密码到服务、网络的全维度巡检命令,搭配可直接落地的加固方案,帮你快速筑牢服务器安全防线。
一、前提说明
- 操作权限 :所有命令需以
root
或sudo
权限执行,避免因权限不足导致结果不准确。 - 配置备份 :修改任何系统配置文件(如
/etc/ssh/sshd_config
、/etc/profile
)前,建议先备份(例:cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
),防止配置错误导致服务异常。 - 适用范围:覆盖 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 账号加固:收紧 "第一道门"
- 删除空口令账号 :若巡检发现空口令账号(如
test
),执行userdel -r test
(-r
删除用户家目录,避免残留文件)。 - 禁止 root 远程登录 :编辑 SSH 配置文件
vim /etc/ssh/sshd_config
,将PermitRootLogin
改为PermitRootLogin no
,保存后重启服务:- CentOS:
systemctl restart sshd
- Ubuntu:
systemctl restart ssh
- CentOS:
- 清理冗余 sudo 账号 :编辑
sudoers
文件visudo
(避免直接 vim 导致语法错误),删除非必要账号的sudo
权限行。
3.2 密码与登录加固:防暴力破解
- 设置密码周期与复杂度 :
-
编辑
/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 个大写、小写、数字、特殊字符)
-
- 设置连接超时 :执行
echo "export TMOUT=1800" >> /etc/profile
(1800 秒 = 30 分钟无操作自动退出),生效命令:source /etc/profile
。
3.3 服务与端口加固:关闭无用窗口
- 禁用 telnet 服务 :
- CentOS:
systemctl stop telnet.socket && systemctl disable telnet.socket
- Ubuntu:
apt remove -y telnetd
(彻底卸载 telnet 服务)
- CentOS:
- 关闭高危端口服务 :若巡检发现非必要端口(如 8080 未使用),先定位进程
netstat -anpe | grep ":8080"
,再终止进程kill -9 进程ID
,最后禁用对应服务(如systemctl disable tomcat
)。
3.4 网络与攻击防护:优化防御配置
-
防 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
生效配置。 -
配置访问控制 :编辑
/etc/hosts.allow
,仅允许指定 IP 访问关键服务(示例:仅允许 192.168.1.0/24 网段访问 SSH):sshd: 192.168.1.0/24
编辑
/etc/hosts.deny
,拒绝所有其他 IP:sshd: ALL
四、巡检与加固后验证
加固完成后,需再次执行巡检命令验证效果,核心验证点:
more /etc/ssh/sshd_config | grep PermitRootLogin
:确认输出PermitRootLogin no
。cat /etc/profile | grep TMOUT
:确认输出export TMOUT=1800
。systemctl status rsyslog auditd
:确认两个服务均为active (running)
。netstat -an | grep ":23"
:无输出则 telnet 已禁用。
五、总结与最佳实践
- 定期巡检 :建议每周执行 1 次全量巡检,可将巡检命令整理为脚本(如
security_check.sh
),定时执行crontab -e
添加任务:0 2 * * 0 /root/security_check.sh > /var/log/security_check.log 2>&1
(每周日凌晨 2 点执行,日志输出到指定文件)。 - 及时更新 :定期执行
yum update -y
(CentOS)或apt upgrade -y
(Ubuntu),修复系统漏洞。 - 日志监控:使用 ELK、Zabbix 等工具监控日志,实时告警异常登录(如异地 IP 登录)、恶意命令执行。