本篇介紹如何在 Linux 中安裝並設定 NTP 網路校時服務,讓系統自動校正時間。

系統的時間對於 Linux 伺服器來說是很重要的,如果系統的時間不準確,會連帶產生許多安全性問題。若要讓 Linux 系統維持正確的時間,可以透過 NTP 網路校時的方式來處理,以下是各種 NTP 網路校時的使用方式。

手動更新系統時間

如果想要以手動更新系統時間,可以執行:

# 網路校時
sudo ntpdate time.stdtime.gov.tw
13 Apr 11:16:01 ntpdate[19617]: step time server 118.163.81.61 offset 0.515170 sec

這裡所使用的 time.stdtime.gov.tw 這台 NTP 伺服器是由中華電信所提供的,其可用的 NTP 伺服器如下:

  • tock.stdtime.gov.tw
  • watch.stdtime.gov.tw
  • time.stdtime.gov.tw
  • clock.stdtime.gov.tw
  • tick.stdtime.gov.tw

校正時間時,任選一台伺服器來使用即可。

校正完系統時間之後,建議順便將正確的時間寫入 BIOS 的時鐘:

# 將時間寫入 BIOS
sudo hwclock -w

設定 ntpdate 定期自動校時

若要設定讓系統可以定期自動校時,直接將校時的指令寫在 crontab 中即可,編輯 /etc/crontab 設定檔,加入一行:

# 定時自動網路校時
10 5 * * * root (/usr/sbin/ntpdate time.stdtime.gov.tw && /sbin/hwclock -w) &> /dev/null

這一行設定會讓系統自動在每天早上 5 點 10 分進行網路校時,並將時間寫入 BIOS 的時鐘。

NTP 服務

如果想讓 Linux 可以自動校時外,也提供其他台機器校時服務,可以安裝並啟動 ntpd 服務,以下我以 CentOS Linux 為例,示範安裝與設定方式,其他的 Linux 發行版的操作方式則大同小異。

NTP 服務(ntpd)本身就有自動校時的功能,若啟用 NTP 服務後,就不可以使用 ntpdate 的方式校時,兩者僅能擇一使用。

安裝 ntp 套件

檢查一下系統是否有安裝 ntp 這個套件:

yum list installed ntp

如果出現 Error: No matching Packages to list 的訊息,就表示系統上沒有安裝 ntp 套件,請用 yum 安裝:

sudo yum install ntp

設定 NTP 服務

編輯 /etc/ntp.conf 設定檔,修改一下 NTP 伺服器的設定,將原本的 server 設定註解掉,改為自己指定的 NTP 伺服器:

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

# 自己指定 NTP 伺服器
server tock.stdtime.gov.tw
server watch.stdtime.gov.tw
server time.stdtime.gov.tw
server clock.stdtime.gov.tw
server tick.stdtime.gov.tw

這裡若是不想修改設定檔,直接使用 CentOS Linux 預設的伺服器也可以運作,只是那些預設的 NTP 伺服器距離自己比較遠,校時的時候會花比較久一點,但也是可以正確校時的。

啟用 NTP 服務

修改好 NTP 的設定檔之後,啟動 ntpd 服務:

# 啟動 ntpd 服務
sudo systemctl start ntpd

查看一下 ntpd 服務是否正常啟動:

# 檢查 ntpd 服務狀態
systemctl status ntpd
● ntpd.service - Network Time Service
   Loaded: loaded (/usr/lib/systemd/system/ntpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2018-04-13 11:33:48 CST; 7s ago
  Process: 31593 ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS (code=exited, status=0/SUCCESS)
 Main PID: 31594 (ntpd)
   CGroup: /system.slice/ntpd.service
           └─31594 /usr/sbin/ntpd -u ntp:ntp -g
[略]

Active 欄位顯示 active (running) 就表示 ntpd 有正常在執行。

確認無誤後,再設定開機自動啟動 ntpd 服務:

# 設定開機自動啟動 ntpd 服務
sudo systemctl enable ntpd

參考資料:鳥哥的 Linux 私房菜