Π§Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ Π·Π°Π΄Π°Ρ‡Π°, Ρ‚Π΅ΠΌ Ρ‡Π°Ρ‰Π΅ я ошибаюсь

Π§Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ Π·Π°Π΄Π°Ρ‡Π°, Ρ‚Π΅ΠΌ Ρ‡Π°Ρ‰Π΅ я ошибаюсь

Π­Ρ‚Π° Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½Π°Ρ Π·Π°Π΄Π°Ρ‡Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° Π² ΠΎΠ΄ΠΈΠ½ ΠΈΠ· пятничных Π΄Π½Π΅ΠΉ ΠΈ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Π»Π° Π·Π°Π½ΡΡ‚ΡŒ 2-3 ΠΌΠΈΠ½ΡƒΡ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. Π’ ΠΎΠ±Ρ‰Π΅ΠΌ, ΠΊΠ°ΠΊ всСгда.

КоллСга попросил ΠΏΠΎΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ скрипт Ρƒ Π½Π΅Π³ΠΎ Π½Π° сСрвСрС. Π‘Π΄Π΅Π»Π°Π», сдал Π΅ΠΌΡƒ ΠΈ ΠΎΠ±Ρ€ΠΎΠ½ΠΈΠ» Π½Π΅Π½Π°Ρ€ΠΎΠΊΠΎΠΌ: «ВрСмя ΡΠΏΠ΅ΡˆΠΈΡ‚ Π½Π° 5 ΠΌΠΈΠ½ΡƒΡ‚Β». Π‘Π΅Ρ€Π²Π΅Ρ€ Π΅Π³ΠΎ, ΠΏΡƒΡΡ‚ΡŒ сам ΠΈ разбираСтся с синхронизациСй. ΠŸΠΎΠ»Ρ‡Π°ΡΠ°, час ΠΏΡ€ΠΎΡˆΠ΅Π», Π° ΠΎΠ½ всё ΠΏΡ‹Ρ…Ρ‚ΠΈΡ‚ ΠΈ Ρ‚ΠΈΡ…ΠΎ матСрится.

Β«Π‘Π΅ΡΡ‚ΠΎΠ»ΠΎΡ‡ΡŒ! β€” ΠΏΠΎΠ΄ΡƒΠΌΠ°Π» я, ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°ΡΡΡŒ Π² консоль сСрвСра β€” Π½Ρƒ Π»Π°Π΄Π½ΠΎ ΠΎΡ‚ΠΎΡ€Π²ΡƒΡΡŒ Π΅Ρ‰Ρ‘ Π½Π° ΠΏΠ°Ρ€Ρƒ ΠΌΠΈΠ½ΡƒΡ‚.Β»

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ntp, rdate, sdwdate Π½Π΅ установлСны, timesyncd ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ ΠΈ Π½Π΅ Π·Π°ΠΏΡƒΡ‰Π΅Π½.

# timedatectl
      Local time: Sun 2019-08-25 20:44:39 +03
  Universal time: Sun 2019-08-25 17:44:39 UTC
        RTC time: Sun 2019-08-25 17:39:52
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Π—Π΄Π΅ΡΡŒ сразу ΠΎΡ‚ΠΌΠ΅Ρ‡Ρƒ, Ρ‡Ρ‚ΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ врСмя Π²Π΅Ρ€Π½ΠΎΠ΅: ΠΏΠΎ Π½Π΅ΠΌΡƒ Π±ΡƒΠ΄Π΅Ρ‚ Π»Π΅Π³Ρ‡Π΅ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ дальшС.

ΠžΡ‚ΡΡŽΠ΄Π° ΠΈ Π½Π°Ρ‡Π°Π»Π°ΡΡŒ Ρ‡Π΅Ρ€Π΅Π΄Π° ошибок.

Ошибка пСрвая. Π‘Π°ΠΌΠΎΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΡΡ‚ΡŒ

ΠšΠ»Π°Ρ†-клац…

# systemctl enable systemd-timesyncd.service && systemctl start systemd-timesyncd.service && ntpdate 0.ru.pool.ntp.org && timedatectl set-ntp on && timedatectl
25 Aug 21:00:10 ntpdate[28114]: adjust time server 195.210.189.106 offset -249.015251 sec
      Local time: Sun 2019-08-25 21:00:10 +03
  Universal time: Sun 2019-08-25 18:00:10 UTC
        RTC time: Sun 2019-08-25 18:00:10
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a

