第 14 章 配置时间同步
在 IT 环境中保持准确的时间非常重要。所有跨网络设备的一致的时间提高了日志文件的可追溯性,以及某些依赖同步时钟的协议。例如,Kerberos 使用时间戳来防止重播攻击。
14.1. 使用 Chrony 套件配置 NTP
准确的计时在 IT 中很重要,原因有多个。例如在网络中,需要准确的数据包和日志的时间戳。在 Linux 系统中,NTP
协议是由在用户空间运行的守护进程实现的。
用户空间守护进程更新内核中运行的系统时钟。系统时钟可以通过使用不同的时钟源来维护系统的时间。通常, 使用 时间戳计数器(TSC)。TSC 是一个 CPU 寄存器,它计算从上次重置的循环数。它非常快,分辨率很高,且不会被中断。
从 Red Hat Enterprise Linux 8 开始,NTP
协议由 chronyd
守护进程实现,它可从 chrony
软件包中的存储库中获得。
以下章节描述了如何使用 chrony 套件来配置 NTP。
14.1.1. chrony 套件介绍
chrony 是 网络时间协议(NTP)
的一种实现。您可以使用 chrony:
-
将系统时钟与
NTP
服务器同步 - 将系统时钟与参考时钟同步,如 GPS 接收器
- 将系统时钟与手动时间输入同步
-
作为
NTPv4(RFC 5905)
服务器或对等服务器,为网络中的其他计算机提供时间服务
在多数条件下,chrony 都会表现良好,包括时断时续的网络连接、有大量网络数据的网络、温度不稳定(普通计算机时钟对温度敏感)以及不持续运行或在虚拟机上运行的系统。
通过互联网镜像同步的两天机器之间的准确性通常在几毫秒之内,而对于 LAN 中的机器则为几十微秒。硬件时间戳或硬件参考时钟可以将两台计算机之间的准确性提高到子微秒级。
chrony 包括 chronyd
(一个在用户空间运行的守护进程)和 chronyc(可用来监控 chronyd
性能并在运行时更改各种操作参数的命令行程序)。
chrony 守护进程(chronyd
) 可以由命令行工具 chronyc 监控和控制。这个工具提供了一个命令提示,允许输入大量命令来查询 chronyd
的当前状态并修改其配置。在默认情况下,chronyd
只接受来自本地 chronyc 实例的命令,但它也可以被配置为接受来自远程主机的监控命令。应该限制远程访问。
14.1.2. 使用 chronyc 来控制 chronyd
您可以使用 chronyc 命令行工具控制 chronyd
。
流程
要在互动模式中使用命令行工具 chronyc 来更改本地
chronyd
实例,以根
用户身份输入以下命令:# chronyc
如果要使用某些受限命令,chronyc 需要以
root
运行。chronyc 命令提示符如下所示:
chronyc>
-
要列出所有的命令,请输入
help
。 或者,如果与以下命令一同调用,该工具也可以在非交互命令模式下调用:
chronyc command
使用 chronyc 所做的更改不具有持久性,它们会在 chronyd
重启后丢失。要使更改有持久性,修改 /etc/chrony.conf
。
14.1.3. 迁移到 chrony
在 Red Hat Enterprise Linux 7 中,用户可以在 ntp 和 chrony 之间进行选择,以确保准确计时。有关 ntp 和 chrony、ntpd
和 chronyd
之间的区别,请参阅 ntpd 和 chronyd 之间的差别。
从 Red Hat Enterprise Linux 8 开始,不再支持 ntp。chrony 默认启用。因此,您可能需要从 ntp 迁移到 chrony。
在大多数情况下,从 ntp 迁移到 chrony 是非常直接的。程序、配置文件和服务的相应名称为:
ntp 名称 | chrony 名称 |
---|---|
/etc/ntp.conf | /etc/chrony.conf |
/etc/ntp/keys | /etc/chrony.keys |
ntpd | chronyd |
ntpq | chronyc |
ntpd.service | chronyd.service |
ntp-wait.service | chrony-wait.service |
通过使用 -q
选项或 -t
选项,chronyd
可以替代 ntpdate 和 sntp 程序(包含在 ntp
发布中)。可在命令行中指定配置以避免读取 /etc/chrony.conf
。例如:如下所示运行 chronyd
可以替代运行 ntpdate ntp.example.com
:
# chronyd -q 'server ntp.example.com iburst'
2018-05-18T12:37:43Z chronyd version 3.3 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG)
2018-05-18T12:37:43Z Initial frequency -2.630 ppm
2018-05-18T12:37:48Z System clock wrong by 0.003159 seconds (step)
2018-05-18T12:37:48Z chronyd exiting
ntpstat 工具程序之前包含在 ntp
软件包中,且只支持 ntpd
。现在它支持 ntpd
和 chronyd
。它现在包括在 ntpstat
软件包中。
14.1.3.1. 迁移脚本
名为 ntp2chrony.py
的 Python 脚本包含在 chrony
软件包文档中(/usr/share/doc/chrony
)。这个脚本会自动将现有的 ntp
配置转换为 chrony
。它支持 ntp.conf
文件中最常用的指令和选项。所有在转换中忽略的行都会作为注释包含在生成的 chrony.conf
文件中以便用户进行核查。在 ntp
密钥文件中指定但未在 ntp.conf
中被标记为可信密钥的密钥会作为注释出现在生成的 chrony.keys
文件中。
默认情况下,该脚本不会覆盖任何文件。如果 /etc/chrony.conf
或 /etc/chrony.keys
已经存在,使用 -b
选项可以重新命名文件以作为备份。这个脚本支持其他选项。--help
选项输出所有支持选项。
在 ntp
软件包中提供了一个默认 ntp.conf
调用脚本示例:
# python3 /usr/share/doc/chrony/ntp2chrony.py -b -v
Reading /etc/ntp.conf
Reading /etc/ntp/crypto/pw
Reading /etc/ntp/keys
Writing /etc/chrony.conf
Writing /etc/chrony.keys
本例中唯一忽略的指令是 disable monitor
,它在 noclientlog
指令中有一个等同的 chrony 项。它包括在默认 ntp.conf
中只是用于缓解一个安全工具。
生成的 chrony.conf
文件通常包含大量与 ntp.conf
中限制行对应的 allow
指令。如果您不想使用 chronyd
作为 NTP
服务器,从 chrony.conf
中删除所有 allow
指令。