
核心要点(TL;DR)
- 内核参数加固优先落地:关闭IP转发与重定向、开启SYN Cookie、限制dmesg与ptrace,能显著缩小攻击面。
- 文件权限基线核心是收紧umask、清理全局可写文件与异常SUID/SGID,避免本地提权。
- 加固前先备份配置并做变更记录,所有sysctl项写入持久化文件,避免重启失效。
- 加固后用命令逐项复核并纳入定期巡检,基线才有长期价值。
很多服务器被入侵,并不是因为漏洞多高级,而是基线太松:内核允许转发和重定向、临时目录全局可写、一堆来源不明的 SUID 文件、umask 默认 022 谁都能读。等出事再回头查,往往已经晚了。本文面向要动手的运维和站长,把 Linux 安全基线加固拆成内核参数与文件权限两条主线,给出可直接复制执行的命令、对比表格和上线前检查清单,照着做一轮,攻击面能明显收窄。
一、先明确:安全基线加固到底在加固什么
安全基线加固不是装个杀毒软件就完事,而是把系统配置收敛到「最小必要」状态。对 Linux 来说,最容易被忽视又收益最高的两块是:
- 内核参数:控制网络行为、内存与调试接口,决定攻击者能做多少事。
- 文件权限:决定谁能读、写、执行,直接关系本地提权与配置篡改。
动手前先做两件事:备份关键配置(cp /etc/sysctl.conf /etc/sysctl.conf.bak),并记录变更时间与操作人,方便回滚和审计。
二、内核参数加固:sysctl 实操
临时验证用 sysctl -w,生产必须落盘。建议新建独立文件,避免与系统默认配置互相覆盖:
cat > /etc/sysctl.d/99-security.conf <<'EOF' # 网络层加固 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.tcp_syncookies = 1 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.conf.all.log_martians = 1 # 限制调试与信息泄露 kernel.dmesg_restrict = 1 kernel.kptr_restrict = 2 kernel.yama.ptrace_scope = 1 fs.suid_dumpable = 0 EOF sysctl --system
几个关键项的作用与取舍:
| 参数 | 作用 | 注意 |
|---|---|---|
| tcp_syncookies | 缓解 SYN Flood | 高并发场景保持开启 |
| accept_redirects=0 | 防路由重定向劫持 | 多网卡路由场景需评估 |
| dmesg_restrict | 限制内核日志读取 | 普通用户无法看 dmesg |
| ptrace_scope=1 | 限制进程调试注入 | 部分调试工具需临时调整 |
改完用 sysctl -a | grep -E "rp_filter|syncookies|ptrace_scope" 复核,确认没有其他文件覆盖。若服务器承担路由或容器转发,ip_forward 按业务需要单独评估,不要盲目关闭。
三、文件权限收紧:umask 与关键路径
先看当前默认值:umask。多数发行版是 022,意味着新建文件其他用户可读。建议在 /etc/profile 或 /etc/login.defs 中统一为 027:
echo 'umask 027' >> /etc/profile grep -n '^UMASK' /etc/login.defs # 改为 UMASK 027
随后处理敏感文件与目录:
- 关键账户文件:
chmod 600 /etc/shadow、chmod 644 /etc/passwd、chmod 600 /etc/ssh/ssh_host_*_key。 - SSH 配置:
chmod 600 /etc/ssh/sshd_config,禁止普通用户读取。 - 计划任务:
chmod 600 /etc/crontab,并检查/etc/cron.*属主为 root。 - 家目录:
chmod 750 /home/*,避免横向读取。
四、异常权限排查:全局可写与 SUID
全局可写是重灾区,先用 find 扫一遍:
find / -xdev -type d -perm -0002 -exec ls -ld {} \;
find / -xdev -type f -perm -0002 -exec ls -l {} \;
目录应加粘滞位(如 chmod +t /tmp),文件应收紧到 644 或 600。接着排查 SUID/SGID:
find / -xdev -perm -4000 -type f -exec ls -l {} \;
find / -xdev -perm -2000 -type f -exec ls -l {} \;
与发行版默认清单比对,重点看 /tmp、/home、/var 下出现的可执行文件。来源不明的先 chmod u-s 去掉 SUID 位,再用 rpm -Vf 或 dpkg -S 确认归属,必要时按入侵事件处理。
五、账户与 SSH 基线:顺手一起收
权限和内核之外,账户面同样属于基线:锁定无用账户(usermod -L)、设置空口令检查(awk -F: '(==""){print }' /etc/shadow)、SSH 关闭 root 直登并限制来源。防护建议上,可在边界侧配合 AegisX 的主机与访问控制能力,把基线策略与流量侧告警联动,减少单点遗漏。
六、上线前检查清单
- sysctl 配置已落盘并
sysctl --system生效,关键项复核通过。 - umask 已统一为 027,登录后新文件权限符合预期。
- shadow、SSH 私钥、crontab 权限已收紧。
- 全局可写目录已加粘滞位,可疑文件已处理。
- SUID/SGID 清单已比对,异常项有处置记录。
- 变更已归档,纳入季度巡检脚本。
行动建议:今天就挑一台非核心机器,按上面命令跑一遍,把输出保存成基线快照;确认无业务影响后再推广到生产。加固不是一次性任务,把检查写成脚本、定期跑差异,才是真正可持续的安全基线。
常见问题(FAQ)
内核参数加固改了之后重启就失效怎么办?
说明只做了临时生效。正确做法是把参数写入持久化配置文件,如/etc/sysctl.d/99-security.conf,再执行sysctl --system加载。临时用sysctl -w只适合验证,生产环境必须落盘,并确认没有其他配置文件覆盖同名键值,可用sysctl -a核对最终生效值。
umask设置成027会影响业务吗?
会有影响但通常可控。umask 027表示新建文件默认权限640、目录750,同组用户可读、其他用户无权限。若业务依赖其他用户读取共享目录,可能出现权限不足。建议先在测试环境验证,或对共享目录单独用ACL授权,而不是放宽全局umask。
怎么快速找出服务器上的异常SUID文件?
用find / -perm -4000 -type f列出所有SUID文件,再与发行版默认清单比对。重点关注/tmp、/home、/var下出现的SUID文件,以及非包管理器安装路径下的可执行文件。可用rpm -Vf或dpkg -S确认文件归属,来源不明的直接去掉SUID位并排查入侵。
全局可写目录和文件有什么风险?
全局可写意味着任何本地用户都能篡改内容。目录可写可能被植入恶意脚本或替换计划任务,文件可写可能被改写配置导致服务被控。排查用find / -xdev -type d -perm -0002和find / -xdev -type f -perm -0002,目录应加粘滞位,文件应收紧权限或确认属主。
安全基线加固需要多久做一次?
建议首次完整落地一次,之后按季度复核,并在系统升级、业务上线、人员变动后追加检查。内核参数与文件权限属于易漂移项,可写成脚本纳入巡检,输出差异报告。等保或合规场景通常要求有基线文档与定期核查记录,频率按制度执行。