chronyd服务

目录

一、man 5 chrony.conf

二、makestep步进时间选项

三、使用Windows NTP Server

3.1、问题

3.2、解释

3.3、验证


一、man 5 chrony.conf

充当NTP server

/etc/chrony.conf 里面有个allow选项,默认是注释掉的,也就是说chronyd服务默认只做ntp client。

把allow配置上,chronyd服务就既当ntp client,也充当ntp server,所有client可以和自己同步时间。

allow 10.30.2.0/24,chronyd服务就既当ntp client,也充当ntp server,只允许10.30.2.0/24网段和自己同步时间。

二、makestep步进时间选项

最近做RHCE的实验,nfs用krb5p实现全程加密和身份认证,需要nfs服务端、客户端的时间与KDC的时间同步,否则kerberos分发的ticket就会失效,nfs不能挂载和访问。那么就需要在nfs的服务端、客户端都配置chronyd服务,使其时间与KDC同步。具体做法是

[root@server0 ~]# systemctl enable chronyd.service
[root@server0 ~]# vim /etc/chrony.conf

#修改server行
server kdc.ip.address iburst

[root@server0 ~]# systemctl restart chronyd.service

但是经过几天以后发现自动挂载又失效了。经过反复试验发现是时间没有同步。

练习环境是嵌套虚拟化环境,在物理机的VMware上有一个虚拟机foundation,在虚拟机foundation上用KVM虚拟了classroom、server和desktop三台虚拟机。其中classroom充当KDC,server和desktop充当nfs的服务端和客户端。复现该问题,foundation和classroom都在运行,时间都是9点。9点钟挂起foundation,10点钟恢复foundation。恢复后发现foundation的时间是10点,而classroom的时间还停留在9点。即使配置了classroom和foundation的ntp时间同步,这个现象还是会发生。

原因在于chronyd的机制,官网已经给出了解答和建议,详见3.3. Is chronyd allowed to step the system clock?。官方文档3.3这一节给出了详细的说明。

默认情况下,chronyd通过减慢或加快时钟速度来逐渐调整时钟。如果时钟与实际时间偏差太大,则需要很长时间才能纠正错误。步进时钟(时间跳变)可以快速修正偏差较大的时间误差,但步进时钟(时间跳变)能会导致一些程序异常,因此应当慎用这个选项。

maketep可允许chronyd步进时钟。 例如,chrony.conf有

makestep 10 1

这里表示如果时间的误差小于10秒,则通过减慢或加快时钟速度来逐渐调整时钟。如果时间的误差大于10秒,在第1次更新时间时允许步进时间。通常,建议仅在前几次更新中允许该步骤,但在某些情况下(例如,没有RTC或在不确定的时间内挂起和恢复的虚拟机)可能需要随时进行步进时钟。 这时需要将上面的例子改为

makestep 10 -1

这样,误差大于10秒时,也进行步进时钟,就会随时步进时间,保证时间准确。

三、使用Windows NTP Server

3.1、问题

这一段是2020年8月17日加上的。问题是这样的,最近学习搭建JumpServer堡垒机,启用了MFA的双因子认证。双因子的动态口令是根据时间计算得出的,因此服务器的时间应当准确。配置了chrony和域控服务器时间同步,但是时间却没有同步。

3.2、解释

查阅了chrony的官方文档,查到原因在于chronyd的机制,官网已经给出了解答和建议,详见3.4. Using a Windows NTP server?。官方文档3.4这一节给出了详细的说明。

官方文档对Windows的NTP服务进行了一番吐槽和批判。总之是Window的NTP不好用,误差太大会导致chronyd同步时间不准确,因此chronyd会忽略Window的NTP。虽然chronyc sources -v会显示一个有效的时间偏移量,但是chronyd不会同步时间。为此,可以使用 chronyc ntpdata 来进行查看。

那么,怎么才能让chronyd 和 Windows NTP Server同步时间呢?需要在/etc/chrony.conf文件中加入 maxdistance 配置。时间偏移量小于这个值时chrony同步,否则不同步,这个值默认是3秒,详细内容可以 man 5 chrony.conf查看。

3.3、验证

为了验证解决这个问题,我做了一个实验,那就是一台Windows Server 配置了w32time服务充当NTP服务器,并将这台服务器时间故意调整为8月19日的时间。再配置时间为8月18日的linux的chrony使之与Windows Server时间同步。

先看一下Window Server的时间是8月19日02:24,Linux的时间是8月18日00:24。Window Server的NTP服务正常,UDP/123短款开放。

chronyd服务_第1张图片

在配置文件/etc/chrony.conf 中加入server配置后,重启chronyd。发现时间并没有同步,但是可以看到巨大的时间差93597秒!

chronyd服务_第2张图片

接下来,我们加入maxdistance,值为94000.0,超过93597秒,再chronyc sources -v看看结果。发现时间同步了,验证成功。

chronyd服务_第3张图片

你可能感兴趣的:(#,Linux实践与随笔,Linux,linux,运维,ntp,chronyd)