内核参数怎么改才留得住
内核参数加固最容易犯的错是改了但不生效、或者生效了但重启后丢失。规范的落地方式是三步:把参数写进内核参数目录下的配置文件、用系统命令统一加载、最后直接读取内核中的实际值确认。写入文件保证持久化,读取内核值排除「配置文件存在但没被加载」的情况,两步都不能省。
基本信息
| 加固项 | 内核参数配置管理 |
|---|---|
| 适用平台 | Linux(RHEL/CentOS/Debian/Ubuntu) |
| 风险等级 | 中 |
| 配置位置 | 内核参数配置目录下的独立文件,文件名前缀决定加载顺序 |
| 验证方式 | 读取内核实际值,而不是只看配置文件 |
典型使用场景
- 主机加固:批量下发内核参数基线并确认生效
- 合规整改:条款要求内存保护、网络防护等内核层配置
- 故障排查:确认实际生效值,判断是否被其他配置文件覆盖
- 变更复核:系统升级或云镜像更新后确认参数未回退
- 容器环境评估:判断容器内参数是否可改、真实值来自何处
加载与验证
加载与验证
echo 'kernel.randomize_va_space = 2' >> /etc/sysctl.d/99-hardening.conf
sysctl --system # 按顺序加载全部配置文件
sysctl kernel.randomize_va_space net.ipv4.tcp_syncookies net.ipv4.conf.all.rp_filter
sysctl -a 2>/dev/null | grep -E 'syncookies|rp_filter' # 全量取值抽查直接读内核值
直接读内核值
cat /proc/sys/kernel/randomize_va_space
cat /proc/sys/net/ipv4/tcp_syncookies
ls -l /etc/sysctl.d/ # 查看配置文件与加载顺序
sysctl -p /etc/sysctl.d/99-hardening.conf # 单独加载某个文件(排查用)配置位置与优先级
| 位置 | 作用 | 说明 |
|---|---|---|
| 主配置文件 | 传统内核参数配置入口 | 历史遗留参数常在这里,需一起核对 |
| 内核参数目录 | 推荐的下发位置 | 独立文件便于版本管理与回滚 |
| 文件名前缀 | 决定加载顺序 | 编号大的后加载,会覆盖先加载的同名参数 |
| 运行时修改 | 仅当前运行有效 | 重启即丢,不能替代配置文件 |
| 云镜像预置文件 | 厂商预置的参数 | 可能与自建配置冲突,需明确覆盖关系 |
用较大的文件名前缀能保证自己的配置最后加载:与云厂商预置文件冲突时,以文件名编号更大的为准,但冲突项要显式确认,不能默认自己的值一定生效。改动前后都要留一份取值快照,便于回滚时对比。
运行时修改命令只影响当前运行状态,重启后回到配置文件的值,两者不要混用。容器内的部分内核参数为只读,由宿主机命名空间决定,容器里加载报错属预期现象,设置点应在宿主机或编排层。
推荐的落地流程
按固定流程执行:先在配置文件里写入待加固参数并留存改动前的取值,然后统一加载,逐项读取内核实际值确认,最后把配置纳入配置管理与版本控制。后续在系统升级、镜像更新与云侧变更后各复核一次,避免参数在无人察觉的情况下回退。