XYCOVO CONSOLE KURISU · WEB 渗透 / AI 辅助攻防 ONLINE
#024 · 2025-02-20✓ PASS

Chronyd 时间同步

RHEL9 环境下 Chronyd 时间同步服务的完整配置指南,涵盖 chronyc 交互模式、服务器/客户端配置、同步状态检查及日志管理。
linux网络安全chronyntpAUTHOR: KURISU

在网络环境中,精确的时间同步对于日志一致性、安全审计、分布式系统协调至关重要。RHEL 从 8 开始使用 Chrony 替代传统 NTP 守护进程,提供更快、更准确的时间同步。


一、Chrony 概述

1.1 为什么精确计时很重要

在网络中,需要准确的数据包和日志的时间戳。在 Linux 系统中,NTP 协议由在用户空间运行的守护进程实现,用户空间守护进程更新内核中运行的系统时钟。

系统时钟通常使用时间戳计数器(TSC),TSC 是一个 CPU 寄存器,计算从上次重置的循环数,速度极快、分辨率高,且不会被中断。

从 Red Hat Enterprise Linux 8 开始,NTP 协议由 chronyd 守护进程实现,它可从 chrony 软件包获得。

1.2 Chrony 功能

功能说明
与 NTP 服务器同步将系统时钟与远程 NTP 服务器同步
与参考时钟同步支持 GPS 接收器等硬件参考时钟
手动时间输入同步支持手动输入时间进行同步
作为 NTPv4 服务器为网络中其他计算机提供时间服务
作为对等服务器与同级服务器互相同步

在多数条件下 Chrony 都表现良好,包括:

  • 时断时续的网络连接
  • 有大量网络拥塞的网络
  • 温度不稳定的环境(普通计算机时钟对温度敏感)
  • 不持续运行或在虚拟机上运行的系统

1.3 精度

  • 通过互联网同步:准确性在几毫秒之内
  • LAN 中机器:准确性在几十微秒之内
  • 硬件时间戳或硬件参考时钟:可以达到子微秒级

二、Chrony 组件

Chrony 包括两个主要组件:

组件说明
chronyd在用户空间运行的守护进程,负责时间同步
chronyc命令行工具,用于监控 chronyd 性能并在运行时更改参数

在默认情况下,chronyd 只接受来自本地 chronyc 实例的命令,但也可以配置为接受远程监控命令(应限制远程访问)。


三、安装与状态检查

3.1 安装

Chrony 在 RHEL 上默认安装。如果未安装,可使用以下命令:

# 安装 chrony
dnf install chrony -y

chronyd 守护进程的默认位置为 /usr/sbin/chronyd,命令行工具安装在 /usr/bin/chronyc

3.2 服务管理

# 启动并设置开机自启
systemctl enable --now chronyd

# 查看服务状态
systemctl status chronyd

# 重启服务(修改配置后)
systemctl restart chronyd

四、使用 chronyc 交互模式

4.1 进入交互模式

# 以 root 身份进入交互模式
chronyc
# chrony version 4.2
# Copyright (C) 1997-2003, 2007, 2009-2021 Richard P. Curnow and others
# chronyc>

在交互模式下输入 help 可查看所有可用命令:

chronyc> help
System clock:
tracking                    Display system time information
makestep                    Correct clock by stepping immediately
......
exit|quit                   Leave the program
help                        Generate this help

4.2 非交互模式

也可以在命令行直接指定命令:

# 非交互命令模式
chronyc tracking
chronyc sources
chronyc sourcestats

使用 chronyc 所做的更改不具有持久性,会在 chronyd 重启后丢失。要持久化更改,需修改 /etc/chrony.conf


五、检查同步状态

5.1 tracking 命令

chronyc tracking

输出示例及关键字段:

字段说明示例值
Reference ID当前参考时钟源771CB7B8 (119.28.183.184)
Stratum时钟层级(越小越准确)3
Ref time (UTC)上次同步的 UTC 时间Wed Mar 08 11:36:38 2023
System time系统时钟与 NTP 时间的偏差0.000400987 seconds slow
Last offset上次测量的偏移量-0.000400063 seconds
RMS offset长期偏移平均值0.000868900 seconds
Frequency时钟频率误差5.757 ppm slow
Residual freq残余频率误差-0.006 ppm
Skew频率估计的误差范围0.335 ppm
Root delay到参考时钟的总延迟0.058458306 seconds
Root dispersion最大误差范围0.007332922 seconds
Update interval更新间隔1033.4 seconds
Leap status闰秒状态Normal

5.2 sources 命令

sources 命令显示 chronyd 正在访问的当前时间源信息:

