Введение

Реализация протокола сетевого времени

OpenNTPD (также известный как OpenBSD NTP Daemon) — это демон Unix, реализующий протокол сетевого времени для синхронизации системного времени компьютера с удалёнными NTP-серверами. Он также способен функционировать как NTP-сервер для NTP-совместимых клиентов. OpenBSD NTP Daemon был первоначально разработан Александром Гаем и Хеннингом Брауэром в рамках проекта OpenBSD, при участии множества других авторов. Основными целями разработки являются безопасность (устойчивость к взлому), простота настройки и достаточная точность для большинства задач. Его переносимая версия, подобно OpenSSH, разрабатывается как отдельный проект, добавляющий код переносимости к версии OpenBSD и выпускающий её независимо. Переносимую версию разрабатывает Брент Кук. Разработчики проекта получают частичное финансирование от Фонда OpenBSD.

История

Разработка OpenNTPD была обусловлена сочетанием проблем, существующих в современных NTP-демонах: сложная настройка, запутанный и трудно поддающийся проверке код, а также неподходящая лицензия. OpenNTPD был разработан для решения этих проблем и обеспечения доступности синхронизации времени для более широкого круга пользователей. После определенного периода разработки OpenNTPD впервые был включен в OpenBSD 3.6. Объявление о первом выпуске состоялось 2 ноября 2004 года.

Голы

OpenNTPD – это попытка команды OpenBSD создать реализацию демона NTP, которая была бы безопасной, простой для проверки, легко настраиваемой и администрируемой, достаточно точной и не требовательной к системным ресурсам. Таким образом, основные цели разработки OpenNTPD – это безопасность, простота использования и производительность. Безопасность в OpenNTPD обеспечивается за счет надежной проверки достоверности входящих сетевых данных, использования операций с буферами ограниченного размера через strlcpy и разделения привилегий для снижения последствий возможных уязвимостей, которые могут быть использованы для повышения привилегий. Чтобы упростить использование NTP, OpenNTPD реализует меньший набор функций, чем другие NTP-демоны, например, демон, предоставляемый проектом Network Time Protocol Project. Цель состоит в том, чтобы предоставить достаточно функций для типичных сценариев использования, рискуя тем, что он может не подойти для специфических или узкоспециализированных задач. OpenNTPD настраивается через файл конфигурации ntpd.conf. Предлагается минимальное количество опций: IP-адрес или имя хоста, на котором OpenNTPD должен прослушивать, используемое устройство измерения времени и набор серверов, с которых будет выполняться синхронизация времени. Точность OpenNTPD обеспечивается по мере возможности; демон стремится быть максимально точным, но конкретная точность не гарантируется.

Критика

OpenNTPD подвергается критике как менее точный, чем NTP-демон, разработанный проектом NTP (ntp.org). Внутри OpenNTPD не обеспечивается точность до миллисекунд и может отклоняться от "реального" времени на 50–200 мс, поскольку в целях упрощения кода он исключает ряд алгоритмов, повышающих точность. Проект OpenNTPD признал эту критику, но заявил, что отсутствие точности до микросекунд является намеренным компромиссом, обеспечивающим простоту и безопасность. В сентябре 2004 года, вскоре после выхода OpenNTPD 3.6, участник проекта ntp.org Брэд Ноулз опубликовал статью под названием «OpenNTPd Considered Harmful», в которой критиковал различные аспекты реализации протокола NTP в OpenNTPD, а также модель раздельной разработки, используемую в проекте, которая также применяется при разработке OpenSSH и OpenBGPD. В декабре 2004 года Даррен Такер, ведущий разработчик портативной ветви OpenNTPD, написал подробный ответ Ноулзу, признав некоторые проблемы обоснованными, отклонив другие как необоснованные и посчитав третьи вводящими в заблуждение. Одной из наиболее серьезных проблем, поднятых Ноулзом, было то, что серверы OpenNTPD заявляли о себе как о серверах первого уровня (stratum 1). Однако к моменту ответа Такера эта проблема уже была решена. В марте 2005 года Ноулз признал ответ Такера и заявил, что "приложит все усилия, чтобы сотрудничать с ним для решения любых оставшихся вопросов". Кроме того, раздел часто задаваемых вопросов по сетевым технологиям OpenBSD был расширен в ответ на первоначальную критику Ноулза. Согласно презентации 21C3 2004 года, текущая заявленная точность OpenNTPD составляет "обычно 50 мс".

Скольцевые секунды

OpenNTPD (и ядро OpenBSD) игнорируют скачковые секунды. Необходимо соблюдать осторожность при использовании OpenNTPD в качестве источника более высокого стратума для других серверов ntpd или в системах с высокими требованиями к точности времени, использующих Координированное универсальное время. Скачковые секунды применяются в Координированном универсальном времени, но не в Международном атомном времени или сигналах времени Глобальной системы позиционирования. Точность в 50 мс также не характерна для источника с высоким стратумом. Морская обсерватория США и Международное бюро мер и весов рекомендуют, чтобы системы, не реализующие скачковые секунды, ориентировались на Международное атомное время или непосредственно на сигналы времени GPS. Однако ни одна из текущих версий NTP (по состоянию на 2023 год) не поддерживает временные шкалы, отличные от UTC.