在 NTP 中禁用 tinker panic 0 有什么缺点?

在 NTP 中禁用 tinker panic 0 有什么缺点?

我们有时会遇到这样的问题:新服务器的 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,允许丑陋的偏移,但只有当它们在开始时被发现时才允许。

相关内容