适用场景

Linux 服务器出事故,多半不是内核问题,而是规范问题:所有人用 root、句柄数不够、时间不同步、cron 里躺着三年前的脚本。把规范和巡检做成清单,问题能少一大半。

配置步骤(文件句柄与时间同步)

# 1) 句柄现状
ulimit -n
cat /proc/sys/fs/file-nr
lsof -u appuser | wc -l

# 2) systemd 服务调高句柄(对服务生效,改 limits.conf 只对登录会话生效)
systemctl edit mysvc.service
# [Service]
# LimitNOFILE=65535
# LimitNPROC=65535
systemctl daemon-reload && systemctl restart mysvc

# 3) 时间同步
chronyc sources -v
chronyc tracking
systemctl status chronyd | head -5

# 4) 常见偏差来源
#  - 虚机挂起后时间漂移
#  - 内网 NTP 源不可达
#  - 防火墙拦了 UDP 123
timedatectl

关键参数与建议

  • 账号治理:一人一号,禁止共享 root;离职当天禁用账号并清理密钥
  • sudo 授权:按需授权具体命令,禁止 NOPASSWD ALL
  • 密钥管理:authorized_keys 定期审计,禁止遗留测试公钥
  • 句柄与进程数:按业务设 nofile/nproc(systemd 里设,改 limits.conf 对本机 systemd 服务无效)
  • 时间同步:统一 chrony 指向内网 NTP,偏差超 100ms 要查
  • 定时任务:cron 统一登记(谁建、干什么、失败怎么办),禁用来源不明脚本
  • 日志:syslog 集中收集,本机日志轮转保留 30 天以上
  • 基线:最小化安装、关闭不必要服务、SSH 禁用密码与 root 直登

容易踩的坑

  • 业务报 too many open files 才想起改句柄
  • 只改 limits.conf,systemd 服务不生效,重启后依旧
  • NTP 源指向公网且不可达,时间一直漂
  • 多台机器时间不一致,分布式锁与认证间歇失败
  • 虚机长时间挂起后时间直接偏几小时
  • 没有监控时间偏差,等证书校验失败才发现

验证与巡检

chronyc tracking | grep -E 'Leap|System time|Last offset'
cat /proc/sys/fs/file-nr
systemctl show mysvc -p LimitNOFILE

# 偏差阈值:绝对值 < 100ms
  • 巡检:句柄水位 < 60%、LimitNOFILE 已设、时间偏差 < 100ms、NTP 源可达

小结

Linux 规范验收:随便挑一台服务器,能说清谁能登、谁有 sudo、有哪些定时任务、时间偏差多少。四项都能查到,规范才算落地。

> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。