
核心要点(TL;DR)
- 服务器加固的本质是缩小攻击面:少一个入口、少一份权限、多一条日志。
- 加固顺序建议:账号权限→SSH→服务端口→文件权限→补丁→日志审计。
- 禁用root远程登录并改用密钥认证,是投入产出比最高的一步。
- 没有日志审计的加固是不完整的,异常登录必须能被发现和追溯。
很多服务器被入侵,并不是因为漏洞多高明,而是因为配置太松:root 能直接密码登录、22 端口对全网开放、运维账号全给了 sudo、日志从来没看过。服务器加固是什么?一句话说,就是把「能进来的入口、能拿到的权限、能留下的痕迹」三件事收敛到可控范围。本文按可执行顺序给出命令和检查项,你可以照着从上到下做一遍。
一、先明确加固目标与优先级
加固不是把所有安全选项全打开,而是围绕三个目标做取舍:缩小攻击面(少开端口、少装服务)、降低单点失陷影响(最小权限、隔离账号)、保留可追溯证据(登录与操作日志)。优先级建议按「账号权限 → SSH 与登录 → 服务与端口 → 文件权限 → 补丁 → 日志审计」推进,因为前两项挡掉的是最高频的暴力破解与弱口令入侵。
二、账号与权限:最小权限落地
先盘点账号,再收敛权限。执行以下命令查看可登录账号与 UID 为 0 的账号:
awk -F: '==0 {print }' /etc/passwd
awk -F: '!~/(nologin|false)$/ {print ,,}' /etc/passwd
grep -E '^(sudo|wheel)' /etc/group处理原则:
- 除 root 外不应存在 UID 为 0 的账号,发现即核查来源。
- 系统服务账号统一设置为
/sbin/nologin,禁止交互登录。 - 为每个运维人员建独立账号,加入 sudo 组,禁止共用账号。
- 用
passwd -l 用户名锁定离职或长期不用的账号,而非直接删除,便于审计追溯。 - sudo 授权写到
/etc/sudoers.d/下按人分文件,避免直接编辑 sudoers。
三、SSH 与登录:挡住最高频的入侵
SSH 是绝大多数 Linux 主机被打穿的入口。编辑 /etc/ssh/sshd_config,至少落实以下几项:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
AllowUsers ops1 ops2操作顺序很关键,否则容易把自己锁在外面:
- 先给普通账号写入公钥并验证免密登录成功。
- 修改配置后执行
sshd -t检查语法。 - 新开一个终端验证能登录,再执行
systemctl reload sshd。 - 保留云控制台 VNC 或带外通道作为兜底。
同时安装 fail2ban 限制爆破尝试:apt install fail2ban 后启用 sshd jail,默认 5 次失败封禁 10 分钟,可按业务调整。
四、服务、端口与文件权限
用 ss -tulnp 列出所有监听端口,逐个确认是否必要。对公网只放行 80/443 与受控的运维端口,数据库、Redis、管理后台一律只监听内网或 127.0.0.1。防火墙示例:
ufw default deny incoming
ufw allow 80,443/tcp
ufw allow from 10.0.0.0/8 to any port 22
ufw enable文件权限重点检查三类:密钥文件 ~/.ssh 应为 700、authorized_keys 为 600;网站目录禁止全局可写,避免上传木马直接执行;/etc/passwd、/etc/shadow 权限是否符合默认值。可用 find /var/www -perm -o+w -type f 快速定位全局可写文件。
| 加固项 | 默认风险 | 目标状态 |
|---|---|---|
| root 远程登录 | 可被直接爆破 | 禁用 |
| 密码认证 | 弱口令风险高 | 仅密钥 |
| 公网端口 | 暴露面大 | 仅必要端口 |
| 日志 | 无记录难追溯 | 本地+远端留存 |
五、日志审计:让异常可被发现
没有审计的加固是不完整的。先确认 rsyslog 正在记录认证日志,tail -f /var/log/auth.log(Debian 系)或 /var/log/secure(RHEL 系)应能看到登录记录。再启用 auditd 监控关键行为:
auditctl -w /etc/passwd -p wa -k passwd_change
auditctl -w /etc/sudoers -p wa -k sudoers_change
aureport -au -i日志轮转用 logrotate 控制体积,同时把日志实时转发到另一台主机或日志平台,防止入侵者 rm 掉本地记录。日常巡检建议关注:短时间大量 Failed password、陌生 IP 的成功登录、非工作时间的 sudo 提权。
六、上线前检查清单与行动建议
- UID 为 0 的账号仅 root,服务账号为 nologin。
- SSH 已禁 root 直登与密码认证,AllowUsers 已限定。
- 公网仅放行必要端口,数据库不对公网监听。
- 网站目录无可执行上传、无全局可写文件。
- 系统与中间件补丁已更新,内核版本在支持范围内。
- auth 日志与 auditd 规则生效,日志已转发留存。
建议把上述清单固化为基线脚本或配置管理模板,新机器交付即执行,避免「上线先跑业务、安全以后再说」。在防护层面,AegisX 的主机安全能力可覆盖登录异常检测、文件完整性监控与审计日志集中留存,与本文的配置加固形成互补:配置负责把门关小,检测负责在门被撬时及时告警。先完成账号与 SSH 两项,你今天就能把主机风险降一个量级。
常见问题(FAQ)
服务器加固是不是装个安全软件就行了?
不是。安全软件只是补充,服务器加固的核心是配置层面的收敛:账号最小权限、关闭不必要的服务和端口、SSH禁止root直登、文件权限收紧、补丁及时更新、日志可审计。这些配置决定了攻击面大小,软件只能在既有配置上做检测和拦截。配置错了,再多的软件也补不回来。
新买的云服务器上线前最少要做哪几件事?
至少做五件:创建普通运维账号并加入sudo组、禁用root的SSH远程登录、改用密钥认证并关闭密码登录、用防火墙只放行必要端口、开启登录日志与命令审计。这五步大约半小时可以完成,能挡掉绝大多数自动化扫描和暴力破解,是性价比最高的基础加固。
关闭密码登录后会不会把自己锁在服务器外面?
有风险,所以要按顺序操作。先确认公钥已写入目标账号的authorized_keys并测试能免密登录,再修改sshd_config,改完先执行sshd -t检查语法,然后用新开一个终端验证登录成功,最后才reload服务。切勿在唯一一个已连接的会话里直接重启sshd,也不要同时关闭密码登录和root登录却不保留可用的普通账号。
日志审计要做到什么程度才算合格?
合格标准是三条:登录成功与失败都有记录、关键操作可追溯到人和时间、日志不被轻易清除。落地做法是开启rsyslog记录auth日志、配置auditd监控关键文件与提权命令、用logrotate做轮转、把日志实时转发到另一台主机或日志平台。这样即使主机被入侵,也能从外部日志还原时间线。
加固之后业务出问题怎么快速回滚?
加固前先备份配置并记录变更。建议用配置管理或至少执行cp备份关键文件,如sshd_config、防火墙规则、sudoers。每次只改一类配置并立即验证业务,出问题用备份文件还原并reload对应服务。保留一个带外登录通道(云控制台VNC)作为兜底,避免网络层配置错误导致完全失联。