我们有时会遇到这样的问题:新服务器的 BIOS 中的时间错误,因此时间可能会相差一个月。
当您在 VMware 中暂停虚拟机然后取消暂停时,时间也会偏离。由于 NTP 在最大偏移量后不会同步,因此我考虑在 /etc/ntp.conf 中使用 tinker panic 0。
默认最大偏移量为 1000 秒,这是什么原因导致 NTP 停止同步时间?我们正在使用 Puppet 设置 NTP,我正在考虑让它在 ntp.conf 中设置 tinker panic 0,这样 NTP 无论如何都会同步。这样做有什么缺点?
答案1
记录了无法与时间相差很大的服务器同步的原因这里:
5.1.1.4. 如果参考时间发生变化会发生什么?
理想情况下,参考时间在世界各地都是相同的。一旦同步,操作系统的时钟和参考时钟之间就不会出现任何意外的变化。因此,NTP 没有特殊的方法来处理这种情况。
相反,ntpd 的反应将取决于本地时钟和参考时间之间的偏移量。对于微小的偏移量,ntpd 将照常调整本地时钟;对于较小和较大的偏移量,ntpd 将暂时拒绝参考时间。在后一种情况下,操作系统的时钟将继续使用最后的校正,同时拒绝新的参考时间。一段时间后,小的偏移量(明显小于一秒)将发生偏移(缓慢调整),而较大的偏移量将导致时钟步进(重新设置)。巨大的偏移量将被拒绝,ntpd 将自行终止,认为一定发生了一些非常奇怪的事情。
在我当前的 NTP 配置中(也由 控制)puppet
,我强制与服务器同步,在文件中ntp.conf
使用tinker panic
,并在守护程序设置(/etc/sysconfig/ntpd
)中执行同步,如ntpd(8)
手册页:
-g 通常,如果偏移量超过恐慌阈值(默认为 1000 秒),ntpd 将退出并向系统日志发送一条消息。此选项允许将时间设置为任意值而不受限制;但是,这种情况只能发生一次。如果此后超过阈值,ntpd 将退出并向系统日志发送一条消息。此选项可以与 -q 和 -x 选项一起使用。
我这样做是因为我可以信任我所连接的 NTP 服务器。
适用于客户端的模块相关部分如下:
class ntp (
$foo
$bar
...
){
$my_files = {
'ntp.conf' => {
path => '/etc/ntp.conf',
content => template("ntp/ntp.conf.$template.erb"),
selrole => 'object_r',
seltype => 'net_conf_t',
require => Package['ntp'], },
'ntp-sysconfig' => {
path => '/etc/sysconfig/ntpd',
source => 'puppet:///modules/ntp/ntp-sysconfig',
require => Package['ntp'], },
...
}
$my_files_defaults = {
ensure => file,
owner => 'root',
group => 'root',
mode => '0644',
selrange => 's0',
selrole => 'object_r',
seltype => 'etc_t',
seluser => 'system_u',
}
create_resources(file, $my_files, $my_files_defaults)
exec { 'ntp initial clock set':
command => '/usr/sbin/ntpd -g -q -u ntp:ntp',
refreshonly => true,
timeout => '-1',
subscribe => File['/etc/ntp.conf'],
}
}
引用的文件内容如下:
$ cat devops/puppet/modules/ntp/files/ntp-sysconfig
# Drop root to id 'ntp:ntp' by default.
OPTIONS="-u ntp:ntp -p /var/run/ntpd.pid -g -a"
和:
$ cat devops/puppet/modules/ntp/templates/ntp.conf.RedHat.erb
# HEADER: This file was autogenerated by puppet.
# HEADER: While it can still be managed manually, it
# HEADER: is definitely not recommended.
tinker panic 0
<% server.each do |ntpserver| -%>
server <%= ntpserver %> autokey
<% end -%>
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
driftfile /var/lib/ntp/drift
crypto pw hunter2
crypto randfile /dev/urandom
keysdir /etc/ntp
hiera
这里缺少部分,但你明白我的意思。
答案2
最糟糕的情况是针对面向 LAN 的 GPS 接收器的攻击,这已被证明是可能的,这就是为什么 NTP 在这些情况下宁愿“离开”而不是立即破坏任何东西。在 NTP 设计时预计会出现这种问题或突然出现的软件错误,而且两者都可能发生。
该算法中的一个保护机制是检测所谓的假股票,但这只能检测到一些问题,主要是如果上游时钟突然发送向后的时间。
如果仅涉及“开始时间错误的时钟”:
- 您可以使用/etc/ntp/step-tickers(在 RHEL* 上,Debian 从未有过这个想法)。step-tickers 文件在启动 ntpd 本身之前需要一个或多个 NTP 服务器来运行 ntpdate。
- 另外(或另外),还有-G选择权ntpd,允许丑陋的偏移,但只有当它们在开始时被发现时才允许。