17.2. chrony の概要および設定

17.2.1. chronyd および chronyc の理解

chrony のデーモンである chronyd は、コマンドラインユーティリティーの chronyc を使用して監視と管理を行います。このユーティリティーは、chronyd の現在の状態にクエリーを実行しその設定を変更をする多数のコマンド入力を可能にするコマンドプロンプトを提供しています。デフォルトでは、chronydchronyc のローカルインスタンスのコマンドのみを受け付けますが、リモートホストから監視コマンドを受け付けるように設定することも可能です。リモートアクセスは制限を設けることが推奨されます。

17.2.2. chrony 設定コマンドの概要

chronyd のデフォルトの設定ファイルは /etc/chrony.conf です。-f オプションは、代替の設定ファイルのパスを指定するときに使用します。その他のオプションは man ページ chronyd をご覧ください。使用できるディレクティブの一覧は Chrony ドキュメント (http://chrony.tuxfamily.org/manual.html#Configuration-file) をご覧ください。
以下は、chronyd の設定オプションの一例です。
コメント
コメントの前には、#、%、;、または ! を付けます。
allow
オプションとして、NTP サーバーとして動作しているマシンへの接続が許可される NTP の接続元となるホスト、サブネット、またはネットワークを指定します。デフォルトでは、接続は許可されません。

例:

  1. allow 192.0.2.0/24
    特定のネットワークへのアクセスを許可するときにこのコマンドを使用します。
  2. allow 2001:0db8:85a3::8a2e:0370:7334
    IPv6 へのアクセスを許可するときにこのコマンドを使用します。
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 ディレクティブは、ハードウェアタイムスタンプの非常に精度の高い同期を可能にします。詳細は man ページの chrony.conf(5) を参照してください。
local
local キーワードは、chronyd に現行の同期ソースがない場合でも、(クライアントがポーリングしているという観点で) リアルタイムに同期しているように見えるようにします。このオプションは通常、分離されたネットワーク上の master コンピューターで使用され、ここではいくつかのコンピューターが相互に同期する必要があり、master は手動入力でほぼリアルタイムと一致します。
コマンド例:
local stratum 10
10 という大きな値が示しているのは、基準クロックからのホップ数が非常に多いので時間の信頼性がかなり低いということです。基準クロックに最終的に同期している別のコンピューターへのアクセスがあるコンピューターは、確実に 10 よりも下の階層に存在することになります。このため、local コマンドで 10 のように高い値を設定すると、リアルサーバーの視認性があるクライアントにリークしたとしても、マシン自体の時間がリアルタイムと混乱することを防ぎます。
log
log コマンドは、特定情報がログ記録されることを意味します。以下のオプションを取ります。
measurements
このオプションは、生の NTP 測定と関連情報を measurements.log と呼ばれるファイルにログ記録します。
statistics
このオプションは、回帰処理についての情報を statistics.log と呼ばれるファイルにログ記録します。
tracking
このオプションは、システムが進むまたは遅れるレートの予測に対する変更や、発生したスルーを、tracking.log と呼ばれるファイルにログ記録します。
rtc
このオプションは、システムのリアルタイムクロックについての情報をログ記録します。
refclocks
このオプションは、生およびフィルター処理された基準クロックの測定を refclocks.log と呼ばれるファイルにログ記録します。
tempcomp
このオプションは、温度測定とシステムレートの補正を tempcomp.log と呼ばれるファイルにログ記録します。
ログファイルは、logdir コマンドが指定するディレクトリーに書き込まれます。コマンドの例は以下のようになります。
log measurements statistics tracking
logdir
このディレクティブは、ログファイルが書き込まれるディレクトリーを指定します。このディレクティブは以下のようになります。
logdir /var/log/chrony
makestep
通常、chronyd は、必要に応じてクロックの速度を下げるかまたは上げることで、システムに時間オフセットの段階的修正を実施します。特定の状況では、システムクロックが修正されるまでのこのスルーイングプロセスに非常に時間がかかり、システムクロックが不安定な状態になることがあります。このディレクティブは、調整がしきい値を上回ったときに、chronyd にシステムクロックを強制的にステップさせます。ただし、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 です。これより大きな数に設定すると、信頼性が向上します。複数のソースが互いに対応することが必要となるためです。
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 は、このファイルが存在し、writertc コマンドが chronyc で発行されると、情報をこのファイルに保存します。保存される情報は、あるエポックでの RTC のエラー、そのエポック (1970 年 1 月 1 日以降の秒数)、および RTC の時間が早まるもしくは遅れるレートです。リアルタイムクロックのコードはシステム固有のものなので、すべてのリアルタイムクロックがサポートされるわけではありません。このディレクティブを使用する場合、リアルタイムクロックは手動で調整しないでください。リアルタイムクロックがランダムな間隔で調整されると、そのレートを測定する chrony の必要性が干渉されるためです。
rtcsync
rtcsync ディレクティブは、デフォルトで /etc/chrony.conf ファイルにあります。これは、カーネルにシステムクロックが同期されていることを知らせ、カーネルはリアルタイムクロックを 11 分ごとに更新します。

17.2.3. chronyc のセキュリティー

Chronycchronyd へ 2 通りの方法でアクセスすることができます。
  • インターネットプロトコル (IPv4 または IPv6)
  • Unix ドメインソケット (root または chrony ユーザーがローカルにアクセスできます)
デフォルトでは、chronyc は Unix ドメインソケットに接続します。デフォルトのパスは /var/run/chrony/chronyd.sock です。この接続に失敗した場合 (chronyc が非 root ユーザーの下で実行されているときに失敗する可能性がある) 、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 ドメインソケットのみを介して許可されます。ネットワーク上で送信されると、たとえローカルホストであっても、chronydNot authorised エラーを返します。

手順17.1 chronyc を使用した chronyd へのリモートアクセス

  1. 以下を /etc/chrony.conf ファイルに追加すると、IPv4 と IPv6 の両方のアドレスからアクセスが可能になります。
    bindcmdaddress 0.0.0.0
    または
    bindcmdaddress :
  2. cmdallow ディレクティブを使用すると、リモート IP アドレス、ネットワーク、またはサブネットからのコマンドが許可されます。

    例17.1

    次の内容を /etc/chrony.conf ファイルへ追加します。
    cmdallow 192.168.1.0/24
  3. ファイアウォールでポート 323 を開き、リモートシステムから接続します。
    ~]#  firewall-cmd --zone=public --add-port=323/udp
    ポート 323 を永続的に開きたいときは、--permanent を使用します。
    ~]#  firewall-cmd --permanent --zone=public --add-port=323/udp
allow ディレクティブは NTP のアクセス用で、cmdallow ディレクティブは、リモートコマンドの受け取りを可能にします。ローカルに実行されている chronyc を使用すると、これらの変更を一時的なものにできます。永続的に変更するときは設定ファイルを編集します。