Всё ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ, врСмя ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ, систСмноС совпадаСт с Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ. Β«Π—Π°Π±ΠΈΡ€Π°ΠΉΒ», β€” ΠΎΠ±Ρ€ΠΎΠ½ΠΈΠ» я ΠΈ вСрнулся ΠΊ своим Π΄Π΅Π»Π°ΠΌ.

Β«Π§Ρ‚ΠΎ Π·Π°Π±ΠΈΡ€Π°ΠΉ? β€” возмутился ΠΊΠΎΠ»Π»Π΅Π³Π°. β€” ВрСмя ΠΏΡ€Π΅ΠΆΠ½Π΅Π΅!Β»

Π§Π΅ΠΌ большС Ρ€Π΅ΡˆΠ°Π΅ΡˆΡŒ Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡ Ρ‚Π΅ΠΌ большС Π·Π°ΡˆΠΎΡ€ΠΈΠ²Π°Π΅Ρ‚ΡΡ ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΠ΅ ΠΈ ΡƒΠΆΠ΅ Π½Π΅ Π΄ΡƒΠΌΠ°Π΅ΡˆΡŒ, Ρ‡Ρ‚ΠΎ сотая ΠΈΠ»ΠΈ тысячная ситуация Π±ΡƒΠ΄Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, Π½ΠΎ Π½Π΅ Π² этот Ρ€Π°Π·.

# timedatectl
      Local time: Sun 2019-08-25 21:09:15 +03
  Universal time: Sun 2019-08-25 18:09:15 UTC
        RTC time: Sun 2019-08-25 18:05:04
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

БистСмноС врСмя снова Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅.

ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π΅Ρ‰Ρ‘ Ρ€Π°Π·:

# ntpdate 0.ru.pool.ntp.org && timedatectl && sleep 1 && timedatectl
25 Aug 21:07:37 ntpdate[30350]: step time server 89.175.20.7 offset -249.220828 sec
      Local time: Sun 2019-08-25 21:07:37 +03
  Universal time: Sun 2019-08-25 18:07:37 UTC
        RTC time: Sun 2019-08-25 18:07:37
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
      Local time: Sun 2019-08-25 21:11:46 +03
  Universal time: Sun 2019-08-25 18:11:46 UTC
        RTC time: Sun 2019-08-25 18:07:37
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΠΎ-Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ:

# date -s "2019-08-25 21:10:30" && date && sleep 1 && timedatectl
Sun Aug 25 21:10:30 +03 2019
Sun Aug 25 21:10:30 +03 2019
      Local time: Sun 2019-08-25 21:14:36 +03
  Universal time: Sun 2019-08-25 18:14:36 UTC
        RTC time: Sun 2019-08-25 18:10:30
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

А Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

# hwclock --hctosys && timedatectl && sleep 1 && timedatectl
      Local time: Sun 2019-08-25 21:11:31 +03
  Universal time: Sun 2019-08-25 18:11:31 UTC
        RTC time: Sun 2019-08-25 18:11:31
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: yes
 RTC in local TZ: no
      DST active: n/a
      Local time: Sun 2019-08-25 21:15:36 +03
  Universal time: Sun 2019-08-25 18:15:36 UTC
        RTC time: Sun 2019-08-25 18:11:32
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

ВрСмя устанавливаСтся Π½Π° долю сСкунды, ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ Β«ΡΠΏΠ΅ΡˆΠΈΡ‚ΡŒΒ» вновь.

ΠŸΡ€ΠΈ этом Π² Π»ΠΎΠ³Π°Ρ…, Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ Ρ€ΡƒΡ‡Π½ΠΎΠΉ смСны, Π²ΠΈΠ΄ΠΈΠΌ лишь ΠΎΡ‚Ρ‡Ρ‘Ρ‚Ρ‹ систСмы, ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ врСмя измСнилось, соотвСтствСнно Π² ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ/Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΡƒΡŽ стороны ΠΈ ΠΈΠ·Ρ€Π΅Π΄ΠΊΠ° Resyncing ΠΎΡ‚ systemd-timesyncd.

Aug 25 21:18:51 wisi systemd[1]: Time has been changed
Aug 25 21:18:51 wisi systemd-timesyncd[29258]: System time changed. Resyncing.
Aug 25 21:18:51 wisi systemd[1187]: Time has been changed
Aug 25 21:18:51 wisi systemd[1]: Time has been changed
Aug 25 21:18:51 wisi systemd[1187]: Time has been changed

здСсь

