18.2. chrony の概要および設定
18.2.1. chronyd および chronyc について
chrony デーモンである chronyd
は、コマンドラインユーティリティーの chronyc を使用して監視と管理を行います。このユーティリティーは、chronyd
の現在の状態に対してクエリーを実行し、その設定を変更する多数のコマンド入力を可能にするコマンドプロンプトを提供します。デフォルトでは、chronyd
は chronyc のローカルインスタンスのコマンドのみを受け付けますが、リモートホストから監視コマンドを受け付けるように設定することも可能です。リモートアクセスは制限する必要があります。
18.2.2. chrony 設定コマンドの概要
chronyd
のデフォルト設定ファイルは /etc/chrony.conf
です。-f
オプションは、代替の設定ファイルパスを指定するのに使用できます。その他のオプションについては、 chronyd の
man ページを参照してください。
以下は、chronyd
設定オプションの一部です。
- コメント
- コメントの前には、#、%、;、または ! を付けます。
- allow
-
必要に応じて、
NTP
サーバーとして動作しているマシンへのNTP
接続が許可されるホスト、サブネット、またはネットワークを指定します。デフォルトでは、接続は許可されません。
例18.1 allow
オプションを使用してアクセスを付与します。
このコマンドを使用して、IPv4 へのアクセスを付与します。
allow 192.0.2.0/24
このコマンドを使用して、IPv6 へのアクセスを付与します。
allow 2001:0db8:85a3::8a2e:0370:7334
クライアントアクセスを可能にするため、ファイアウォールで UDP ポート番号 123 を開いておく必要があります。
~]# firewall-cmd --zone=public --add-port=123/udp
ポート 123 を永続的に開くには、--permanent
オプションを使用します。
~]# firewall-cmd --permanent --zone=public --add-port=123/udp
- cmdallow
-
allow
ディレクティブ (allow
セクションを参照) と似ていますが、特定のサブセットまたはホストへの制御アクセスを許可します (これはNTP
クライアントアクセスとは異なります)。制御アクセスとは、chronyc がこのようなホストで実行可能であり、このコンピューターでchronyd
に正常に接続できることを意味します。構文は同じになります。また、cmdallow all
ディレクティブと動作が似ているcmddeny all
もあります。 - dumpdir
-
chronyd
を再起動しても測定履歴を保存するディレクトリーへのパスです (これが実行していない時にシステムクロックの動作が変更されていないことを想定しています)。(設定ファイルのdumponexit
コマンド、chronyc のdump
コマンドから) この機能を使用する場合は、dumpdir
コマンドを使用して測定履歴を保存するディレクトリーを定義してください。 - dumponexit
-
このコマンドが存在する場合は、プログラムの終了時に、
chronyd
が、常に記録された各時間ソースの測定履歴を保存することを示しています。(上記のdumpdir
コマンドを参照してください)。 - hwtimestamp
-
hwtimestamp
ディレクティブは、ハードウェアのタイムスタンプで非常に精度の高い同期を可能にします。詳細はchrony.conf(5)
man ページを参照してください。 - local
local
キーワードは、現在の同期ソースがない場合でも、(それをポーリングしているクライアントから見ると)chronyd
がリアルタイムに同期しているように見えるようにします。このオプションは、通常、孤立したネットワークで master となるコンピューターで使用されます。ここでは、いくつかのコンピューターが相互に同期するようになり、master は、手動入力でリアルタイムと一致させます。以下はコマンド例を示します。
local stratum 10
10 という大きな値が示しているのは基準クロックからのホップ数が非常に多いため、時間の信頼性が低いということです。基準クロックに最終的に同期している別のコンピューターにアクセスするコンピューターは、確実に 10 よりも下の階層に存在することになります。このため、
local
コマンドで 10 のように高い値を設定すると、リアルサーバーの視認性があるクライアントにリークしたとしても、マシン自体の時間がリアルタイムと混同することを防ぎます。- log
log
コマンドは、特定情報がログに記録されることを意味します。以下のオプションを取ります。- measurements
-
このオプションは、生の
NTP
測定値とその関連情報を、measurements.log
という名前のログファイルに記録します。 - statistics
-
このオプションは、回帰処理の情報を
statistics.log
ファイルにログ記録します。 - tracking
-
このオプションは、システムの時間が進んだり遅れたりする予測に対する変更や、発生した slew 調整を、
tracking.log
と呼ばれるファイルにログ記録します。 - rtc
- このオプションは、システムのリアルタイムクロックに関する情報をログ記録します。
- refclocks
-
このオプションは、生およびフィルター処理された基準クロックの測定を、
refclocks.log
ファイルにログ記録します。 - tempcomp
このオプションは、温度測定とシステムレートの補正を、
tempcomp.log
と呼ばれるファイルにログ記録します。ログファイルは、
logdir
コマンドが指定するディレクトリーに書き込まれます。以下はコマンド例を示します。
log measurements statistics tracking
- logdir
このディレクティブは、ログファイルが書き込まれるディレクトリーを指定します。
このディレクティブの使用例は、以下のようになります。
logdir /var/log/chrony
- makestep
通常、
chronyd
は、必要に応じてクロックの速度を下げるかまたは上げることで、システムに対して時間オフセットの段階的修正を実施します。特定の状況では、このスルーイング (slewing) プロセスでシステムクロックを修正するのに非常に時間がかかり、システムクロックが不安定な状態になることがあります。このディレクティブは、調整がしきい値を上回ったときに、chronyd
でシステムクロックを一度に修正 (step) します。ただし、chronyd
が開始してからのクロックの更新が、指定した制限を上回らなかった場合に限ります (負の値は、制限を無効にします)。initstepslew
ディレクティブはNTP
のソースのみに対応しているため、この方法は基準クロックを使用しているときに特に有用です。このディレクティブの使用例は、以下のようになります。
makestep 1000 10
この場合は、調整幅が 1000 秒よりも大きければシステムクロックが更新されますが、最初の 10 回の更新しか行われません。
- maxchange
このディレクティブは、クロック更新で修正される許容オフセットの最大値を設定します。更新が指定された回数行われた後にのみチェックが実行されるため、システムクロックの初回の調整が大きくなります。指定された最大値よりも大きなオフセットが発生すると、そのオフセットは指定した回数の間無視され、その後に
chronyd
が終了します (負の値を使用すると、終了しないようになります)。いずれの場合も、メッセージは syslog に送信されます。このディレクティブの使用例は、以下のようになります。
maxchange 1000 1 2
最初のクロック更新後に、
chronyd
がすべてのクロック更新でオフセットをチェックし、1000 秒よりも大きい調整を 2 回無視して、3 回目に終了します。- maxupdateskew
chronyd
のタスクの 1 つは、コンピューターのクロックがその基準源に対してどれくらい速くまたは遅く動くかを調べることです。また、推定値の誤差範囲の概算を計算します。エラーの範囲が広すぎる場合は、測定が落ち着いていないこと、そして推定増加または損失率に信頼性があまりないことを示しています。
maxupdateskew
パラメーターは、推定値を使用できるほど信頼できるかどうかを判定するためのしきい値です。デフォルトでは、しきい値は 1000 ppm です。構文は以下のようになります。
maxupdateskew skew-in-ppm
skew-in-ppm の一般的な値は、電話回線を介してサーバーにダイアルアップ接続を行う場合は 100、LAN 上のコンピューターの場合は 5 または 10 になります。
信頼性のない推定値の使用に対する保護の方法は、これだけではないことに注意してください。
chronyd
は常に、予想される進みまたは遅れのレートと、予測のエラー範囲を追跡しています。ソースの 1 つで測定が作成された後に別の予測が新たに生成されると、加重組み合わせのアルゴリズムを使用してマスター予測が更新されます。このため、chronyd
に信頼性の高い既存のマスター予測があり、エラー範囲の広い新たな予測が生成されると、既存のマスター予測が新規のマスター予測を特徴づけることになります。- minsources
minsources
ディレクティブは、ローカルクロックを更新する前にソース選択アルゴリズムで選択可能なものとして考慮されるべきソースの最小数を設定します。構文は以下のようになります。
minsources number-of-sources
number-of-sources は、デフォルトでは 1 です。minsource を 1 よりも大きくすると、信頼性が向上します。複数のソースが互いに対応することが必要となるためです。
- noclientlog
- 引数を取らないこのディレクティブは、クライアントアクセスをログに記録しないことを指定します。通常はログに記録されるため、chronyc のクライアントコマンドを使用して統計が報告されます。
- reselectdist
chronyd
が、利用可能なソースから同期ソースを選択する際に、同期距離が最短のものを優先します。ただし、同様の距離のソースが複数存在して、再選択が繰り返されるのを回避するため、現在選択されていないソースからの距離に、固定距離が追加されます。これは、reselectdist
オプションで設定できます。デフォルトでは、この距離は 100 ミリ秒となります。構文は以下のようになります。
reselectdist dist-in-seconds
- stratumweight
stratumweight
ディレクティブは、chronyd
が利用可能なソースから同期ソースを選択する際に、階層ごとに追加される同期距離を設定します。構文は以下のようになります。
stratumweight dist-in-seconds
デフォルトでは、dist-in-seconds は 1 ミリ秒です。つまり、通常は、距離の値が非常に悪い場合でも、stratum が高いソースよりも、stratum が低いソースが優先されることを意味します。
stratumweight
を 0 に設定すると、chronyd
は、ソースを選択するときに stratum を無視します。- rtcfile
rtcfile
ディレクティブは、システムのリアルタイムクロック (RTC) の正確性の追跡に関連するパラメーターをchronyd
が保存できるファイル名を定義します。構文は以下のようになります。
rtcfile /var/lib/chrony/rtc
chronyd
は、このファイルが存在し、chronyc でwritertc
コマンドを実行すると、情報をこのファイルに保存します。保存される情報は、あるエポックでの RTC のエラー、そのエポック (1970 年 1 月 1 日以降の秒数)、および RTC の時間が早まるもしくは遅れる変化量です。リアルタイムクロックのコードはシステム固有のものなので、すべてのリアルタイムクロックがサポートされるわけではありません。このディレクティブを使用する場合は、リアルタイムクロックを手動で調整しないでください。リアルタイムクロックがランダムな間隔で調整されると、その変化量を測定する chrony の必要性が干渉されるためです。- rtcsync
-
rtcsync
ディレクティブは、デフォルトで/etc/chrony.conf
ファイルにあります。これにより、システムクロックが同期されていることがカーネルに知らされ、カーネルによりリアルタイムクロックが 11 分ごとに更新されます。
18.2.3. chronyc のセキュリティー
Chronyc は、以下の 2 つの方法で chronyd
にアクセスします。
- インターネットプロトコル (IPv4 または IPv6)
-
Unix ドメインソケット (
root
または chrony ユーザーがローカルにアクセス可能)
デフォルトでは、chronyc は、Unix ドメインソケットに接続します。デフォルトのパスは /var/run/chrony/chronyd.sock
です。この接続に失敗すると (たとえば非特権ユーザーで chronyc を実行していると失敗する可能性があります)、chronyc は 127.0.0.1 への接続を試み、その後 ::1 への接続を試みます。
chronyd
の動作に影響しない次の監視コマンドのみが、ネットワークに許可されています。
- activity
- manual list
- rtcdata
- smoothing
- sources
- sourcestats
- tracking
- waitsync
chronyd
がこのコマンドを受け取るホスト郡は、chronyd
の設定ファイルにある cmdallow
ディレクティブ、または chronyc の cmdallow
コマンドで設定できます。デフォルトでは、このコマンドが許可されるのは、ローカルホスト (127.0.0.1 または ::1) のものだけになります。
その他のコマンドはすべて、Unix ドメインソケットのみを介して許可されます。ネットワーク上で送信されると、たとえローカルホストであっても、chronyd
は Not authorised
エラーを返します。
chronyc を使用して chronyd にリモートでアクセス
以下を
/etc/chrony.conf
ファイルに追加すると、IPv4 と IPv6 の両方のアドレスからアクセスが可能になります。bindcmdaddress 0.0.0.0
または
bindcmdaddress :
cmdallow
ディレクティブを使用すると、リモート IP アドレス、ネットワーク、またはサブネットからのコマンドが許可されます。/etc/chrony.conf
ファイルに以下の内容を追加します。cmdallow 192.168.1.0/24
ファイアウォールでポート 323 を開き、リモートシステムから接続します。
~]# firewall-cmd --zone=public --add-port=323/udp
ポート 323 を永続的に開く場合は、
--permanent
を使用します。~]# firewall-cmd --permanent --zone=public --add-port=323/udp
allow
ディレクティブは NTP
のアクセス用で、cmdallow
ディレクティブは、リモートコマンドの受け取りを可能にします。ローカルで実行している chronyc を使用すると、この変更を一時的なものにできます。永続的に変更するときは設定ファイルを変更します。