生产环境Linux初始化需阻断所有默认风险行为:关闭NetworkManager防IP漂移,禁用IPv6避免静默丢包,配置chronyd替代ntpd实现平滑时间同步,通过limits.conf和systemd unit双路径设置ulimit防文件描述符耗尽。

生产环境的 Linux 系统初始化不是“装完系统就跑服务”,而是必须阻断默认配置中所有可能引发安全、稳定性或可观测性风险的默认行为。跳过这一步,后续任何应用层加固都像在漏水的船上补漆。
关闭 NetworkManager 服务(CentOS/RHEL 7+ / Rocky 8+)
NetworkManager 在服务器场景下与 network 服务冲突,会劫持 /etc/sysconfig/network-scripts/ifcfg-* 配置,导致静态 IP 意外漂移、bonding/bridge 接口反复重载,甚至 SSH 断连。
- 执行
systemctl stop NetworkManager并systemctl disable NetworkManager - 确认
systemctl is-active network返回active,且nmcli device status为空或仅显示lo - 若已启用 NM,需先
nmcli connection delete清理残留连接,再重启network服务
禁用 IPv6 协议栈(除非业务明确依赖)
多数中间件(如 Nginx、MySQL、Java 应用)未显式绑定 :: 时,默认监听 0.0.0.0 和 ::,但内核 IPv6 路由表异常或 RA(Router Advertisement)开启会导致连接被静默丢弃,排查困难。
- 临时禁用:
sysctl -w net.ipv6.conf.all.disable_ipv6=1和net.ipv6.conf.default.disable_ipv6=1 - 永久生效:在
/etc/sysctl.conf中追加上述两行,并执行sysctl -p - 验证:
cat /proc/sys/net/ipv6/conf/all/disable_ipv6输出应为1;ip -6 addr不应列出除::1外的地址
配置 chronyd 为唯一时间同步源(替代 ntpd)
ntpd 在容器化或高负载下易出现 step 跳变,触发应用超时;而 chronyd 支持平滑 slewing、离线补偿和更好的网络抖动适应性,是 RHEL/CentOS 7+ 默认且推荐方案。
- 停用并屏蔽
ntpd:systemctl stop ntpd && systemctl disable ntpd - 编辑
/etc/chrony.conf,注释掉默认 pool,改用内网 NTP 服务器(如server 192.168.10.1 iburst),添加makestep 1.0 -1允许首次启动时校正大偏差 - 重启后检查:
chronyc tracking应显示Reference ID和合理偏移;chronyc sources -v中状态列应含*(当前选定源)
设置 ulimit 与 systemd 服务资源限制
全局 /etc/security/limits.conf 对 systemd 管理的服务无效——因为 systemd 会覆盖 PAM limits。不显式配置,Java 应用常因 Too many open files 崩溃,Nginx worker 进程无法打开足够连接。
- 对用户级进程(如部署用户):在
/etc/security/limits.d/90-nproc.conf中写入* soft nofile 65536和* hard nofile 65536 - 对服务进程(关键!):在对应 unit 文件中(如
/etc/systemd/system/nginx.service.d/override.conf)添加:[Service] LimitNOFILE=65536 LimitNPROC=65536
,然后执行systemctl daemon-reload && systemctl restart nginx - 验证:
systemctl show nginx | grep LimitNOFILE应输出LimitNOFILE=65536;进入服务进程命名空间后cat /proc/也应匹配/limits | grep "Max open files"
这些配置项看似零散,但任意一项遗漏都可能在流量高峰、安全扫描或跨机房迁移时暴露为单点故障。真正难的不是执行命令,而是理解每个开关背后影响的是哪个子系统、哪类日志、哪种超时路径。