# ps afx | grep "[1]187"
 1187 ?        Ss     0:02 /lib/systemd/systemd --user

Π’ этот ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΡƒΠΆΠ΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ, Π½ΠΎ ΠΌΠΎΠ·Π³ Π·Π° 18 Π»Π΅Ρ‚ админства Π½Π°Ρ€Π°Π±ΠΎΡ‚Π°Π» статистику ошибок Β«Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈΒ» ΠΈ ΠΏΠΎ ΠΏΡ€ΠΈΠ²Ρ‹Ρ‡ΠΊΠ΅ снова обвиняСт ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ.
ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ Π΅Ρ‘ Π½Π°ΠΏΡ€ΠΎΡ‡ΡŒ.

# timedatectl set-ntp off && systemctl stop systemd-timesyncd.service
# hwclock --hctosys && timedatectl && sleep 1 && timedatectl
      Local time: Sun 2019-08-25 21:25:40 +03
  Universal time: Sun 2019-08-25 18:25:40 UTC
        RTC time: Sun 2019-08-25 18:25:40
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
      Local time: Sun 2019-08-25 21:29:31 +03
  Universal time: Sun 2019-08-25 18:29:31 UTC
        RTC time: Sun 2019-08-25 18:25:41
       Time zone: Europe/Minsk (+03, +0300)
     NTP enabled: no
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a

ΠΈ Π² Π»ΠΎΠ³Π°Ρ…

Aug 25 21:25:40 wisi systemd[1]: Time has been changed
Aug 25 21:25:40 wisi systemd[1187]: Time has been changed
Aug 25 21:29:30 wisi systemd[1]: Time has been changed
Aug 25 21:29:30 wisi systemd[1187]: Time has been changed

Resyncing ΠΏΡ€ΠΎΠΏΠ°Π» ΠΈ Π² ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΌ Π»ΠΎΠ³ΠΈ дСвствСнно чисты.

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ Π²Ρ‹Π²ΠΎΠ΄Ρ‹ tcpdump ΠΏΠΎ 123-ΠΌΡƒ ΠΏΠΎΡ€Ρ‚Ρƒ Π½Π° всСх интСрфСйсах. Никаких запросов Π½Π΅Ρ‚, Π½ΠΎ врСмя всё Ρ‚Π°ΠΊΠΆΠ΅ Β«ΡƒΠ±Π΅Π³Π°Π΅Ρ‚Β».

Ошибка вторая. БпСшка

Π”ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π½Π΅Π΄Π΅Π»ΠΈ остаётся час, Π° ΡƒΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ с ΠΏΠ»Ρ‘Π²ΠΎΠΉ Π½Π΅Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ Π½Π΅ хочСтся (Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°ΠΉΡ‚Π΅ внимания Π½Π° врСмя Π² ΠΊΠΎΠ΄Π΅, ΡΡ‚Π°Ρ‚ΡŒΡ писалась Π² ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π½ΠΈ).
И Ρ‚ΡƒΡ‚ вновь вмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ я Π½Π°Ρ‡Π°Π» ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒ объяснСниС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π― Π³ΠΎΠ²ΠΎΡ€ΡŽ Β«ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Ρ‚ΡŒΒ», ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π½Π΅ смотря Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊΠΈΠΌΠΈ Π±Ρ‹ Π½Π΅ Π±Ρ‹Π»ΠΈ Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΌΠΈ объяснСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, это ΠΎΡˆΠΈΠ±ΠΎΡ‡Π½Ρ‹ΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹.

