Linux時間設定與NTP服務配置
阿新 • • 發佈:2019-02-09
第一部分:時間設定
一.時間和時區
格林威治時間(GMT),是0時區時間.計算機中是UTC。它是Coordinated Universal Time的簡寫。雖然UTC和GMT的值相等(誤差相當之小),但是UTC已經被認定為是國際標準,所以我們都應該遵守標準只使用UTC。
例:北京時間上午10點。可以表示為:
10:00 CSTCST是Chinese Standard Time表示北京時間
02:00 UTC中國處於UTC+8時區,故UTC時間為02:00
二.設定Linux時區
/usr/share/zoneinfo
這個目錄下,這裡基本涵蓋了大部分的國家和城市。
檢視每個time zone當前的時間可以使用zdump命令
# zdump /usr/share/zoneinfo/Asia/Shanghai
/usr/share/zoneinfo/Asia/Shanghai Thu Jul 5 17:02:41 2012 CST
設定系統所在時區(time-zone)
/etc/localtime這個檔案定義了系統所在時區。
方法一:
cp /usr/share/zoneinfo/posix/Asia/Shanghai /etc/localtime
# date 檢視時間
# cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# date
Thu Jul 5 17:10:44 CST 2012
方法二:
設定TZ環境變數 TZ=time zone
使用tzselect命令
# tzselect
當TZ變數沒有定義的時候系統使用/etc/localtime來確定time zone.
三.硬體時鐘和系統時鐘
RTC=Real Time Clock
系統時鐘就是作業系統的kernel所用來計算時間的時鐘。
# date
Fri Jul 6 09:50:25 CST 2012
通過date命令,檢視系統時間。
# hwclock --show
Fri 06 Jul 2012 09:48:00 AM CST -0.992019 seconds
通過hwclock --show命令檢視硬體時間。
同步系統時間和硬體時間
#hwclock --hctosys
#hwclock -s
把硬體時間設定成系統時間
#hwclock --systohc
#hwclock -w
把系統時間設定成硬體時間
# hwclock --set --date="mm/dd/yy hh:mm:ss"
設定硬體時間,也可在BIOS中設定。
# date -s "dd/mm/yyyy hh:mm:ss"
修改系統時間。
第二部分:NTP服務安裝配置
四.設定NTP Server前的準備
1). 安裝ntp軟體包。
# rpm -ivh ntp-4.2.2p1-5.el5.rpm
2). 選擇合適的網際網路NTP Server,至少兩個。
常用ntp伺服器地址:
server 0.cn.pool.ntp.org prefer
server 1.cn.pool.ntp.org prefer
server 210.72.145.44
#國家授時中心伺服器IP地址
server ntp.sjtu.edu.cn
#(上海交通大學網路中心NTP伺服器地址)
可用的公共時間伺服器列表可以從下面的地址獲取:
http://support.ntp.org/bin/view/Servers/NTPPoolServers
3).在啟動ntpd服務之前與網際網路NTP伺服器做一個同步,使得我們機器的時間儘量接近標準時間。
手動同步原因:
1>.若系統時間比正確時間快NTP不能調整系統時間,故需要手動設定或手動同步。
2>.若當前系統時間與NTP伺服器時間相差很大,則需要長時間進行調整,手動可減時間。
使用ntpdate命令
# ntpdate 210.72.145.44
6 Jul 10:17:03 ntpdate[3868]: adjust time server 210.72.145.44 offset -0.027175 sec
# ntpdate 0.cn.pool.ntp.org
6 Jul 10:31:43 ntpdate[4312]: adjust time server 114.80.81.1 offset -0.003615 sec
五.啟動與修改NTP 配置檔案
修改配置檔案 /etc/ntp.conf
替換預設的server
# vi /etc/ntp.conf
server 0.cn.pool.ntp.org
server 1.cn.pool.ntp.org
server 210.72.145.44
server ntp.sjtu.edu.cn
server s1a.time.edu.cn
啟動NTP Server並且設定開機後自動執行
# /etc/init.d/ntpd start
或是
#service ntpd start
# chkconfig --level 35 ntpd on
六.測試NTP服務的執行
現在我們已經啟動了NTP的服務,但是我們的系統時間到底和伺服器同步了沒有呢? 為此NTP提供了一個很好的檢視工具: ntpq (NTP query)
我建議大家在開啟NTP伺服器後就可以執行ntpq命令來監測伺服器的執行.這裡我們可以使用watch命令來檢視一段時間內伺服器各項數值的變化
# watch ntpq -p
Every 2.0s: ntpq -p Sat Jul 7 00:41:45 2007
remote refid st t when poll reach delay offset jitter
==============================================================================
+210.72.145.44 193.62.22.98 1 u 52 64 377 8.578 10.203 289.032
*mozart.musicbox 192.5.41.41 2 u 54 64 377 19.301 -60.218 292.411
remote: 它指的就是本地機器所連線的遠端NTP伺服器。
refid: 它指的是給遠端伺服器提供時間同步的伺服器。
st: 遠端伺服器的級別。由於NTP是層型結構,有頂端的伺服器,多層的Relay Server再到客戶端。所以伺服器從高到低級別可以設定為1-16。為了減緩負荷和網路堵塞,原則上應該避免直接連線到級別為1的伺服器的。
t: 暫無。
when: 一個計時器用來告訴我們還有多久本地機器就需要和遠端伺服器進行一次時間同步。
poll: 本地機和遠端伺服器多少時間進行一次同步(單位為秒)。在一開始執行NTP的時候這個poll值會比較小,那樣和伺服器同步的頻率也就增加了,可以儘快調整到正確的時間範圍。之後poll值會逐漸增大,同步的頻率也就會相應減小。
reach: 這是一個八進位制值,用來測試能否和伺服器連線,每成功連線一次它的值就會增加。
delay: 從本地機發送同步要求到伺服器的round trip time。
offset: 這是個最關鍵的值, 它告訴了我們本地機和伺服器之間的時間差別。offset越接近於0,我們就和伺服器的時間越接近。
jitter: 這是一個用來做統計的值。它統計了在特定個連續的連線數裡offset的分佈情況。簡單地說這個數值的絕對值越小我們和伺服器的時間就越精確。
最前面+和*的含義:
"*" - 遠端的伺服器已經被確認為主NTP Server,系統的時間將由這臺機器所提供。
"+" - 它將作為輔助的NTP Server和帶有*號的伺服器一起為我們提供同步服務。當*號伺服器不可用時它就可以接管。
"-" - 遠端伺服器被clustering algorithm認為是不合格的NTP Server。
"x" - 遠端伺服器不可用。
七.NTP 安全設定
第一:只允許區域網特定使用者(客戶端)連線到我們的伺服器。
第二:NTP 客戶端不能修改我們伺服器上的時間。
在/etc/ntp.conf檔案中可以用restrict關鍵字來配置以上的要求。
首先對於預設的client拒絕所有的操作。
restrict default kod nomodify notrap nopeer noquery
然後允許本機地址一切的操作。
restrict 127.0.0.1
最後我們允許區域網內所有client連線到這臺伺服器同步時間.但是拒絕讓他們修改伺服器上的時間。
restrict 192.168.1.0 mask 255.255.255.0 nomodify
把這三條加入到/etc/ntp.conf中就完成了我們的簡單配置。
NTP還可以用key來做authenticaiton。
八.NTP client的設定
在linux客戶端上執行ntpdate ntp_server_ip 就可以根據時間伺服器統一區域網的時間了,將命令放到cron裡凌晨定期執行。
crontab –e
0 3 * * * /usr/sbin/ntpdate {NTP Server IP Address}
九.補充說明
1> 配置檔案中的driftfile
每一個system clock的頻率都有小小的誤差,這也是機器執行一段時間後會不精確的原因。NTP會自動來監測時鐘的誤差值並予以調整。但這是一個冗長的過程,NTP會把記錄下來的誤差先寫入driftfile。這樣即使重啟機器之前的計算結果也不會丟失。
2> 如何同步硬體時鐘?
NTP一般只會同步system clock。
若要同步硬體時鐘,可以將命令寫入到cron中。
3> 配置檔案ntp.conf詳細說明
ntp.conf裡主要可以使用如下幾個命令:restrict,server,driftfile,keys
其中server是設定上級時間伺服器用的,而restrict是設定哪臺伺服器可以和ntp server進行時間同步,具有什麼樣的許可權。driftfile是用來指定記錄時間差異的檔案,keys是用來指定認證key檔案的。
restrict的格式為:
restrict [客戶端IP] mask [netmask_IP] [parameter]
客戶端IP,就是都是哪幾臺伺服器要和這臺ntp server進行同步的ip地址
最後的parameter可以有如下幾個引數:
ignore:拒絕連線到ntp server。
nomodiy:可以連線到ntp server,但是不能對ntp server進行時間上的修改。
noquery:不提供對ntp server查詢時間,也就是拒絕和ntp server進行時間同步。
notrap:不提供 trap 遠端登入功能。
notrust:對沒有認證的客戶端不提供服務。
如果引數沒有設定,那就表示該IP (或子網)沒有任何限制!
restrict default nomodify notrap noquery
此項設定的含義是不允許其他計算機修改或查詢配置在本機linux系統上的NTP服務。
其中default表示所有IP。
restrict default nomodify notrap noquery
此項設定的含義是不允許其他計算機修改或查詢配置在本機linux系統上的NTP服務。
其中default表示所有IP.
restrict 127.0.0.1
開放本機內部迴環網路介面,以便於在本地對NTP服務進行監控及配置。
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
允許192.168.1.0網路段的NTP客戶端使用本NTP伺服器進行網路校進,但不允許它們修改本機的NTP服務配置。如想開放此項功能需要根據實際網路情況修改網路段及掩碼,並把註釋符"#"去掉。
server 0.pool.ntp.org
指定上層的NTP伺服器。linux系統中預設指定Internet上的時間伺服器池中的時間伺服器作為上層NTP伺服器。NTP伺服器池pool.ntp.org中擁有三百多臺自願加入其中的公共NTP伺服器。如果想更準確的校時也可以自己指定上層NTP伺服器。
server命令的格式是:
server [IP or hostname] [prefer]
其中[IP or hostname]為上級時間伺服器的IP或者域名,主機名:
可以是192.168.12.177形式,或者time.nist.gov再或者ntpserver這樣的形式。
後面的[prefer]引數是可選的,加上prefer後,ntp server和上級時間伺服器同步時會優先先訪問加了prefer這行的進行同步。
server 127.127.1.0
fudge 127.127.1.0 stratum 10
127.127.1.0是一個特殊的地址,代表本機的系統時鐘。fudge是指定本地時間源的層號,數字越大,優先順序越低。所以當有外部時間源時會優先使用外部時間源。
driftfile /var/lib/ntp/drift
指定記錄與上層NTP伺服器聯絡時所花費時間的檔案,指定了用來儲存系統時鐘頻率偏差的檔案, ntpd程式使用它來自動地補償時鐘的自然漂移, 從而使時鐘即使在切斷了外來時源的情況下,仍能保持相當的準確度。
還可以在/etc/ntp.conf檔案中還可以進行如下設定
peer 192.168.16.100 #設定IP地址為192.168.16.100的NTP伺服器可以與本機的NTP伺服器相互進行網路校時。
broadcast 224.0.1.1 #224.0.1.1是多播網址,設定該NTP伺服器可對所有能訪問到的網段進行多播。
broadcast 192.168.1.255 #設定該NTP伺服器可對子網192.168.1.0/24中的所有計算機定期廣播正確的時間。
修改/etc/ntp/step-tickers檔案,在該檔案中把所用的上層NTP伺服器的IP地址或域名加入即可。