雖然我們可以使用 date
或 timedatectl
的工具將系統設定準確,但這似乎只限制在小量的管理上,現今應用系統架構複雜,每一個系統通常都是 2 台主機起跳,對於整個企業來說也許會有 10 台以上各種不同任務的主機需要管理,此時以手動設定時間的方式就比較沒有效率了。
在現代企業環境中,時間同步是極為重要的。一個小小的時間偏差可能會導致資料不一致,甚至是嚴重的系統故障。手動設定每台主機的時間不僅耗時,而且不實用,尤其當我們管理的不僅僅是一兩台機器,而是數十或數百台的時候。
使用 NTP 進行多終端校時 |
---|
因此,在整個複雜的資訊結構中,會選擇一個校時機制,這個校時機制使用了網路來達成,也就是我們常聽到的網路時間 NTP Network Time Protocol)服務,NTP 實做上是使用 UDP/123 進行資料同步,所以當組織內的電腦或主機向同一個時間來源進行同步時,就不會發生不同設備時間不一樣的問題。
Chrony 在 Enterprise Linux 7 中正式使用,這個套件較傳統 ntp 提供更準確的校時機制,比如:
基本上 chrony
為了增加時間的準確性,提更多項機制來完成這個目標。
若要使用 chrony
做為我們的校時工具,則需要安裝同名套件,實做方式如下:
student$ sudo dnf install -y chrony
現在我們可以使用 chrony 來校準時間。
chrony
需要啟同一個 chronyd
的服務,這個服務會在背景執行並且確認時間的準確性。
透過下列方式啟動 chronyd
student$ sudo systemctl enable --now chronyd
我們需要確認主機從哪些地方來校準時間,那麼使用 chronyc
就達到這個需求,chronyc
是一個用戶端工具可以知道服務的資訊。
讓我們來看看主機從哪幾個地方校正時間:
student$ sudo chrony sources
210 Number of sources = 4
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* server1b.meinberg.de 2 10 377 517 -1604us[-1576us] +/- 109ms
^+ purple.bonev.com 2 10 177 273m -16ms[ -16ms] +/- 212ms
^+ 144.24.146.96 2 10 377 955 -2524us[-2496us] +/- 240ms
^+ 185.102.185.67 2 10 377 468 -5531us[-5531us] +/- 145ms
從上面的輸出可以看到主機選用了 4 個校時伺服器做為校正來源,這樣比起之前的 ntpdate 準確性更高。
現今各企業的資訊安全需求增加,各主機通常會限制不可以直接連接對外服務以減低安全問題,所以在組織中就會建立自己的校時伺服器,最常用的就是 Windows Active Directory 服務了,在 Windows 的解決方案就是直接對應到 AD 就完成了校時,此時若把 Linux 的校時來源設定成 AD 主機的話那麼內部的時間就可以達到統一的目標。
要達到這個需求我們只需要修改一個檔案,也就是 Chrony 的主要設定檔: /etc/chrony.conf
。
在 /etc/chrony.conf
檔案中,我們可以指定用於時間同步的服務器。例如,若要指定內部的 Active Directory 伺服器 (172.16.6.3) 作為時間來源,可以編輯設定檔:
# 編輯 Chrony 設定檔
student$ sudo vi /etc/chrony.conf
找到系統預設 server 或 pool 開頭的指向,改為:
server 172.16.6.3 iburst
iburst
參數表示如果第一次連接失敗,Chrony 將會發送一系列封包進行快速連接。
編輯完成後存檔,重新啟動 chronyd
讓設定檔生效:
student$ sudo systemctl restart chronyd
啟用新的位置後,一樣透過 chronyc
來確認是否從指定來源校時:
student$ sudo chronyc sources
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 172.16.6.3 3 6 17 11 -2939ns[ -32us] +/- 9513us
當然我們也以使用先前介紹的 timedatectl
來確認 NTP 是否同步。
使用下列方式來確認:
student$ timedatectl
Local time: Fri 2023-09-08 21:23:43 CST
Universal time: Fri 2023-09-08 13:23:43 UTC
RTC time: Fri 2023-09-08 13:23:43
Time zone: Asia/Taipei (CST, +0800)
NTP enabled: yes
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
從上面的輸出可以知道 NTP 服務有啟同而且有進行同步,這樣就可以確保時間的準確。
若在組織內部沒有自行建立的校時系統,使用外部校時系統也可以,都能夠避免主機或用戶端時間不正確的問題。
在台灣,我們可以使用 中華電信研究所時間與頻率國家標準實驗室 提供的公開 NTP 服務,其位置如下:
其它如 https://www.ntppool.org/zone/tw 所列表的主機也都可以使用: