第15章 時刻同期の設定
IT 環境では、正確な時間管理が重要です。すべてのネットワークデバイスで時刻が一貫していれば、ログファイルのトレーサビリティーが向上します。また、特定のプロトコルは同期されたクロックを使用します。たとえば、Kerberos はタイムスタンプを使用してリプレイ攻撃を防ぎます。
15.1. Chrony スイートを使用した NTP の設定
IT では、複数の理由から、正確な時間管理が重要です。たとえばネットワーキングでは、パケットとログのタイムスタンプが正確であることが必要になります。Linux システムでは、NTP
プロトコルがユーザー領域で実行しているデーモンにより実装されます。
ユーザー領域のデーモンは、カーネルで実行しているシステムクロックを更新します。システムクロックは、さまざまなクロックソースを使用して時間を維持します。一般的に使用されるのは Time Stamp Counter (TSC) です。TSC は、最後にリセットされた時点からのサイクル数を計測する CPU レジスターです。非常に高速でハイレゾリューションであり、中断も発生しません。
Red Hat Enterprise Linux 8 以降、NTP
プロトコルは chronyd
デーモンにより実装されます。このデーモンは、chrony
パッケージのリポジトリーから利用できます。
次のセクションでは、chrony スイートを使用して NTP を設定する方法を説明します。
15.1.1. chrony スイートの概要
chrony は Network Time Protocol (NTP)
の実装です。chrony を使用すると、以下のことができます。
-
システムクロックを、
NTP
サーバーと同期する - システムクロックを、GPS レシーバーなどの基準クロックと同期する
- システムクロックを、手動で入力した時間と同期する
-
ネットワーク内の他のコンピューターにタイムサービスを提供する
NTPv4(RFC 5905)
サーバーまたはピアとして
chrony は、ネットワーク接続が頻繁に切断される、ネットワークの混雑が長時間続く、温度が変わる (一般的なコンピューターのクロックは温度に敏感) といったさまざまな状況や、継続して実行されない、または仮想マシンで実行されているといったシステムにおいても、良好に動作します。
インターネット上で同期している 2 つのマシン間の一般的精度は数ミリ秒以内、LAN 上のマシン間では数十マイクロ秒以内です。ハードウェアのタイムスタンプまたはハードウェア基準クロックは、同期している 2 つのマシン間の精度をサブマイクロ秒レベルにまで高めることができます。
chrony は、ユーザー空間で実行する chronyd
と、chronyd
のパフォーマンスを監視し、実行時にさまざまなオペレーティングパラメーターを変更するのに使用できるコマンドラインプログラムである chronyc で構成されます。
chrony デーモンである chronyd
は、コマンドラインユーティリティーの chronyc を使用して監視と管理を行います。このユーティリティーは、chronyd
の現在の状態に対してクエリーを実行し、その設定を変更する多数のコマンド入力を可能にするコマンドプロンプトを提供します。デフォルトでは、chronyd
は chronyc のローカルインスタンスのコマンドのみを受け付けますが、リモートホストから監視コマンドを受け付けるように設定することも可能です。リモートアクセスは制限する必要があります。
15.1.2. chronyc を使用した chronyd の制御
chronyc コマンドラインユーティリティーを使用して chronyd
を制御できます。
手順
対話モードでコマンドラインユーティリティー chronyc を使用して、
chronyd
のローカルインスタンスを変更するには、root
で以下のコマンドを実行します。# chronyc
制限されているコマンドを使用する場合は、
root
で chronyc を実行する必要があります。以下のように、chronyc コマンドプロンプトが表示されます。
chronyc>
-
コマンドのリストを表示するには、
help
と入力します。 以下のように、コマンドと合わせて呼び出した場合には、非対話的なコマンドモードでユーティリティーを呼び出すこともできます。
chronyc command
chronyc を使用して変更した内容は永続的ではなく、chronyd
を再起動すると元に戻ります。永続的に変更する場合は、/etc/chrony.conf
を変更してください。
15.1.3. chrony への移行
Red Hat Enterprise Linux 7 では、正確な時間管理を行う方法として、ntp または chrony を選択できます。ntp と chrony の相違点、ntpd
と chronyd
の相違点は、ntpd と chronyd の違い を参照してください。
Red Hat Enterprise Linux 8 以降、ntp はサポートされなくなりました。chrony は、デフォルトで有効になっています。このため、ntp から chrony への移行が必要になる場合があります。
ntp から chrony への移行は、ほとんどの場合簡単です。プログラムの、設定ファイル、およびサービスに対応する名前は、次のとおりです。
ntp の名前 | chrony の名前 |
---|---|
/etc/ntp.conf | /etc/chrony.conf |
/etc/ntp/keys | /etc/chrony.keys |
ntpd | chronyd |
ntpq | chronyc |
ntpd.service | chronyd.service |
ntp-wait.service | chrony-wait.service |
ntpdate ユーティリティーおよび sntp ユーティリティーは ntp
ディストリビューションに含まれていますが、-q
オプションまたは -t
オプションを使用して chronyd
に置き換えることができます。この設定は、/etc/chrony.conf
を読み込まないようにコマンドラインで指定できます。たとえば、ntpdate ntp.example.com
を実行する代わりに、以下のように chronyd
を起動できます。
# chronyd -q 'server ntp.example.com iburst'
2018-05-18T12:37:43Z chronyd version 3.3 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG)
2018-05-18T12:37:43Z Initial frequency -2.630 ppm
2018-05-18T12:37:48Z System clock wrong by 0.003159 seconds (step)
2018-05-18T12:37:48Z chronyd exiting
ntpstat ユーティリティーは、ntp
パッケージに含まれていましたが、ntpd
だけをサポートしていました。現在は、ntpd
と chronyd
の両方をサポートします。これは、ntpstat
パッケージで入手できます。
15.1.3.1. 移行スクリプト
chrony
パッケージのドキュメント (/usr/share/doc/chrony
) には、ntp2chrony.py
という名前の Python スクリプトがあります。このスクリプトは、既存の ntp
設定を chrony
に自動的に変換します。ntp.conf
ファイルで最も一般的なディレクティブおよびオプションがサポートされます。変換で無視されている行はすべて、確認のために、生成された chrony.conf
ファイルにコメントとして追加されます。ntp
鍵ファイルに指定し、ntp.conf
で信頼される鍵としてマークされていない鍵は、生成された chrony.keys
ファイルにコメントとして追加されます。
デフォルトでは、スクリプトはいずれのファイルも上書きしません。/etc/chrony.conf
または /etc/chrony.keys
が存在する場合は、-b
オプションを使用してファイルの名前を変更すれば、バックアップとして使用できます。このスクリプトはその他のオプションもサポートします。--help
オプションを使用すると、サポートされるすべてのオプションが表示されます。
ntp
パッケージで提供されるデフォルトの ntp.conf
を使用したスクリプトの呼び出し例は以下のようになります。
# python3 /usr/share/doc/chrony/ntp2chrony.py -b -v
Reading /etc/ntp.conf
Reading /etc/ntp/crypto/pw
Reading /etc/ntp/keys
Writing /etc/chrony.conf
Writing /etc/chrony.keys
この場合に無視される唯一のディレクティブは disable monitor
です。これは、noclientlog
ディレクティブで chrony に相当するものがありますが、アンプ攻撃を軽減するためだけに、デフォルトの ntp.conf
に含まれていました。
生成した chrony.conf
ファイルには、通常、ntp.conf
の制御行に対応する allow
ディレクティブが多数含まれています。chronyd
を NTP
サーバーとして実行しない場合は、allow
ディレクティブをすべて chrony.conf
から削除します。