
核心要点(TL;DR)
- 最小权限先从SSH与sudo入手,禁用密码登录并收敛提权范围。
- 基线核查要可重复执行,用脚本固化检查项而非一次性手工巡检。
- 补丁按高危优先、分批灰度、先快照后升级的节奏推进。
- 加固后必须验证业务可用性,并保留回滚路径。
很多云服务器被入侵,并不是因为攻击者多高明,而是因为默认配置太宽松:root 密码登录开着、22 端口对全网开放、sudo 直接给 ALL、系统补丁半年没动。等到发现挖矿进程或异常登录时,排查成本已经翻了几倍。本文给出一份可直接照着做的防护清单,围绕最小权限、基线核查、补丁节奏三条主线,每一步都配命令与检查项,目标是让你在一小时内完成关键加固。
一、最小权限:先把入口和提权面收窄
最小权限不是口号,而是三件具体的事:谁能登录、能提权到什么程度、能读写哪些文件。先处理登录入口。
1. 账号与 SSH 收敛
# 创建运维账号并加入 sudo 组(按需)
useradd -m -s /bin/bash ops
passwd ops
# 配置密钥登录
mkdir -p /home/ops/.ssh && chmod 700 /home/ops/.ssh
vi /home/ops/.ssh/authorized_keys
chmod 600 /home/ops/.ssh/authorized_keys
chown -R ops:ops /home/ops/.ssh
# 修改 /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AllowUsers ops
# 校验并重载
sshd -t && systemctl reload sshd
改完不要立刻断开当前会话,另开一个终端验证新账号能登录、root 已被拒绝,再关闭旧连接。若使用云厂商安全组,把 22 端口限制为办公出口 IP,比任何密码策略都有效。
2. sudo 精确授权
避免 ops ALL=(ALL) ALL 这种全量授权。按角色写到 /etc/sudoers.d/ 下,例如只允许重启服务与查看日志:
ops ALL=(root) /bin/systemctl restart nginx, /usr/bin/journalctl
用 visudo -c 校验语法。定期执行 sudo -l -U ops 复核授权范围,人员离岗立即回收。
3. 文件权限收敛
- 密钥、配置、备份目录统一 600/700,禁止全局可读。
- 网站根目录属主为运行用户,禁止 777。
- 用
find / -perm -4000 -type f列出 SUID 文件,非必要项去掉 SUID 位。
二、安全基线核查:把检查项固化成脚本
一次性手工巡检不可持续,基线核查的价值在于可重复、可对比。建议把以下检查写成脚本,每月跑一次并保存输出。
| 检查项 | 命令示例 | 合格标准 |
|---|---|---|
| 可登录账号 | awk -F: '!~/nologin|false/{print }' /etc/passwd | 仅保留必要账号 |
| 空密码账号 | awk -F: '==""{print }' /etc/shadow | 无输出 |
| 开放端口 | ss -tulnp | 仅业务与运维端口 |
| 计划任务 | crontab -l; ls /etc/cron.* | 无陌生任务 |
| 登录失败记录 | lastb | head | 无高频爆破 |
| SSH 关键配置 | sshd -T | grep -E 'permitroot|passwordauth' | 均为 no |
核查发现异常时,优先看三类信号:新增的账号或密钥、非业务时段的登录、异常外联连接(ss -tnp 结合进程名)。这些往往是入侵的第一现场。
三、补丁节奏:高危优先、先快照后升级
补丁不是越勤越好,而是要形成节奏。建议按「发现—评估—灰度—全量—复盘」推进:
- 发现:订阅发行版安全公告,或每周执行一次
apt list --upgradable/dnf check-update。 - 评估:区分远程可利用、本地提权、信息泄露三类,前两类优先。
- 快照:升级前对系统盘做快照,或至少备份关键配置与数据库。
- 灰度:先在非核心机器升级,观察 24 小时业务指标。
- 全量:分批推进,避免同一时间全部重启。
# Debian/Ubuntu 仅升级安全源
apt update && apt -y upgrade
# RHEL 系
dnf -y update --security
# 升级后验证
systemctl --failed && ss -tulnp
内核升级后需重启生效,务必安排维护窗口。升级后重点验证:服务是否全部启动、关键接口是否可访问、磁盘与内存是否异常。
四、防护建议与行动清单
加固完成后,把下面这份清单贴进运维文档,每季度复核一次:
- root 禁止远程登录,SSH 仅密钥认证并限制来源 IP。
- sudo 按角色精确授权,离岗即回收。
- 每月执行基线核查脚本,留存差异报告。
- 高危补丁 7 天内处理,常规补丁按月批量推进。
- 开启登录审计与异常告警,定期检查计划任务与 SUID 文件。
如果人力有限,可借助主机安全类产品把基线核查、漏洞扫描与入侵检测自动化,例如 AegisX 提供的基线核查与补丁风险提示能力,能把上述手工动作变成持续监控。但工具替代不了节奏:先固定检查项,再谈自动化,防护才可持续。
行动建议:今天就先完成 SSH 收敛与一次全量补丁评估,本周内把基线核查脚本跑通并纳入定时任务。防护的差距,往往就在这几步是否真的执行。
常见问题(FAQ)
云服务器刚买回来,最先做哪几步防护?
先做四件事:创建普通运维账号并禁用root远程登录、SSH改为密钥认证并限制来源IP、开启防火墙只放行必要端口、立即执行一次系统补丁更新。这四步能在半小时内消除绝大多数自动化扫描可利用的入口,之后再逐步做基线核查与日志审计。
最小权限原则在单台云服务器上怎么落地?
核心是三点:账号层面按角色建号、禁止共用root;提权层面用sudo精确授权到命令而非ALL;文件层面用chmod/chown收敛敏感目录,如/etc、网站根目录与密钥文件设为600。同时定期用命令核查sudoers与SUID文件,发现异常提权面及时回收。
安全基线核查应该多久做一次?
建议至少每月一次全量核查,重大变更(上线新服务、开放新端口)后立即补做一次。把检查项写成脚本并纳入定时任务,输出差异报告,比人工巡检更可靠。重点关注账号、SSH配置、开放端口、计划任务、SUID文件与日志配置六类项。
补丁更新会不会把业务搞挂?怎么控制风险?
会,所以要讲节奏:先快照或备份,再在测试或低峰机器上验证,然后分批灰度升级,最后全量。高危漏洞(远程可利用、提权类)优先处理,内核与关键组件升级前确认业务兼容性。升级后验证服务端口与关键接口,异常立即回滚。
没有专业安全团队,如何低成本持续防护?
把防护固化为可执行动作:用脚本做基线核查、用定时任务做补丁提醒、用日志与告警盯异常登录。再借助主机安全类工具做入侵检测与漏洞扫描,减少人工盯守成本。关键是形成清单与节奏,而不是依赖一次性大扫除。