linux服务器安全加固并不等于关闭一切入口,适合中小团队的最小可用基线
面向中小团队梳理一套兼顾安全与可维护性的 Linux 服务器最小可用基线,覆盖账号与 SSH、补丁更新、日志审计、备份恢复等关键项,并指出过度激进加固可能带来的业务与维护风险。

安全加固的目标不是“把门都焊死”
一个中小团队常见的服务器场景是:几台 Linux 服务器承载网站、接口、数据库或内部系统,运维可能由开发兼任,业务还要持续上线。此时做 linux 服务器安全加固,最怕两种极端:完全不管,所有服务裸露在公网;或者一次性关闭 root、禁用密码、收紧防火墙、改 SSH 端口、强制重启更新,结果攻击面是小了,自己也进不去了。
适合中小团队的最小可用基线,应当优先解决“可被远程暴力尝试、账号权限混乱、补丁长期缺失、日志不可追踪、备份不可恢复”这些高概率问题,同时保留可维护入口和回滚手段。它不是企业级零信任全套架构,也不是把所有端口都关掉,而是在有限人力下建立一套能长期执行的安全底线。
这里的“最小可用基线”可以理解为:在不显著增加运维复杂度、不影响业务发布和故障处理的前提下,必须长期保持的账号、访问、补丁、审计、备份与应急配置。它适合公网 Linux 服务器、少量运维人员、没有独立安全团队的中小团队作为第一阶段加固标准。
中小团队做安全加固时的现实约束
安全方案如果脱离团队能力,很容易从“保护服务器”变成“制造维护风险”。中小团队在落地 linux 服务器安全加固时,通常有几个约束:
- 服务器数量不多,但每台都可能承载关键业务;
- 运维人员有限,无法 7×24 小时盯日志和告警;
- 发布、排障、数据修复经常需要远程登录;
- 应用依赖可能比较旧,激进升级可能引发兼容问题;
- 很多服务器没有完整的配置管理和自动化回滚体系。
因此,安全基线应先覆盖“高收益、低副作用”的项目。比如禁用 root 远程登录、使用普通账号加 sudo、限制 SSH 登录来源、定期安装安全补丁、保留关键日志、做可恢复备份。这些措施通常不会改变业务架构,却能明显降低常见风险。
可以先把基线分成四类:入口控制、系统维护、行为审计、恢复能力。
| 基线类别 | 最小要求 | 主要降低的风险 | 维护注意点 |
|---|---|---|---|
| 账号与 SSH | 普通用户登录、sudo 提权、禁用 root 远程登录、优先使用密钥 | 暴力破解、共享账号、权限失控 | 修改 SSH 前必须保留当前会话和备用入口 |
| 网络暴露面 | 只开放业务必要端口,管理端口限制来源 | 扫描探测、无关服务被利用 | 防火墙规则先放行 SSH 再启用 |
| 补丁与服务 | 定期安装安全更新,关闭不用的服务 | 已知漏洞、组件长期失修 | 重要业务先在低峰或测试环境验证 |
| 日志与备份 | 登录日志可查,关键配置和数据可恢复 | 事后无法追踪、误操作无法恢复 | 备份必须做恢复验证,不只看“备份成功” |
账号与 SSH:先把管理入口做稳
SSH 是 Linux 服务器最常见的管理入口,也是最容易被扫描和尝试登录的位置。中小团队的目标不是让 SSH “消失”,而是让它满足三个条件:谁登录可识别、登录方式不容易被撞库、出现问题还能恢复。
使用个人账号,不把 root 当日常入口
建议为每位管理员创建独立账号,通过 sudo 获取管理权限。这样日志中能看到具体操作者,而不是所有人共用 root。
以 Ubuntu/Debian 为例:
sudo adduser opsuser
sudo usermod -aG sudo opsuser
以 RHEL/Rocky/AlmaLinux 为例:
sudo useradd opsuser
sudo passwd opsuser
sudo usermod -aG wheel opsuser
创建后不要立即关闭当前 root 会话。应先用新账号另开一个 SSH 窗口登录,并验证 sudo 是否可用:
ssh opsuser@your_server_ip
sudo whoami
如果输出为 root,说明 sudo 权限生效。确认备用账号可用后,再继续调整 SSH 配置。
禁用 root 远程登录,但不要盲目锁死 root
通常建议禁止 root 直接通过 SSH 登录:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date +%F)
sudo nano /etc/ssh/sshd_config
确认或添加以下配置:
PermitRootLogin no
修改后先检查配置语法:
sudo sshd -t
没有输出通常表示语法检查通过,再重载 SSH 服务:
sudo systemctl reload sshd
部分 Debian/Ubuntu 系统服务名可能是 ssh,可先确认:
systemctl status ssh
systemctl status sshd
这里要注意:禁用 root SSH 登录不等于立刻锁定 root 本地账号。对于还没有控制台、救援模式或云平台远程登录能力的服务器,过早锁死 root 可能在 sudo 配置出错时增加恢复难度。更稳妥的做法是先确保普通账号、sudo、备份入口都可用,再逐步收紧。
SSH 密钥优先,密码登录分阶段关闭
密钥登录比密码更适合公网服务器。管理员可在本地生成密钥:
ssh-keygen -t ed25519 -C "opsuser@server"
将公钥放入服务器用户目录:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
确认密钥登录成功后,再考虑关闭密码登录:
PasswordAuthentication no
PubkeyAuthentication yes
但这一步要谨慎。若团队成员还没有统一密钥管理习惯,或者存在第三方自动化脚本仍依赖密码登录,直接关闭可能导致维护中断。可先执行过渡策略:
- 只允许固定管理员账号登录;
- 限制 SSH 来源 IP;
- 对失败登录做限速或封禁;
- 统计一段时间后再关闭密码登录。
例如可在 sshd_config 中限制允许登录的用户:
AllowUsers opsuser deployuser
修改后同样执行:
sudo sshd -t
sudo systemctl reload sshd
防火墙不是越严越好,而是只开放必要路径
Linux 服务器安全加固离不开防火墙,但中小团队最常见的事故之一就是“规则写错后 SSH 断开”。启用防火墙前,应先确认当前业务端口和管理端口。
查看监听端口:
sudo ss -tulpn
重点关注:
0.0.0.0:22或[::]:22:SSH 是否对公网开放;0.0.0.0:80、0.0.0.0:443:Web 服务;0.0.0.0:3306、5432、6379:数据库或缓存是否暴露公网;- 不认识的高位端口:确认是否为业务组件、监控 Agent 或临时进程。
如果使用 UFW,启用前先放行 SSH 和业务端口:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status verbose
确认规则无误后再启用:
sudo ufw enable
如果使用 firewalld,可先查看当前区域和规则:
sudo firewall-cmd --get-active-zones
sudo firewall-cmd --list-all
放行业务端口示例:
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
数据库、Redis、管理后台等不应默认暴露公网。若确实需要远程访问,优先使用内网、VPN、堡垒机或固定 IP 白名单,而不是直接开放给所有来源。
补丁与服务:可控更新比长期不更新更重要
很多入侵并不依赖复杂攻击,而是利用已公开漏洞。中小团队至少应建立一个固定节奏:每周或每两周检查安全更新,每月安排一次维护窗口,对内核、OpenSSH、OpenSSL、Web 服务、数据库客户端等关键组件进行更新。
Ubuntu/Debian 可使用:
sudo apt update
apt list --upgradable
执行升级前建议先确认应用依赖,低峰期操作:
sudo apt upgrade
RHEL/Rocky/AlmaLinux 可使用:
sudo dnf check-update
若软件源支持安全公告元数据,可查看安全更新:
sudo dnf updateinfo list security
再根据维护窗口更新:
sudo dnf update
是否开启自动更新,要看业务特点。对于纯静态站点、标准 Web 服务,自动安装安全补丁的风险相对较低;对于强依赖特定运行时版本的应用,建议先通知、备份、测试,再升级。自动更新不应替代变更记录,尤其是涉及内核、数据库、语言运行时和反向代理时。
除了更新,还要清理无用服务。先列出已启用服务:
systemctl list-unit-files --type=service --state=enabled
发现不明确的服务,不要直接停用。应先查看用途:
systemctl status service_name
ps -ef | grep service_name
确认与业务无关后,再安排停用。涉及生产环境时,建议保留变更记录,写清楚停用时间、服务名、原因和回滚方式。
日志与审计:至少要能回答“谁在什么时候做了什么”
安全加固不只是防止攻击,也包括事后可追踪。中小团队不一定马上建设集中日志平台,但单机日志不能缺失。
常用登录检查命令包括:
last
lastb
who
Ubuntu/Debian 查看 SSH 认证日志:
sudo grep "sshd" /var/log/auth.log | tail -n 50
RHEL/Rocky/AlmaLinux 通常查看:
sudo grep "sshd" /var/log/secure | tail -n 50
也可以使用 systemd 日志:
sudo journalctl -u ssh --since "24 hours ago"
sudo journalctl -u sshd --since "24 hours ago"
如果不确定服务名,先用 systemctl status ssh 和 systemctl status sshd 判断。
最低限度的审计应覆盖:
- 成功登录和失败登录;
- sudo 提权记录;
- SSH 配置变更;
- 防火墙规则变更;
- 关键业务服务重启;
- 数据库备份和恢复操作。
对于 sudo 日志,可查看系统认证日志,也可用:
sudo journalctl | grep sudo | tail -n 50
日志保留时间要与业务风险匹配。至少应保证最近 7 到 30 天可查;涉及交易、客户数据或合规要求时,应根据实际要求延长保留周期,并考虑异地保存,避免攻击者进入服务器后删除本地日志。
备份与应急入口:安全基线必须包含“能恢复”
很多团队把安全加固理解为“防入侵”,却忽略误操作、勒索、升级失败和配置损坏。对于中小团队,备份和应急入口是最容易被低估的安全项。
关键备份不只备份网站目录
最小备份范围建议包括:
- 应用代码或可重新部署的制品;
- 数据库备份;
- 上传文件、用户文件、业务附件;
/etc下的关键配置;- Nginx、Apache、PHP-FPM、Supervisor、systemd unit 等服务配置;
- crontab 定时任务;
- 防火墙规则和 SSH 配置;
- 证书与续期配置,但要注意私钥保护。
可先用只读方式核对关键配置位置:
sudo ls -lah /etc/nginx
sudo ls -lah /etc/ssh
sudo crontab -l
sudo systemctl list-timers
数据库备份不要只看文件是否生成,还要定期做恢复验证。最小验证可以是:在测试库或临时环境导入备份,确认表结构、核心数据量和应用连接是否正常。没有恢复验证的备份,只能算“可能有用的文件”。
应急入口要提前设计
如果 SSH 配置错误、防火墙误封、密钥丢失,团队需要一个不会依赖当前 SSH 的恢复路径。可根据服务器环境准备:
- 控制台或救援模式访问方式;
- 至少两个具备 sudo 权限的管理员账号;
- 离线保存的应急密钥,限制使用人和使用记录;
- 关键配置文件修改前自动备份;
- 变更前保留一个已登录的 SSH 会话,确认新会话可登录后再退出。
修改 SSH、防火墙、sudoers 时尤其要谨慎。编辑 sudoers 建议使用 visudo,它会做语法检查:
sudo visudo
不要直接用普通编辑器覆盖 /etc/sudoers。一旦语法错误,可能导致所有 sudo 提权失败。
这些激进加固做法可能影响业务与维护
安全建议放到不同团队中,副作用不一样。下面这些做法并非绝对不能用,但不适合作为中小团队第一天就全面执行的默认项。
| 激进做法 | 可能带来的问题 | 更稳妥的处理方式 |
|---|---|---|
| 立即关闭所有密码登录 | 密钥未分发完整时,管理员和自动化脚本无法登录 | 先启用密钥并观察一段时间,再分阶段关闭密码 |
| 只改 SSH 端口就认为安全 | 扫描仍可发现端口,且可能造成防火墙、监控、脚本失效 | 改端口只能降低噪音,应配合密钥、限源、失败登录限制 |
| 默认拒绝所有出站连接 | 可能导致系统更新、证书续期、接口回调、监控上报失败 | 先梳理出站依赖,再逐项收紧 |
| 强制自动重启安装内核更新 | 可能在业务高峰中断服务 | 安排维护窗口,或使用受控重启策略 |
| 对系统目录随意 chattr 锁定 | 后续升级、证书更新、服务写入可能失败 | 只对明确需要保护的文件使用,并记录解除方式 |
| 盲目套用高强度密码过期策略 | 管理员频繁改密码,反而增加弱密码和记录泄露风险 | 优先使用密钥、MFA 或密码管理器,密码策略适度即可 |
| 开启严格 SELinux/AppArmor 策略但不验证 | 应用读写目录、端口绑定、子进程调用可能异常 | 先观察日志和告警,针对应用逐项调整策略 |
| 一次性卸载“看似无用”的包 | 可能删除编译、备份、监控或依赖组件 | 先确认依赖关系和回滚方式,再清理 |
中小团队应避免“复制一份加固脚本直接跑完”。不同发行版、应用栈、部署方式差异很大,脚本里的一条防火墙规则、一个 sysctl 参数、一次服务禁用,都可能改变线上行为。更安全的做法是把加固拆成小步骤,每一步可验证、可回滚、可记录。
一套可落地的最小可用基线清单
如果团队需要快速建立第一版 linux 服务器安全加固标准,可以按下面顺序执行。顺序很重要:先保证可登录和可恢复,再逐步收紧。
- 记录当前服务器用途、业务端口、管理员账号和备份状态。
- 创建个人管理员账号,验证 sudo 权限。
- 配置 SSH 密钥登录,确认至少两个管理员可正常登录。
- 禁用 root 远程 SSH 登录,但保留可控的应急恢复方式。
- 检查监听端口,关闭或限制不应暴露公网的服务。
- 启用防火墙前先放行 SSH 和必要业务端口。
- 建立补丁检查节奏,重要更新安排维护窗口。
- 保留登录、sudo、服务重启和关键配置变更日志。
- 备份应用、数据库、配置和证书相关文件。
- 定期做恢复验证,确认备份不是“只生成不可用”。
- 为 SSH、防火墙、sudoers 等高风险变更建立回滚记录。
- 每季度复查一次账号、端口、服务和备份有效性。
这套基线不追求复杂,但要求持续执行。对于中小团队来说,安全能力往往不是来自某一次“大加固”,而是来自每次上线、每次扩容、每次人员变动时都能保持同一套底线。
从最小基线向更高等级扩展
当服务器数量增加、管理员增多、业务数据更敏感时,可以在最小可用基线之上继续扩展。例如引入堡垒机或 VPN 统一管理入口,集中收集日志,使用配置管理工具批量下发基线,增加主机入侵检测,给关键后台增加多因素认证,按照业务等级拆分网络区域。
扩展时仍要遵守一个原则:新增安全措施必须能被团队维护。上线前确认回滚路径,变更后观察 SSH 登录、业务端口、系统更新、证书续期、备份任务和监控告警是否正常。安全加固不是关闭一切入口,而是让必要入口更可控,让异常行为更容易被发现,让故障和误操作有机会恢复。