OpenNTPD ( OpenBSD NTPデーモンとも呼ばれる)は、ネットワークタイムプロトコル(NTP)を実装したUnixデーモンで、コンピュータシステムのローカルクロックをリモートNTPサーバーと同期させます。また、NTP互換クライアントに対してNTPサーバーとして動作することも可能です。
OpenBSD NTP Daemon は、当初、 Alexander GuyとHenning BrauerによってOpenBSDプロジェクトの一部として開発され、その後、多くの著者が協力しました。その設計目標には、安全であること (悪用されないこと)、設定が容易であること、ほとんどの用途に十分な精度があることが含まれます。そのポータブル版は、OpenSSH と同様に[ 3 ]、OpenBSD版に移植性コードを追加して別々にリリースする子プロジェクトとして開発されています。ポータブル版は Brent Cook によって開発されています[ 4 ] 。プロジェクト開発者はOpenBSD Foundationから資金提供を受けています。
OpenNTPD の開発は、現在の NTP デーモンの問題点、すなわち設定の難しさ、複雑で監査しにくいコード、不適切なライセンスといった問題の組み合わせによって動機づけられました。[ 5 ] OpenNTPD はこれらの問題を解決し、より多くのユーザーが時刻同期を利用できるように設計されました。開発期間を経て、OpenNTPD は OpenBSD 3.6 で初めて登場しました。[ 6 ]最初のリリースは 2004 年 11 月 2 日に発表されました。[ 7 ]
OpenNTPD は、OpenBSD チームによる、安全で監査が容易で、セットアップと管理が簡単で、妥当な精度を持ち、システム リソースをあまり消費しない NTP デーモン実装を作成する試みです。そのため、OpenNTPD の設計目標は、セキュリティ、使いやすさ、パフォーマンスです。[ 8 ] OpenNTPD のセキュリティは、ネットワーク入力パスでの堅牢な有効性チェック、strlcpyを介したバウンド バッファ操作の使用、および特権昇格によってデーモンを悪用する可能性のあるセキュリティ バグの影響を軽減するための特権分離によって実現されています。NTP の使用を簡素化するために、OpenNTPD は、Network Time Protocol Project が提供するものなど、他の NTP デーモンで利用可能な機能よりも少ない機能セットを実装しています。目的は、特殊な要件やニッチな要件には適さないリスクを冒してでも、一般的な使用を満たすのに十分な機能を提供することです。OpenNTPD は、設定ファイルntpd.confを介して構成されます。[ 9 ]提供されるオプションは最小限です。OpenNTPD がリッスンする IP アドレスまたはホスト名、使用するタイムデルタセンサー デバイス、および時刻を同期するサーバーのセットです。OpenNTPD の精度はベストエフォート型です。デーモンは可能な限り正確になるように試みますが、特定の精度は保証されません。
OpenNTPDはシステムクロックを徐々に調整します。以下は、Linuxシステム上で実行されているOpenNTPDの出力例です。
$ grep ntpd /var/log/daemon.log | grep adjustment 8月4日 03:32:20 nikolai ntpd[4784]: ローカルクロックを-1.162333秒調整します 8月4日 03:36:08 nikolai ntpd[4784]: ローカルクロックを-1.023899秒調整 8月4日 03:40:02 nikolai ntpd[4784]: ローカルクロックを-0.902637秒調整します 8月4日 03:43:43 nikolai ntpd[4784]: ローカルクロックを-0.789431秒調整します 8月4日 03:47:35 nikolai ntpd[4784]: ローカルクロックを-0.679320秒調整します 8月4日 03:50:45 nikolai ntpd[4784]: ローカルクロックを-0.605858秒調整します 8月4日 03:53:31 nikolai ntpd[4784]: ローカルクロックを-0.529821秒調整します
OpenNTPD は、NTP プロジェクト (ntp.org) が作成したNTP デーモンよりも精度が低いと批判されています。 [ 10 ] OpenNTPD は内部的にミリ秒単位の精度を維持しておらず、コードの簡潔さを優先して精度を高めるさまざまなアルゴリズムを省略しているため、「実時間」から 50~200 ms ずれる可能性があります。OpenNTPD プロジェクトはこの批判を認めましたが、マイクロ秒単位の精度がないことは、簡潔さとセキュリティにメリットをもたらす設計上のトレードオフであると述べています。[ 10 ] OpenNTPD の設計目標では、プロジェクトの意図は「最後のナノ秒や不明瞭なエッジケースを実現するために安全な設計を犠牲にすることなく、妥当な精度を達成する」ことであると述べています。[ 11 ]
2004 年 9 月、OpenNTPD 3.6 のリリース直後、ntp.org の貢献者である Brad Knowles は、「OpenNTPd は有害である」というタイトルの記事[ 12 ]を発表し、OpenNTPD の NTP プロトコルの実装のさまざまな側面、およびOpenSSHやOpenBGPDの開発でも使用されているプロジェクトで採用されている分割開発モデルを批判した。2004 年 12 月、OpenNTPD のポータブル ブランチの主任開発者である Darren Tucker は、Knowles に対して詳細な回答を書き、いくつかの問題は妥当であると認め、他のいくつかの問題は不当であると拒否し、さらに他のいくつかの問題は誤解を招くものであると考えた。[ 13 ] Knowles が提起したより深刻な問題の中には、OpenNTPD サーバーがストラタム 1 サーバーであると主張しているというものがあった。しかし、Tucker の回答の時点では、この問題はすでに修正されていた。 2005年3月、ノウルズはタッカーの返答を認め、「残っている問題をすべて解決するために、タッカーと協力するためにできる限りのことをするつもりだ」と述べた。[ 14 ]さらに、OpenBSDのネットワークに関するFAQには、ノウルズの最初の批判に対する回答が追加されました。[ 15 ]
OpenNTPDの現在の精度に関する主張は、2004年の21C3プレゼンテーションによると、「通常50 ミリ秒」である。[ 16 ]
OpenNTPD(およびOpenBSDカーネル)はうるう秒を無視します。[ 17 ] OpenNTPDを他のntpdサーバーの上位階層ソースとして使用する場合、または協定世界時を参照する高解像度の時刻要件を使用する場合は注意が必要です。うるう秒は協定世界時で使用されますが、国際原子時や全地球測位システム時刻信号では使用されません。50ミリ秒の精度も、上位階層ソースとしては一般的ではありません。
米国海軍天文台と国際度量衡局は、うるう秒を実装していないシステムは国際原子時、またはGPS時刻信号に直接参照することを推奨している。 [ 18 ]しかし、NTPの現在のバージョン(2023年現在)では、うるう秒を実装していないシステムは国際原子時、またはGPS時刻信号に直接参照することを推奨している。非UTC時間スケールをサポートしています。