chronyc sources
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^- stratum2-1.ntp.mow01.ru.>     2  10   377   671    +12ms[  +11ms] +/- 108ms
^- ntp8.flashdance.cx            2  10   363   393    -46ms[  -46ms] +/- 183ms
^- tick.ntp.infomaniak.ch        1  10   377   690  -8219us[-8615us] +/- 100ms
^* 119.28.183.184                2  10   377   543  -2120us[-2520us] +/-  70ms

状态符号说明

符号含义
*当前最佳时间源(正在使用)
+可合并的候选源
-未合并的候选源
x可能出错的源
~变动太大的源
?不可用的源
^服务器
=对等服务器
#本地时钟

5.3 使用 -v 查看详细信息

chronyc sources -v
chronyc sourcestats -v

5.4 sourcestats 命令

sourcestats 命令显示每个源的偏移率和误差估算过程:

chronyc sourcestats
Name/IP Address            NP  NR  Span  Frequency  Freq Skew  Offset  Std Dev
==============================================================================
stratum2-1.ntp.mow01.ru.>  44  24  328m     +0.423      0.416    +19ms  4537us
ntp8.flashdance.cx         32  16  317m     +0.098      0.769    -46ms  6952us
tick.ntp.infomaniak.ch     47  27  345m     +0.398      0.236  -9923us  2774us
119.28.183.184             30  19  273m     -0.005      0.264  -4615ns  1847us
字段说明
NP测量集中的采样点数
NR同符号的残余运行次数
Span测量集的时长
Frequency估计的时钟频率误差 (ppm)
Freq Skew频率估计的误差
Offset估计的偏移量
Std Dev标准偏差

六、配置 Chrony 服务器

6.1 服务器端配置

编辑 /etc/chrony.conf 配置文件:

vim /etc/chrony.conf

关键配置项:

# 允许来自本地网络的 NTP 客户端访问
allow 192.168.0.0/16

# 指定上级 NTP 服务器
server ntp.example.com iburst

# 选择记录哪些日志
log measurements statistics tracking

allow 格式

格式说明
allow 192.168.0.0/16允许整个子网访问
allow 10.0.0.1允许单个主机访问
allow all允许所有主机(慎用)

修改配置后需要重启服务:

systemctl restart chronyd

6.2 防火墙配置

# Chronyd 使用 UDP 端口 123
firewall-cmd --permanent --add-service=ntp
firewall-cmd --reload

# 或者直接关闭防火墙(测试环境)
systemctl stop firewalld

七、配置 Chrony 客户端

7.1 客户端配置

编辑客户端的 /etc/chrony.conf

vim /etc/chrony.conf

将默认的 NTP 池替换为指定的服务器:

# 注释掉默认的 pool
#pool 2.rhel.pool.ntp.org iburst

# 指定自定义时间服务器
server 192.168.115.128 iburst

# 记录日志
log measurements statistics tracking

iburst 选项的作用:如果服务器无法访问,发送 8 个包而不是通常的 1 个包,加快初始同步速度。

7.2 验证客户端同步

# 重启 chronyd
systemctl restart chronyd

# 查看时间源
chronyc sources
chronyc sources -v

八、日志管理

8.1 日志文件

Chrony 的日志文件保存在 /var/log/chrony/ 目录下:

ll /var/log/chrony/
# -rw-r--r--. 1 chrony chrony 3699 Mar  8 21:06 measurements.log
# -rw-r--r--. 1 chrony chrony 2925 Mar  8 21:06 statistics.log
# -rw-r--r--. 1 chrony chrony 3432 Mar  8 21:06 tracking.log
日志文件内容
measurements.log每次测量的详细数据
statistics.log统计信息汇总
tracking.log系统时钟跟踪变化记录

九、关键 chronyc 命令速查表

命令功能
chronyc tracking查看系统时钟同步状态
chronyc sources查看时间源列表
chronyc sources -v查看时间源详细信息
chronyc sourcestats查看时间源统计信息
chronyc sourcestats -v查看时间源详细统计
chronyc makestep立即修正时钟(大步跳跃)
chronyc add server <host>运行时添加新时间源
chronyc delete <host>运行时删除时间源
chronyc activity查看 NTP 源的活动状态
chronyc clients查看连接的客户端
chronyc serverstats查看服务器统计信息

十、最佳实践

  1. 使用多个 NTP 源:至少配置 3-4 个时间源以提高可靠性和准确性
  2. 限制访问范围:使用 allow 指令限制客户端的 IP 范围,不要开放 allow all
  3. 配置日志:开启 log measurements statistics tracking 便于排查时间同步问题
  4. 防火墙放行:NTP 使用 UDP 端口 123,确保防火墙正确配置
  5. 配合 systemd-timesyncd:若不需要服务器功能,可考虑更轻量的 systemd-timesyncd(仅客户端)

← #023 Nginx Web 服务器…#025 Linux 计划任务… →