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
通过在
/etc/chrony.conf
文件中添加以下内容来允许 IPv4 和 IPv6 地址的访问:bindcmdaddress 0.0.0.0
或者
bindcmdaddress :
使用
cmdallow
指令允许来自远程 IP 地址、网络或者子网的命令。在
/etc/chrony.conf
文件中添加以下内容:cmdallow 192.168.1.0/24
在防火墙中打开端口 323 从远程系统连接。
~]# firewall-cmd --zone=public --add-port=323/udp
如果想永久打开端口 323,使用
--permanent
。~]# firewall-cmd --permanent --zone=public --add-port=323/udp
请注意, allow
指令是用于 NTP
访问,而 cmdallow
指令用于允许接收远程命令。可以使用本地运行的 chronyc 临时完成这些更改。编辑配置文件以做永久性更改。