Π”Π°Π½Π½Ρ‹ΠΉ сСрвСр являСтся стримминговым ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅Ρ‚ ΠΏΠΎΡ‚ΠΎΠΊ DVB-S2 Π² IP. Π’ ΠΏΠΎΡ‚ΠΎΠΊΠ΅ DVB-S ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, поэтому ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊΠΈ, ΠΌΡƒΠ»ΡŒΡ‚ΠΈΠΏΠ»Π΅ΠΊΡΠΎΡ€Ρ‹, скрСмблСры ΠΈ Ρ‚Π΅Π»Π΅Π²ΠΈΠ·ΠΎΡ€Ρ‹ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΈΡ… для синхронизации систСмных часов. Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Π° DVB-S ΠΏΠ»Π°Ρ‚ Π²ΠΊΠΎΠΌΠΏΠΈΠ»Π΅Π½Ρ‹ Π² ядро, поэтому самый быстрый способ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΡƒΠ±Ρ€Π°Ρ‚ΡŒ DVB-S2-ΠΏΠΎΡ‚ΠΎΠΊ β€” это ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΊΠ°Π±Π΅Π»ΠΈ ΠΈΠ΄ΡƒΡ‰ΠΈΠ΅ с Β«Ρ‚Π°Ρ€Π΅Π»ΠΎΠΊΒ». Π‘Π»Π°Π³ΠΎ сСрвСр Π·Π° стСнкой, посСму Ρ‚Π°ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΈ Π±Ρ‹Ρ‚ΡŒ.

ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Ссли Π±Ρ‹ Π² Π»ΠΎΠ³Π°Ρ… Π±Ρ‹Π»ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΌ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ, этого Π±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ, Π½ΠΎ ΠΎΠ± этом, ΠΎΠΏΡΡ‚ΡŒ, ΠΆΠ΅, Π² ΠΊΠΎΠ½Ρ†Π΅ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Ну ΠΈ Ρ€Π°Π· ΠΌΡ‹ ΡƒΠΆΠ΅ ΡƒΠ΄Π°Π»ΠΈΠ»ΠΈ всС спутниковыС сигналы ΡƒΠ΄Π°Π»ΠΈΠΌ ΠΈ Π½Π°Π·Π΅ΠΌΠ½Ρ‹Π΅ β€” ΠΏΠΎΠΏΡƒΡ‚Π½ΠΎ Π²Ρ‹Π΄Π΅Ρ€Π³ΠΈΠ²Π°Π΅ΠΌ всС сСтСвыС кабСля. Π‘Π΅Ρ€Π²Π΅Ρ€ становится ΠΎΡ‚Ρ€Π΅Π·Π°Π½Π½Ρ‹ΠΌ ΠΎΡ‚ внСшнСго ΠΌΠΈΡ€Π° ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎ, Π½ΠΎ систСмныС часы всё Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΏΠ΅ΡˆΠ°Ρ‚.

Рабочая нСдСля ΠΎΠΊΠΎΠ½Ρ‡Π΅Π½Π°, Π° сам вопрос Π΄Π°Ρ‚Ρ‹/Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° Π½Π΅ΠΌ Π½Π΅ ΠΊΡ€ΠΈΡ‚ΠΈΡ‡Π΅Π½, поэтому ΠΌΠΎΠΆΠ½ΠΎ просто ΠΏΠΎΠΉΡ‚ΠΈ Π΄ΠΎΠΌΠΎΠΉ, Π½ΠΎ Ρ‚ΡƒΡ‚ я дСлаю Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠΌΠ°ΡˆΠΊΡƒ.

Ошибка Ρ‚Ρ€Π΅Ρ‚ΡŒΡ. Π‘ΠΎΠ²Π΅Ρ‚Ρ‡ΠΈΠΊΠΈ

Никогда! Никогда Π½Π΅ Π·Π°Π΄Π°Π²Π°ΠΉΡ‚Π΅ вопросы Π½Π° Ρ„ΠΎΡ€ΡƒΠΌΠ°Ρ… ΠΈ общСспСциализированных (Π°-ля stackoverflow) сайтах, Ссли ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° Π½Π΅Π³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ большС Ρ‡Π΅ΠΌ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ‹Π΄Π°Ρ‡ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΉ страницы Π³ΡƒΠ³Π»Π° ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠΉ страницы man’Π°.

Вас ΠΏΠΎΡˆΠ»ΡŽΡ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² google, ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ всё Ρ‚ΠΎΡ‚ ΠΆΠ΅ man ΠΈ популярно ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π° Ρ„ΠΎΡ€ΡƒΠΌΠ°/сайта, Π½ΠΎ Π½Π΅ Π΄Π°Π΄ΡƒΡ‚ ΠΎΡ‚Π²Π΅Ρ‚Π°.

Π—Π΄Π΅ΡΡŒ Π΅ΡΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅ Ρ„Π°ΠΊΡ‚ΠΎΡ€Ρ‹:

  • Π½ΠΈΠΊΡ‚ΠΎ ΠΊΡ€ΠΎΠΌΠ΅ вас Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠΎ;
  • Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ провСсти тСсты Π² Ρ‚Π°ΠΊΠΈΡ… ΠΆΠ΅ ΠΊΠ°ΠΊ Ρƒ вас условиях

