อะไรคือข้อเสียของการปิดใช้งาน tinker panic 0 ใน NTP


10

บางครั้งเรามีปัญหาที่เซิร์ฟเวอร์ใหม่มีเวลาที่ไม่ถูกต้องในไบออสดังนั้นเวลาจึงสามารถปิดได้ภายในหนึ่งเดือน

เมื่อคุณหยุดการทำงานของ VM ใน VMware จากนั้นยกเลิกการหยุดชั่วคราวเวลาจะถูกปิดเช่นกัน เนื่องจาก NTP ไม่ซิงค์หลังจากออฟเซ็ตสูงสุดฉันกำลังพิจารณาใช้ tinker panic 0 ใน /etc/ntp.conf

อะไรคือสาเหตุที่มีออฟเซ็ตสูงสุดเริ่มต้น 1,000 วินาทีที่ทำให้ NTP หยุดการซิงค์เวลา เรากำลังใช้ Puppet เพื่อตั้งค่า NTP ฉันกำลังพิจารณาที่จะตั้งค่า tinker panic 0 ใน ntp.conf ดังนั้น NTP จะซิงค์อยู่ดี อะไรคือข้อเสียของการทำเช่นนี้?


คำตอบ:


8

สาเหตุของการไม่ซิงค์กับเซิร์ฟเวอร์ที่มีเวลาแตกต่างกันมีการบันทึกไว้ที่นี่ :

5.1.1.4 จะเกิดอะไรขึ้นถ้าเวลาอ้างอิงเปลี่ยนแปลง?

นึกคิดเวลาอ้างอิงจะเหมือนกันทุกที่ในโลก เมื่อซิงโครไนซ์แล้วไม่ควรมีการเปลี่ยนแปลงที่ไม่คาดคิดระหว่างนาฬิกาของระบบปฏิบัติการและนาฬิกาอ้างอิง ดังนั้น NTP จึงไม่มีวิธีพิเศษในการจัดการกับสถานการณ์

แต่ปฏิกิริยาของ ntpd จะขึ้นอยู่กับการชดเชยระหว่างเวลาท้องถิ่นและเวลาอ้างอิง สำหรับ offset ntpd เล็ก ๆ จะปรับนาฬิกาท้องถิ่นตามปกติ สำหรับ offsets ขนาดเล็กและขนาดใหญ่ ntpd จะปฏิเสธเวลาอ้างอิงในขณะที่ ในกรณีหลังนาฬิกาของระบบปฏิบัติการจะดำเนินการแก้ไขล่าสุดต่อไปในขณะที่เวลาอ้างอิงใหม่ถูกปฏิเสธ หลังจากเวลาผ่านไปบางครั้งการชดเชยขนาดเล็ก (น้อยกว่าหนึ่งวินาที) จะถูกฆ่า (ปรับอย่างช้าๆ) ในขณะที่การชดเชยที่มากขึ้นจะทำให้นาฬิกาถูกเหยียบ (ตั้งค่าใหม่) ออฟเซ็ตขนาดใหญ่ถูกปฏิเสธและ ntpd จะยุติตัวเองโดยเชื่อว่ามีบางสิ่งแปลก ๆ เกิดขึ้น

ในการกำหนดค่า NTP ปัจจุบันของฉันควบคุมโดยpuppetฉันบังคับให้ซิงโครไนซ์กับเซิร์ฟเวอร์ทั้งในntp.confไฟล์การใช้tinker panicและในการตั้งค่า daemon ( /etc/sysconfig/ntpd) ตามที่อธิบายไว้ในntpd(8)manpage:

-g โดยปกติแล้ว ntpd จะออกพร้อมกับข้อความไปยังบันทึกของระบบหากออฟเซ็ตเกินกว่าเกณฑ์ความตื่นตระหนกซึ่งเท่ากับ 1,000 วินาทีโดยค่าเริ่มต้น ตัวเลือกนี้ช่วยให้เวลาที่จะตั้งค่าใด ๆ โดยไม่ จำกัด ; อย่างไรก็ตามสิ่งนี้สามารถเกิดขึ้นได้เพียงครั้งเดียว หากเกินเกณฑ์หลังจากนั้น 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ส่วนหนึ่งจะหายไปนี่ แต่คุณได้รับความคิด


3

ตัวอย่างที่เลวร้ายที่สุดคือการโจมตีตัวรับสัญญาณ GPS ที่ใช้กับ LAN ของคุณซึ่งได้รับการพิสูจน์แล้วว่าเป็นไปได้และเป็นสาเหตุที่ NTP ในกรณีเหล่านั้น "ทิ้ง" แทนที่จะเสียอะไรทันที ปัญหาประเภทนี้หรือข้อบกพร่องของซอฟต์แวร์อย่างกะทันหันถูกคาดหวังในเวลาออกแบบของ NTP และทั้งคู่ก็สามารถเกิดขึ้นได้

กลไกการป้องกันอย่างหนึ่งในอัลกอริทึมคือการตรวจจับสิ่งที่เรียกว่าfalsetickerแต่สามารถตรวจพบปัญหาบางอย่างเท่านั้นส่วนใหญ่หากนาฬิกาต้นน้ำส่งเวลาย้อนหลังทั้งหมดในทันที

หากเป็นเพียงเรื่อง "นาฬิกาผิดเวลาเริ่มต้น":

  • คุณสามารถใช้/ etc / ntp / step-tickers (บน RHEL *, Debian ไม่เคยมีความคิด) ไฟล์ step-tickers ใช้เซิร์ฟเวอร์ NTP หนึ่งเซิร์ฟเวอร์ขึ้นไปเพื่อรัน ntpdate เทียบกับก่อนที่จะเริ่ม ntpd เอง
  • อีกทางเลือกหนึ่ง (หรือเพิ่มเติม) มีตัวเลือก-gสำหรับntpdซึ่งอนุญาตให้มีการชดเชยที่น่าเกลียด แต่ก็ต่อเมื่อพบเมื่อเริ่มต้นเท่านั้น
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.