Эрик Реймонд (Eric S. Raymond), один из основателей организации OSI (Open Source Initiative), стоявший у истоков движения открытого ПО и написавший в свое время известное эссе "Собор и Базар", представил (http://esr.ibiblio.org/?p=6924) бета-выпуск проекта NTPsec (https://www.ntpsec.org/), в рамках которого предпринята попытка проведения рефакторинга эталонной реализации протокола NTPv4 (http://www.ntp.org/). Исходные тексты NTPsec размещены (https://gitlab.com/NTPsec/ntpsec) в репозитории на GitLab. NTPsec развивается (https://www.ntpsec.org/announcement.html) как форк NTP Classic 4.3.34. Кроме Реймонда к работе над NTPsec привлечены (https://www.ntpsec.org/core-team.html) разработчики оригинального
NTP Classic, инженеры из компаний Hewlett Packard и Akamai Technologies, а также участники проектов GPSD (http://www.catb.org/gpsd/) и RTEMS (https://www.rtems.org/).
Первый бета-выпуск NTPsec пока содержит не все задуманные возможности, а поддерживаемые платформы ограничены Linux и FreeBSD, но базовая функциональность по синхронизации времени работает вполне стабильно, проект полностью совместим с классическим пакетом NTP и использует те же алгоритмы. Изменения (https://gitlab.com/NTPsec/ntpsec/blob/master/NEWS) в NTPsec в основном касаются переработки внутренностей (https://www.ntpsec.org/accomplishments.html) с внедрением передовых техник предотвращения проведения атак. Например, все функции работы с памятью и строками заменены на защищённые аналоги, не допускающие переполнения буфера. Поставляемые в комплекте экземпляры libevent2 заменены на внешние зависимости. Удалены неиспользуемые компоненты библиотек ISC. Осуществлён переход к манипуляции наносекундными отрезками времени вместо микросекунд. Исправлены ошибки, выявленные при тестировании в системе Coverity.
Из изменений, заметных пользователю, отмечается переименование утилит с целью унификации их имён (sntp переименован в ntpdig, ntp-keygen в ntpkeygen, ntp-wait в ntpwait, update-leap в ntpleapfetch), удаление демона ntpsnmpd (не соответствует RFC 5907) и утилиты ntpdc (следует использовать ntpq), прекращение поддержки устаревших типов эталонных часов. Добавлена новая утилита ntpfrob, предоставляющая средства для диагностики и тонкой настройки локального хронометра. Вместо программы ntpdate предложенная shell-обвязка над утилитой ntpdig. Вывод часов приведён в соответствие с форматом ISO8601.
Из планов на будущее отмечается подготовка полнофункционального тестового набора, чистка кодовой базы от устаревших возможностей (https://www.ntpsec.org/removal-plan.html), полная поддержка IPv6, переход к модульной системе с выделением подсистемы управления часами в компонент refclockd, который будет отделён от алгоритмов синхронизации времени.Напомним, что для разрешения ситуации с плачевным (https://www.opennet.me/opennews/art.shtml?num=41309) уровнем безопасности эталонного NTPD уже предпринято несколько инициатив - OpenNTPD (https://www.opennet.me/opennews/art.shtml?num=41419) от проекта OpenBSD и Ntimed (https://www.opennet.me/opennews/art.shtml?num=41318) от организации Network Time Foundation (http://nwtime.org/projects/ntimed/), так же курирующей основной проект NTPD. В обоих переработка NTPD с целью повышения безопасности была признана затруднительной из-за большой раздутости кодовой базы (более 300 тысяч строк), проведение полного аудита и переработка которой слишком трудоёмкая задача.
URL: http://esr.ibiblio.org/?p=6924
Новость: http://www.opennet.me/opennews/art.shtml?num=43350
Уж кого, а Реймонда к связанным с безопасностью проектам допускать нельзя.
До появления proftpd его fetchmail был эталоном дырявого кода и примером наплевательского отношения к безопасности.
Жаль, что на http://www.fetchmail.info/security.html дыры до 2005 года не упомянуты, было весело с новым remote code execution каждый месяц.
Ещё забавно без лишней скромности написано про Реймондовский GPSD в https://www.ntpsec.org/FAQ.html"GPSD has an exceptional record of reliability and security over a decade of literally billions of deployments in mobile and embedded systems ranging from smartphones through life-critical navigation systems to military and aerospace applications. You rely on it every time you use Google Maps.
Applying that GPSD and RTEMS experience to NTP combines the best in modern high-reliability software engineering with the proven excellence of the NTP Classic core algorithms."
Еще раз "exceptional record of security", и это при remote root дыре :-)
http://www.mail-archive.com/debian-bugs-closed@lists.de...
http://www.digitalmunition.com/DMA%5B2005-0125a%5D...
> "GPSD has an exceptional record of reliability and security over a decade
> of literally billions of deployments in mobile and embedded systems ranging
> Еще раз "exceptional record of security", и это при remote root дыре
> :-)
> /debian-bugs-closed@lists.debian.org/msg02103.html"27 Jan 2005 06:39:22 -0800"
Формально всё верно же: over a decade, 10 лет и 10 месяцев почти.
Он уже это понял и исправляется :)
Сомнительно, если участь, что его GPSD обязательно требует запуска с правами root.
http://www.catb.org/gpsd/gpsd.html
Читать не умеете ?gpsd must start up as root in order to open the NTPD shared-memory segment, open its logfile, and create its local control socket. Before doing any processing of GPS data, it tries to drop root privileges by setting its UID to "nobody" (or another configured userid) and its group ID to the group of the initial GPS passed on the command line — or, if that device doesn't exist, to the group of /dev/ttyS0.
Я, конечно, не разработчик ядра, но подозреваю, что за программы, которым нужно немножко рута, в сообществе принято бить канделябрами по пальцам.
Линукс-вэй вроде как предполагает в таких случаях дробить программу на отдельную утилиту, требующую прав рута для конкретной цели и завершающуюся по достижении этой цели, и отдельного демона, который работает от сих до сих, никаких лишних прав изначально не требуя. Разве не так?Хинт: "разве не так?" - это не риторический вопрос, а приглашение объяснить, как оно на самом деле, если вы знаете лучше.
Ну так оно наверно и есть.
Открытие требующих рутовых прав файлов/сокетов, затем exec.
"it tries to drop root privileges" как бы намекает, что это не так.
Особенно "tries" наводит на мысль, что в случае чего демон продолжит работу под рутом.
> "it tries to drop root privileges" как бы намекает, что это не
> так.
> Особенно "tries" наводит на мысль, что в случае чего демон продолжит работу
> под рутом.Посмотрел исходники, да, так оно и есть.
Пытается сменить права, но если не получилось - продолжит работу.
Правда это самое не получилось маловероятно. Разве что ему неправильный GPSD_USER скормили, ну это по идее проблема админа :)
Хотя я в таких случаях завершаю работу приложения, если оно чего-то такого критичного не смогло сделать.
> Я, конечно, не разработчик ядра, но подозреваю, что за программы, которым нужно немножко рута, в сообществе принято бить канделябрами по пальцам.Линукс-вэй вроде как предполагает в таких случаях дробить программу на отдельную утилиту, требующую прав рута для конкретной цели и завершающуюся по достижении этой цели, и отдельного демона, который работает от сих до сих, никаких лишних прав изначально не требуя. Разве не так?
> запуситься о root , инициализировать файловые дискрипторы (сокеты и т п), а затем сбросить с себя все привелегии (в частности -- поменять пользователя) ---
---это самый нормальный и безопасный способ. и главное простой как дерево, негде ему сломаться на ровном месте
> Я, конечно, не разработчик ядра, но подозреваю, что за программы, которым нужно немножко рута, в сообществе принято бить канделябрами по пальцам.
> Линукс-вэй вроде как предполагает в таких случаях дробить программу на отдельную утилиту, требующую прав рута для конкретной цели и завершающуюся по достижении этой цели, и отдельного демона, который работает от сих до сих, никаких лишних прав изначально не требуя. Разве не так?запуситься о root , инициализировать файловые дискрипторы (сокеты и т п), а затем сбросить с себя все привелегии (в частности -- поменять пользователя) ---
---это самый нормальный и безопасный способ. и главное простой как дерево, негде ему сломаться на ровном месте
Ладно, тогда вопрос дилетанта № 2:
Если в процессе работы этот самый демон вдруг захочет поднять себе привилегии и открыть еще сокет-другой, всякие там AppArmor-ы будут уверены, что так и надо, не так ли?
> Ладно, тогда вопрос дилетанта № 2:
> Если в процессе работы этот самый демон вдруг захочет поднять себе привилегии
> и открыть еще сокет-другой, всякие там AppArmor-ы будут уверены, что так
> и надо, не так ли?Что значит "захочет"?
$ man 2 wantrootprivileges
No entry for wantrootprivileges in section 2 of the manual:(
Я где-то читал слова "переполнение, приводящее к выполнению произвольного кода" и таки "повышение привилегий", встречающиеся если не в одном предложении, то в соседних.
Я неправильно сложил этот пазл?
> Я где-то читал слова "переполнение, приводящее к выполнению произвольного кода" и таки
> "повышение привилегий", встречающиеся если не в одном предложении, то в соседних.
> Я неправильно сложил этот пазл?Наверно, не знаю.
Мне непонятно как приложение, сделавшее setuid на не 0 может обратно вернуться на root.
> Если в процессе работы этот самый демон вдруг захочет поднять себе привилегии и открыть еще сокет-другой, всякие там AppArmor-ы будут уверены, что так и надо, не так ли?Нет, не так. root-привилегии можно сбросить насовсем, безвозвратно, и обычно оно так и делается. См. setresuid(2)
ни в коем случае не форкать старый облезлый код ntpd где там несколько сот тысяч строк кода. пишите с нуля как это делают OpenNTPD и Ntimed(http://phk.freebsd.dk/time/20140926.html) с учетом безопасности и простоты.
openntpd - простое и безопасное нерабочее г.вно.
А что там не рабочего?Использую на везде вместо ntpd - везде со своей функцией клиента справляется на отлично и никакие порты на прослушивание не открывает.
> Использую на везде вместо ntpd - везде со своей функцией клиента справляется
> на отличноАналогично, но вот мне указали на первое же предложение на их оф.сайте. И там действительно написано "и сервер тоже". В фичах, правда, отмазка "насколько это не мешает нашей грозной безопасной безопасности", но это детали. //На сервере "локалки" ntpd-оригинал.
> и никакие порты на прослушивание не открывает.
И да, специально на сайте и на localhost-е перечитал про listen в [его!] man ntpd.conf -- есть listen.
...мои глаза!
constraints from "https://www.google.com/search?q=openntpd"
>> Использую на везде вместо ntpd - везде со своей функцией клиента справляется
>> на отлично
> Аналогично, но вот мне указали на первое же предложение на их оф.сайте.
> И там действительно написано "и сервер тоже". В фичах,
> правда, отмазка "насколько это не мешает нашей грозной безопасной безопасности", но
> это детали. //На сервере "локалки" ntpd-оригинал.
>> и никакие порты на прослушивание не открывает.
> И да, специально на сайте и на localhost-е перечитал про listen в
> [его!] man ntpd.conf -- есть listen.
> ...мои глаза!constraints from "https://www.google.com/search?q=openntpd"О, пришёл Андрюша-слышу-звон-да-не-знаю-где-он.
Хоть почитали бы, зачем были придуманы эти constraints.
Эпически обсирается если время на сервере и клиенте сильно различается.
И да обычный ntpd в этой ситуации работает.
> Эпически обсирается если время на сервере и клиенте сильно различается.
> И да обычный ntpd в этой ситуации работает.Читать документацию (hint: ключик -s) - не, не слышали.
> openntpd - простое и безопасное нерабочее г.вно.Дядя маны иногда курить надо, запускаешь # openntpd -s и всё работает
> Дядя маны иногда курить надо, запускаешь # openntpd -s и всё работаетЯ тоже так думал. А вот хрен.
>> Дядя маны иногда курить надо, запускаешь # openntpd -s и всё работает
> Я тоже так думал. А вот хрен.А конкретнее?
> openntpd - простое и безопасное нерабочее г.вно.вам на заметку что это в "гxвно" добавили опцию дополнительной проверки/ограничения сверки времени с надежными HTTPS ресурсом через TLS. Время из заголовка HTTPS не используются для установки/синхронизации времени, но служит некой дополнительной проверкой NTP сервера для того чтобы исключить нелегитимные/неевалидные NTP сервера... (http://undeadly.org/cgi?action=article&sid=20150325181259)
почаще читайте OpenBSD Journal :)
Еще не хватало чтобы ntp-клиент не пойми куда в интернет лазил.
> Еще не хватало чтобы ntp-клиент не пойми куда в интернет лазил.а он и не будет пока ты явно не укажешь
> ни в коем случае не форкать старый облезлый код ntpd где там
> несколько сот тысяч строк кода. пишите с нуля как это делают
> OpenNTPD и Ntimed
>с учетом безопасности и простоты.Первый - не сервер, а клиент, cron+ntpdate практически.
Второй - таки форк/патч/"на поиграться devel" оригинального ntpd.Не наблюдаю никакого "как это делают". Вам, наверное, виднее.
> Первый - не сервер, а клиент, cron+ntpdate практически.С сайта OpenNTPD: "It provides the ability to sync the local clock to remote NTP servers and can act as NTP server itself, redistributing the local clock.
>> Первый - не сервер, а клиент, cron+ntpdate практически.
> can act as NTP server
> itself, redistributing the local clock.Был не прав, признаю безобразной ошибкой.
>> ни в коем случае не форкать старый облезлый код ntpd где там
>> несколько сот тысяч строк кода. пишите с нуля как это делают
>> OpenNTPD и Ntimed
>>с учетом безопасности и простоты.
> Первый - не сервер, а клиент, cron+ntpdate практически.
> Второй - таки форк/патч/"на поиграться devel" оригинального ntpd.
> Не наблюдаю никакого "как это делают". Вам, наверное, виднее.ntimed интереснее.
а про "форк на поиграться" так это больше для сабжа.
криворукий реймонд, впрочем ничего консистентного за десятилетия и юзабельное - так и не создал.
> криворукий реймонд, впрочем ничего консистентного за десятилетия и юзабельное - так и
> не создал.Ну, почему ж, reposurgeon на питончике. В руках одного пользователя оно точно работает. Автора.
С другой стороны, gpsd есть, собор-базар и ко есть. За созданием новенького чаще чем в десятилетие -- на freedesktop.org, к празднослоняющемуся-в-одиночестве, в комм.сущности типа Мозилы и Хатта. Мало ли "прогрессивных" мест.
> Второй - таки форк/патч/"на поиграться devel" оригинального ntpd.Ntimed не форк, а разрабатываемое с чистого листа замена ntpd от автора Varnish и core разработчика FreeBSD. Доработки конечно требуются, но он в полной мере работоспособный продукт.
о чем и речь.
человеческая синхронизация и автоподстройка - в обоих альтернативах - еще появится не скоро и не факт, к примеру.
>> ...но базовая функциональность по синхронизации времени работает вполне стабильно...Неужели? ))
Ну прям сказка о потерянном времени
Ленарту намекните что пора бы в systemd встроить сервер ntp
А также написанные с нуля httpd, ftpd, smtpd, ldapd, etc.
Клиент кстати уже есть, systemd-timesyncd. Настраивается через timedatectl, как заставить его отдельно обновить время по команде, а не по запуску, я как-то не нашёл, приходится руками сервис перезапускать. Ну да для разно
й домашней аппаратуры должно хватить.