Ρ‚Π°ΠΊ ΠΈ ΡΡƒΠ±ΡŠΠ΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅:

  • Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π΅ Π²Ρ‹Π΄Π°Ρ‚ΡŒ всСх Π²Π²ΠΎΠ΄Π½Ρ‹Ρ… для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ‡ΠΈ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΡƒΠΆΠ΅ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π»ΠΈ Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ΅Β» Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ·Π»Π°Π³Π°Π΅Ρ‚Π΅ ΡΡƒΡ‚ΡŒ вопроса упирая Π½Π° Π½Π΅Π³ΠΎ;
  • ΡΡ‚Π°Ρ€ΡˆΠΈΠ½Π° (ΠΌΠΎΠ΄Π΅Ρ€Π°Ρ‚ΠΎΡ€, староТил, Π°Π΄ΠΌΠΈΠ½) всСгда ΠΏΡ€Π°Π², Ссли ΡΡ‚Π°Ρ€ΡˆΠΈΠ½Π° Π½Π΅ прав… Π½Ρƒ Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅…

Если ΠΏΡ€ΠΈ ΠΎΡ‚Π²Π΅Ρ‚Π½Ρ‹Ρ… коммСнтариях Π²Ρ‹ ΠΎΡΡ‚Π°Π»ΠΈΡΡŒ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Ρ†Π΅Π½Π·ΡƒΡ€Π½ΠΎΠΉ лСксики, Π·Π½Π°Ρ‡ΠΈΡ‚ Ρƒ вас ΠΊΡ€Π΅ΠΏΠΊΠΈΠ΅ Π½Π΅Ρ€Π²Ρ‹.

РСшСниС

НС Π½ΡƒΠΆΠ½ΠΎ Π΄Π΅Π»ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ Π½Π° простыС ΠΈ слоТныС.

ΠŸΠ΅Ρ€Π΅ΡΡ‚Π°Ρ‘ΠΌ ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π½Π° свой ΠΎΠΏΡ‹Ρ‚, статистику, совСтчиков ΠΈ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ Π½Π΅ Β«ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒΒ» ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρƒ.

Π Π°Π· Π½Π΅ΠΊΡ‚ΠΎ устанавливаСт врСмя Π·Π½Π°Ρ‡ΠΈΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ систСмный Π²Ρ‹Π·ΠΎΠ².

Как Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ софта Π»ΡƒΡ‡ΡˆΠΈΠ΅ Π΄ΠΎΠΊΠΈ β€” это исходники, Ρ‚Π°ΠΊ Π² систСмном администрировании Π»ΡƒΡ‡ΡˆΠΈΠΉ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊ β€” это Π°ΡƒΠ΄ΠΈΡ‚, Π² нашСм случаС auditd.

ΠœΠΈΠ½ΡƒΡ‚ΠΊΠ° сомнСнияЯ пробСТался ΠΏΠΎ ΠΌΠ°Π½Π°ΠΌ, Π½ΠΎ Π½Π΅ Π±Ρ‹Π» Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΡƒΠ²Π΅Ρ€Π΅Π½, Ρ‡Ρ‚ΠΎ врСмя Π² Linux ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ clock_settime ΠΈ settimeofday, поэтому для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ тСста Π²Ρ‹Π±Ρ€Π°Π» всС «подходящиС» Π²Ρ‹Π·ΠΎΠ²Ρ‹:

# man syscalls | col | grep -F '(2)' | grep -vE '(:|;)' | grep -E '(time|date|clock)' | sed "s/(2).*//" | xargs -I SYSCALL echo "-S SYSCALL " | xargs echo
-S adjtimex -S clock_adjtime -S clock_getres -S clock_gettime -S clock_nanosleep -S clock_settime -S futimesat -S getitimer -S gettimeofday -S mq_timedreceive -S mq_timedsend -S rt_sigtimedwait -S s390_runtime_instr -S setitimer -S settimeofday -S stime -S time -S timer_create -S timer_delete -S timer_getoverrun -S timer_gettime -S timer_settime -S timerfd_create -S timerfd_gettime -S timerfd_settime -S times -S utime -S utimensat -S utimes

ΠΈ отбросив s390_runtime_instr, stime, timerfd_create, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… auditctl Π½Π΅ ΠΏΡ€ΠΈΠ·Π½Π°Π», ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ запустил Π°ΡƒΠ΄ΠΈΡ‚ Π² Π²ΠΈΠ΄Π΅:

