Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

18.2. 了解 chrony 及其配置

18.2.1. 了解 chronyd 和 chronyc

chrony 守护进程(chronyd) 可以由命令行工具 chronyc 监控和控制。这个工具提供了一个命令提示,它允许输入多个命令来查询 chronyd 的当前状态并更改其配置。在默认情况下,chronyd 只接受来自本地 chronyc 实例的命令,但它也可以被配置为接受来自远程主机的监控命令。应该限制远程访问。

18.2.2. 了解 chrony 配置命令

chronyd 的默认配置文件是 /etc/chrony.conf-f 选项可以用来指定备选配置文件路径。更多选项请查看 chronyd man page。

以下是 chronyd 配置选项选择:

注释
注释需要以 #、%、; 或 ! 开始
allow
(可选)指定一个主机、子网或网络来允许 NTP 连接到作为 NTP 服务器的机器。默认是不允许连接。

例 18.1. 使用 allow 选项授予访问权限:

  • 使用这个命令授予对 IPv4 的访问权限:

    allow 192.0.2.0/24
  • 使用这个命令授予对 IPv6 的访问权限:

    allow 2001:0db8:85a3::8a2e:0370:7334
注意

需要在防火墙中打开 UDP 端口号 123 以便允许客户端访问:

~]# firewall-cmd --zone=public --add-port=123/udp

如果您想永久打开端口 123,请使用 --permanent 选项:

~]# firewall-cmd --permanent --zone=public --add-port=123/udp
cmdallow
这与 allow 指令(请参阅 allow 类似,不同的地方是它允许到特定子网或主机的访问控制(而不是 NTP 客户端访问)。(访问控制表示 chronyc 可以在这些主机上运行并成功地连接到这个计算机上的 chronyd。) 其语法是相同的。还有一个 cmddeny all 指令,它与 cmdallow all 指令类似。
dumpdir
chronyd 重启后保存测量历史记录的目录路径(假设系统时钟行为在未运行期间不会进行任何更改)。如果使用此功能(通过配置文件中的 dumponexit 命令,或者 chronyc中的 dump onexit 命令),应使用 dumpdir 命令来定义保存测量历史记录的目录。
dumponexit
如果存在此命令,则表示 chronyd 应在程序退出时保存其每个时间源的测量历史记录。(请参阅上面的 dumpdir 命令)。
hwtimestamp
hwtimestamp 指令启用硬件时间戳进行非常准确的同步。详情请查看 chrony.conf(5) 手册页。
local

local 关键字用于允许 chronyd 从客户端轮询它的角度实时显示同步,即使它没有当前的同步源。这个选项通常用于隔离网络中的"主(master)"计算机,其中需要几台计算机同步,同时使用手动输入将"master"与实时保持一致。

这个命令的示例如下:

local stratum 10

较大的值 10 表示时钟与参考时钟非常低,使其时间不可靠。如果计算机访问了另一个计算机并最终与参考时钟同步,则几乎可以肯定这个值会小于 10。因此,本地 命令选择高值(如 10)可防止计算机本身与实时混淆,这让它始终暴露给对真实服务器可见的客户端。

log

log 命令表示要记录某些信息。它接受以下选项:

measurements
这个选项将原始 NTP 测量以及相关信息记录到名为 measurements.log 的文件。
statistics
这个选项将有关递归处理的信息记录到名为 statistics.log 的文件。
tracking
这个选项将系统速率或丢失率估算的更改记录到名为 trace.log 的文件。
rtc
这个选项记录有关系统实时时钟的信息。
refclocks
这个选项将原始和过滤的参考时钟测量记录到名为 refclocks.log 的文件。
tempcomp

这个选项将温度测量和系统速率记录到名为 tempcomp.log 的文件。

日志文件被写入 logdir 命令指定的目录中。

这个命令的示例如下:

log measurements statistics tracking
logdir

该指令允许指定记录文件所在的目录。

使用这个指令的示例如下:

logdir /var/log/chrony
makestep

通常 chronyd 会根据需要降低或加快时钟速度,让系统逐渐修正任何时间误差。在某些情况下,系统时钟可能还没有改变,这个修正过程需要很长时间才能修正系统时钟。如果调整大于阈值,则这个指令会强制 chronyd 对系统时钟进行步骤,但前提是自 chronyd 启动以来没有更多时钟更新(一个负值可用来禁用限制)。这在使用参考时钟时特别有用,因为 initstepslew 指令只适用于 NTP 源。

使用这个指令的示例如下:

makestep 1000 10

如果调整大于 1000 秒,这会增加系统时钟,但仅在前十个时钟更新中。

maxchange

这个指令在时钟更新中设定了最大允许的误差。检查只能在指定数量的更新后执行,以便进行大量系统时钟的初始调整。当误差大于指定的最大值时,它将忽略指定的次数,然后 chronyd 将放弃并退出(一个负值可用来永不退出)。在这两种情况下都会向 syslog 发送一条信息。

使用这个指令的示例如下:

maxchange 1000 1 2

在第一次时钟更新后, chronyd 会在每次时钟更新时检查误差,它将忽略两个大于 1000 秒的调整,然后退出。

maxupdateskew

chronyd 的任务之一就是根据计算机的参考源确定运行时钟的速度或速度。此外,它计算了围绕估算值进行错误绑定的估算。

如果错误范围太大,这表明测量结果尚未下降,而且估计的增益或损失率不是非常可靠。

maxupdateskew 参数是确定一个估算是否不可靠而无法使用的阈值。默认情况下,阈值是 1000 ppm。

语法格式为:

maxupdateskew skew-in-ppm

skew-in-ppm 的典型值可能是 100(通过电话线拨号连接到服务器),5 或 10(LAN 中的计算机)。

需要注意的是,这不是唯一的防止使用不可靠估算的方法。在任何时候,chronyd 都会跟踪估计的增益或丢失率,以及估算时绑定的错误。当根据其中一个来源进行另一个计算后产生一个新的估算时,会使用加权组合算法更新主估算。因此,如果 chronyd 有一个高度可靠的 master 估算值,并且生成了一个有大错误约束的新估计值,那么在新的 master 估计值中会略过现有的 master 估算。

minsources

minsources 指令设置在更新本地时钟前需要在源选择算法中被视为可选择的最少源数量。

语法格式为:

minsources number-of-sources

默认情况下,number-of-sources 是 1。可将 minsources 设置为较大的值来提高可靠性,因为多个源会相互对应。

noclientlog
该指令不使用任何参数,它表明客户访问不会被记录。通常它们会被记录,允许在 chronyc 中使用 client 命令报告统计信息。
reselectdist

chronyd 从可用源中选择同步源时,它更喜欢使用最小同步距离的源。然而,为了避免当不同源的距离相似时频繁地重选源,为当前没有被选择的源增加了一个固定的距离。这可通过 reselectdist 选项设置。默认情况下,长度为 100 微秒。

语法格式为:

reselectdist dist-in-seconds
stratumweight

stratumweight 指令设置当 chronyd 从可用源中选择同步源时每个 stratum 应添加的距离到同步距离。

语法格式为:

stratumweight dist-in-seconds

默认情况下, dist-seconds 为 1 毫秒。这意味着,stratum 低的源会比 stratum 高的源优先考虑,即使它们的距离更差也是如此。把 stratumweight 设置为 0 时,会导致在选择源时 chronyd 忽略 stratum。

rtcfile

The rtcfile 指令定义文件的名称,其中 chronyd 可以保存与跟踪系统实时时钟(RTC)准确性相关的参数。

语法格式为:

rtcfile /var/lib/chrony/rtc

当文件退出以及 writetc 命令在 chrony c 中发出时,chrony d 会 保存此文件中的信息。保存的信息是 RTC 在某些时期出现的错误,该时期(从 1970 年 1 月 1 日起秒数)以及 RTC 赢得或丢失时间的速度。并非所有实时时钟都受到支持,因为它们的代码特定于系统。请注意,如果使用这个指令,则不应该手动调整实时时钟,因为这会影响 chrony如果实时时钟偏移是以随机间隔调整的速率。

rtcsync
默认情况下,rtcsync 指令会出现在 /etc/chrony.conf 文件中。这会通知保持系统时钟同步的内核,内核会每 11 分钟更新实时时钟。

18.2.3. 使用 chronyc 的安全性

chronyc 可以通过两种方式访问 chronyd

  • 互联网协议(IPv4 或 IPv6)
  • UNIX 域套接字,可由 root 用户 或 chrony 用户在本地访问。

默认情况下,chronyc 连接到 Unix 域套接字。默认路径为 /var/run/chrony/chronyd.sock。如果这个连接失败,比如 chronyc 在非 root 用户下运行时,chrony c 会尝试连接到 127.0.0.1,然后 ::1。

网络中只允许以下监控命令,它们不会影响 chronyd 的行为:

  • activity
  • manual list
  • rtcdata
  • smoothing
  • sources
  • sourcestats
  • tracking
  • waitsync

chronyd 接受这些命令的主机集合可以使用 chronyd 配置文件中的 cmdallow 指令,或者在 chronyc 中使用 cmdallow 命令配置。默认情况下,仅接受来自本地主机(127.0.0.1 或 ::1)的命令。

所有其他命令只能通过 Unix 域套接字进行。当通过网络发送时,chronyd 会返回 Notauthorized 错误,即使它来自 localhost。

使用 chronyc远程访问 chronyd

  1. 通过在 /etc/chrony.conf 文件中添加以下内容来允许 IPv4 和 IPv6 地址的访问:

    bindcmdaddress 0.0.0.0

    或者

    bindcmdaddress :
  2. 使用 cmdallow 指令允许来自远程 IP 地址、网络或者子网的命令。

    /etc/chrony.conf 文件中添加以下内容:

    cmdallow 192.168.1.0/24
  3. 在防火墙中打开端口 323 从远程系统连接。

    ~]# firewall-cmd --zone=public --add-port=323/udp

    如果想永久打开端口 323,使用 --permanent

    ~]# firewall-cmd --permanent --zone=public --add-port=323/udp

请注意, allow 指令是用于 NTP 访问,而 cmdallow 指令用于允许接收远程命令。可以使用本地运行的 chronyc 临时完成这些更改。编辑配置文件以做永久性更改。