
核心要点(TL;DR)
- 账号权限:禁用无用账号、设置强密码策略、限制su权限。
- 日志审计:启用auditd、配置rsyslog远程日志、定期审查。
- 服务最小化:关闭非必要服务、使用systemctl管理、定期扫描端口。
- 基线加固需定期执行并验证,结合自动化工具提升效率。
Linux服务器默认配置往往为了易用性而牺牲安全性,导致账号权限泛滥、日志缺失、服务暴露过多。本文提供一份可落地的基线加固清单,涵盖账号权限、日志审计与服务最小化,每个步骤都附带具体命令,帮助运维人员快速提升服务器安全水位。
账号权限加固:从源头控制访问
账号是入侵的第一道防线。首先,清理无用账号,锁定或删除长期不用的账户。
- 检查空口令账号:
awk -F: '( == "") {print }' /etc/shadow,若有输出,立即设置密码或锁定。 - 锁定账号:
usermod -L;解锁:usermod -U。 - 设置密码策略:编辑
/etc/login.defs,调整PASS_MAX_DAYS 90、PASS_MIN_LEN 10等参数。使用chage -l查看有效期。 - 限制su命令:编辑
/etc/pam.d/su,启用auth required pam_wheel.so use_uid,仅允许wheel组用户使用su。 - 禁止root直接登录:编辑
/etc/ssh/sshd_config,设置PermitRootLogin no,重启sshd:systemctl restart sshd。
此外,使用 sudo 替代直接root操作,并通过 visudo 精细控制权限。
日志审计:让入侵行为无处遁形
完整的日志是溯源的关键。Linux默认的syslog可能被攻击者清除,需配置远程日志和审计服务。
- 启用auditd:安装并启动
auditd,添加关键规则,如监控/etc/passwd的修改:auditctl -w /etc/passwd -p wa -k passwd_change。将规则持久化到/etc/audit/rules.d/audit.rules。 - 配置rsyslog远程日志:在客户端
/etc/rsyslog.conf添加*.* @@日志服务器IP:514,服务器端启用接收模块并重启服务。 - 日志轮转:确保
/etc/logrotate.conf配置合理,避免日志被覆盖。 - 定期审查:使用
aureport生成审计报告,或通过journalctl -u sshd查看登录记录。
建议将日志集中存储,并设置告警规则,如多次失败登录触发通知。
服务最小化:减少攻击面
每开放一个服务就多一个风险点。应关闭非必要服务,仅保留业务所需。
- 列出所有服务:
systemctl list-unit-files --type=service,禁用无用服务:systemctl disable --now。 - 检查监听端口:
netstat -tulnp或ss -tulnp,确认仅开放必要端口。 - 对于xinetd服务,检查
/etc/xinetd.d/下文件,设置disable = yes。 - 使用防火墙限制访问:如
firewall-cmd --add-service=http --permanent,仅允许可信IP访问管理端口。
| 服务 | 默认端口 | 建议 |
|---|---|---|
| SSH | 22 | 修改端口、禁用密码登录、使用密钥 |
| HTTP | 80 | 如无必要,关闭或限制IP |
| FTP | 21 | 替换为SFTP |
定期使用 nmap 扫描本机端口,确保无额外暴露。
加固后的验证与维护
配置完成后,需验证效果并定期复查。使用 lynis 等工具进行安全审计,或手动检查关键文件权限(如 /etc/passwd 应为644)。建议每月执行一次基线检查,并记录变更。
在防护建议方面,可考虑使用AegisX的基线核查功能,自动化检测配置偏差,提升效率。
行动建议
立即按照上述清单逐项检查你的服务器,优先处理空口令账号、root远程登录和暴露的非必要服务。将加固步骤文档化,并纳入日常运维流程。安全是一个持续过程,定期回顾和更新基线配置。
常见问题(FAQ)
如何检查Linux服务器上是否存在空口令账号?
使用命令 `awk -F: '( == "") {print }' /etc/shadow` 可列出空口令账号。若存在,应立即用 `passwd ` 设置强密码或锁定账号。空口令是严重安全风险,务必确保所有账号都有密码。
日志审计中,auditd规则如何持久化?
将规则写入 `/etc/audit/rules.d/audit.rules` 文件,然后重启auditd服务:`systemctl restart auditd`。使用 `auditctl -l` 可查看当前规则。持久化确保重启后规则依然生效。
如何最小化Linux服务?
首先使用 `systemctl list-unit-files --type=service` 列出所有服务,禁用非必要服务:`systemctl disable --now `。对于xinetd服务,检查 `/etc/xinetd.d/` 并设置 `disable = yes`。定期用 `netstat -tulnp` 查看监听端口,关闭无用端口。
如何限制su命令的使用?
编辑 `/etc/pam.d/su`,取消注释 `auth required pam_wheel.so use_uid`,这样只有wheel组的用户才能使用su。将需要su权限的用户加入wheel组:`usermod -aG wheel `。这能减少权限滥用风险。
如何配置远程日志服务器?
在客户端编辑 `/etc/rsyslog.conf`,添加 `*.* @日志服务器IP:514`(UDP)或 `*.* @@日志服务器IP:514`(TCP)。在服务器端启用接收模块并重启rsyslog。远程日志可防止本地日志被篡改。