auditctl -a exit,always -S adjtimex -S clock_adjtime -S clock_getres -S clock_nanosleep -S clock_settime -S futimesat -S getitimer -S gettimeofday -S mq_timedreceive -S mq_timedsend -S rt_sigtimedwait -S semtimedop -S setitimer -S settimeofday -S time -S timer_create -S timer_delete -S timer_getoverrun -S timer_gettime -S timer_settime -S timerfd_gettime -S timerfd_settime -S times -S utime -S utimensat -S utimes

УбСдившись, Ρ‡Ρ‚ΠΎ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‰ΠΈΡ… мСня мСстах Π»ΠΎΠ³ΠΎΠ² Π½Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… syscalls ΠΊΡ€ΠΎΠΌΠ΅ этих Π΄Π²ΡƒΡ… Π΄Π°Π»Π΅Π΅ использовал Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡ….

ЗапускаСм Π°ΡƒΠ΄ΠΈΡ‚ систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² clock_settime ΠΈ settimeofday ΠΈ ΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΄Π°Ρ‚Ρƒ:

# auditctl -a exit,always -S clock_settime -S settimeofday && date -s "2019-08-22 12:10:00" && sleep 5 && auditctl -D

ΠŸΡΡ‚ΠΈΡΠ΅ΠΊΡƒΠ½Π΄Π½Π°Ρ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ наш Β«ΠΏΠ°Ρ€Π°Π·ΠΈΡ‚Β» Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ ΠΎΡ‚ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π» врСмя.

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΠΌ ΠΎΡ‚Ρ‡Π΅Ρ‚:

# aureport -s -i

Syscall Report
=======================================
# date time syscall pid comm auid event
=======================================
Warning - freq is non-zero and incremental flushing not selected.
1. 08/22/2019 12:10:00 settimeofday 3088 chkcache_proces root 479630
2. 08/26/2019 09:37:06 clock_settime 1538 date root 479629

Π—Π΄Π΅ΡΡŒ ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ наш date ΠΈ нСизвСстный Π½Π°ΠΌ chkcache_proces. Он оказался Π² ΠΎΡ‚Ρ‡Π΅Ρ‚Π΅ Π²Ρ‹ΡˆΠ΅, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ aureport отсортировал Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎ Π΄Π°Ρ‚Π΅ ΠΏΡ€ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ· Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, Π° событиС ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ Π² установлСнноС Π½Π°ΠΌΠΈ врСмя date -s Β«2019-08-22 12:10:00Β».
ΠšΡ‚ΠΎ ΠΆΠ΅ Π΅Π³ΠΎ ΠΏΠΎΡ€ΠΎΠ΄ΠΈΠ»?

# ausearch -sc settimeofday --comm "chkcache_proces"
----
time->Thu Aug 22 12:10:00 2019
type=PROCTITLE msg=audit(1566465000.000:479630): proctitle="/usr/local/bin/oscam"
type=SYSCALL msg=audit(1566465000.000:479630): arch=c000003e syscall=164 success=yes exit=0 a0=7fde0dfc6e60 a1=0 a2=136cf a3=713ba56 items=0 ppid=3081 pid=3088 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts20 ses=68149 comm="chkcache_proces" exe="/usr/local/bin/oscam" key=(null)

/usr/local/bin/oscam β€” наш ΠΏΠ°Ρ€Π°Π·ΠΈΡ‚ Π½Π°ΠΉΠ΄Π΅Π½. НСсмотря Π½Π° Π΅Π³ΠΎ Β«Π·Π»ΠΎΠ²Ρ€Π΅Π΄Π½ΠΎΠ΅Β» ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ систСмы условного доступа нСльзя, Π½ΠΎ всё ΠΆΠ΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ Π·Π½Π°Ρ‚ΡŒ, oscam, WTF?

ΠžΡ‚Π²Π΅Ρ‚ быстро Π½Π°ΠΉΠ΄Π΅Π½ Π² исходниках:

#if defined(CLOCKFIX)
if (tv.tv_sec > lasttime.tv_sec || (tv.tv_sec == lasttime.tv_sec && tv.tv_usec >= lasttime.tv_usec)) // check for time issues!
{
  lasttime = tv; // register this valid time
}
  else
{
  tv = lasttime;
  settimeofday(&tv, NULL); // set time back to last known valid time
  //fprintf(stderr, "*** WARNING: BAD TIME AFFECTING WHOLE OSCAM ECM HANDLING, SYSTEMTIME SET TO LAST KNOWN VALID TIME **** n");
}

Как ΠΆΠ΅ ΠΌΠΈΠ»ΠΎ здСсь смотрится закоммСнтированная строчка warning’a…

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com