Новые грани BSD. Детальный обзор OpenBSD 4.5 и NetBSD 5.0Евгений «j1m» Зобнин (zobnin@gmail.com) В сегодняшнем UNIX-мире развитие Linux и FreeBSD напоминает бесконечную гонку за модой, превращающую операционные системы в клубок запутанного кода, а сообщества - в рассадник троллей и надменных гуру. На этом фоне стоящие в сторонке Open/NetBSD могут стать настоящей отдушиной и примерами того, как мудрые люди создают красивые, лишенные попсовости операционки. OpenBSD. Лишь две удаленные уязвимости за все время существованияOpenBSD - проект Theo de Raadt и группы единомышленников, отпочковавшийся от NetBSD в 1995 году и начатый с целью создать полностью свободную операционную систему с оглядкой на высокую стабильность и безопасность. OpenBSD всегда славилась своей непотопляемостью, и, если описывать систему одним предложением, то получится что-то вроде: «Система для параноидальных админов». И это правда – код OpenBSD просто кишит многочисленными проверками на валидность данных, права доступа и полномочия. Для затруднения возможных атак рандомизируется абсолютно все, начиная от ID процессов и номеров портов и заканчивая страницами виртуальной памяти. Любой код перед включением в официальную ветку досконально проверяется и анализируется на предмет ошибок. И даже стороннее ПО, включенное в базовую поставку системы, распространяется с многочисленными доработками и заплатками, улучшающими стойкость. В рамках проекта написаны такие вещи, как незаменимый инструмент любого администратора OpenSSH и едва ли не самый продвинутый и удобный в настройке брэндмауэр pf, который сегодня можно найти в любой ОС семейства BSD. Борьба за качество и легальность кода - еще одна отличительная черта разработчиков OpenBSD. Будучи поборниками лицензии BSD и толково написанного, лаконичного кода, участники проекта готовы доработать и переписать любой компонент системы, созданный сторонними разработчиками. В составе OpenBSD уже распространяется собственная реализация системы контроля версий CVS, сервер и клиент для протоколов NTP, SNMP, OSPF, BGP, а в 4.5 войдет еще и демон SMTP. Обсуждается возможность создания простого и быстрого компилятора языка Си и замены GNU binutils. Разработчики всегда ратовали за открытие спецификаций на «железо» и без лишних слов брались за написание открытых аналогов драйверов, огромное количество которых перекочевало в NetBSD и FreeBSD. OpenBSD 4.5. Дата выхода: 1 Мая 2009В начале ноября 2008 года увидела свет OpenBSD 4.4. В состав ее вошли OpenSSH 5.1, пригодный к использованию OpenCVS, утилиты sysmerge и tcpbench, а также несколько новых драйверов и улучшений в подсистемах ядра (самым главным из которых стала поддержка WPA/WPA2 для беспроводных устройств) и стандартных утилитах. Что же нас ждет в новом релизе? Первое, что обращает на себя внимание - smtpd, безопасный, легкий, удобный в настройке SMTP-демон, который нацелен не столько заменить всемогущий sendmail, сколько обеспечить простоту развертывания и удобство использования. В конфигурационном файле используется pf-подобный синтаксис: Пример конфигурационного файла smtpd Сервер уже включен в дерево исходных кодов и умеет все, что может потребоваться в 95% случаев. В состав версии 4.5 вошел OpenSSH 5.2, который может похвастать такими нововведениями:
Кроме новых возможностей, в OpenSSH 5.2 устранены две теоретические уязвимости и исправлен десяток багов. Код стека bluetooth синхронизирован с NetBSD и по умолчанию включен в код ядра для платформ alpha, amd64, armish, hppa, i386, landisk, macppc, sparc64 и zaurus. Добавлены демон btd(8), утилита btctl(8) и конфигурационный файл bt.conf(5) для управления bluetooth-устройствами. В код беспроводного стека добавлена начальная реализация 802.11x PMKSA кэширования и преаутентификации, поддержка протокола BIP (Broadcast/Multicast Integrity Protocol) для 802.11w. Включен код дефрагментации для приема MSDU и MMPDU фрагментов. Драйвера ipw(4) и iwi(4) теперь поддерживают WPA. Опция chan, переданная ifconfig(8), приводит к печати всех поддерживаемых каналов, а scan выводит список досягаемых точек доступа. Из ядра удален код реализации /dev/drum и /dev/prandom. Добавлена поддержка семейства процессоров ARM9e для платформы ARM. DRM-модули inteldrm и radeondrm, необходимые для поддержки аппаратного ускорения на соответствующих видеокартах, теперь по умолчанию включены в ядро. Генератор случайных чисел отныне возвращает собственное значение для каждого процессора. Список поддерживаемых платформ пополнился еще двумя позициями: gumstix и OpenMoko, хотя реализация последней настолько примитивна, что может использоваться только для тестирования. Добавлено новое псевдоустройство pflow(4), которое экспортирует данные IP аккаунтинга через UDP в совместимом с NetFlow 5 формате. Чтобы настроить интерфейс pflow, нужно выполнить следующие команды:
Для примера произведем учет ICMP-запросов, приходящих на внешний сетевой интерфейс:
Псевдоустройство pfsync(4) переведено на использование протокола пятой версии, который не совместим с предыдущими. В gcc и gdb добавлена поддержка PIE (Position Independent Executables), которые рандомизируют размещение кода, данных, стека и блока библиотек внутри исполняемого файла. Утилиты fstat(1), pstat(8) и некоторые переменные sysctl больше не показывают смещения в файлах и другую информацию для пользователей, не владеющих этими файлами (root по-прежнему видит все). Ядро OpenBSD обзавелось поддержкой алгоритмов HMAC-MD5, HMAC-SHA1, HMAC-SHA256, AES-128-CMAC и AES «Key Wrap», которые используются для ассиметричного шифрования других ключей (смотри /usr/src/sys/crypto). В resolv.conf теперь можно указывать номер порта для записей nameserver, то есть строка вида «nameserver 17.16.67.143:5353» будет корректно обработана, и все запросы пойдут на порт 5353 вместо стандартного 53-го. Множество изменений было произведено в aucat. Теперь утилита потребляет меньше процессорных мощностей, умеет слушать несколько сокетов с отдельным уровнем громкости для каждого потока и может работать в режиме обратной петли. Все это превращает программу в настоящий аудио-сервер, способный выступать в качестве замены jack или PulseAudio. Для примера приведу команду запуска aucat в режиме сервера с двумя слушающими сокетами, громкость одного из которых установлена в 65 (default), а второго - выкручена на полную (max):
Стандартный клиент ftp теперь умеет игнорировать псевдокаталоги (чтобы рекурсивные закачки не создавали бесконечный цикл), корректно докачивать файлы, поддерживает прокси, защищенные паролем, и флаг '-n' для получения только обновленных файлов. Во многих утилитах исправлены ошибки и выловлены утечки памяти. Решена проблема DH0_DHCP_OPTIONS_OVERLOAD в dhcpd(8) и проблема неправильного обновления в коде BGP, которая могла привести к незапланированному закрытию сессии. Закрыты бреши безопасности в коде OpenSSL и named(8). В коде ACPI устранена паника на нетбуках Asus eeePC 1000H и добавлен воркараунд для сбойных ACPI BIOS'ов. NetBSD. Работает даже на тостерахNetBSD - первая ОС семейства BSD, родившаяся в 1993 году на кодовой базе 4.3BSD Net/2, 4.4BSD-Lite и 4.4BSD-Lite2, распространяемых калифорнийским университетом Беркли. Лозунг NetBSD – «Конечно, NetBSD может работать и на этом» (Of course it runs NetBSD). Система портирована на 60 аппаратных платформ, для каждой из которых доступны тысячи прекомпилированных пакетов. Причем сама система сборки пакетов, именуемая pkgsrc, способна работать практически на любой POSIX-совместимой системе без каких-либо затруднений. Что тут скажешь? Целостность ОС и проработанность дизайна всех компонентов системы, ставшие следствием высокой портабельности, - одно из важнейших достоинств NetBSD. NetBSD 5.0Если OpenBSD 4.5 - релиз минорный, больших изменений в себе не несущий, то анонс NetBSD 5.0 - событие громкое и значимое. С момента выхода 4.0 прошло уже более двух лет. За это время разработчики переносимой BSD добавили в свое творение множество самых разнообразных, интересных (порой – неожиданных) новшеств. Наиболее значительные изменения произошли в ядре ОС. Теперь FFS имеет поддержку журналирования; добавлен код реализации 1:1 потоков; переработаны планировщик процессов и система блокировок; реализация malloc заменена на jemalloc; порт на Xen обновлен до версии 3.3; интегрирована новая, независимая от архитектуры система управления питанием и обмена сообщения между драйверами PMF; появилась поддержка ACPI suspend/resume, новый фреймворк rump для запуска частей ядра в пространстве пользователя и системы puffs для реализации файловых систем вне ядра. Добавлено множество новых драйверов и обновлены существующие. Обо всем подробнее. Код журналирования метаданных WAPBL (Write Ahead Physical Block Logging) подарен проекту компанией Wasabi Systems, использующей его аж с 2003-го года (ничего удивительного - несколько ведущих разработчиков NetBSD работают в этой компании). Это реализация классической модели журналирования всех операций записи блоков перед их непосредственным применением. Изюминка системы в том, что она не требует какого-либо преобразования ФС (достаточно просто добавить опцию log в /etc/fstab) и в большинстве задач показывает производительность выше, чем soft-dependencies (soft-updates, говоря на языке FreeBSD). Особого внимания заслуживает фреймворк rump (Runnable Userspace Meta Programs), позволяющий запускать части ядра как пользовательские процессы. Rump придает NetBSD черты настоящей микроядерной ОС, но идея, лежащая в его основе, очень проста. Сам фреймворк представляет собой не что иное, как вынесенный в пространство пользователя набор внутриядерных функций. Он используется высокоуровневыми, не зависимыми от аппаратной платформы, частями ядра для доступа к низкоуровневым. Вместе с rump в NetBSD вошла и программа rump_nfs(8), реализующая клиент NFS в пространстве пользователя. Более того, любую файловую систему теперь можно перекомпилировать для работы вне ядра. Другая интересная новинка ядра - puffs (Pass-to-Userspace Framework File System) - фреймворк, использующий возможности rump и позволяющий реализовать файловую систему любой сложности полностью в пространстве пользователя. Вместе с фреймворком также добавлены файловые системы, использующие его возможности:
Поверх puffs создана обертка совместимости с FUSE (File system in USErspace, fuse.sf.net). Пример подключения sftp-сессии с помощью mount_psshfs:
В ядро импортированы переработанные системы блокировок, реализованные в ветках newlock2 и vmlocking2, а также патч для блокировки сокетов. Изменению подвергся и код библиотеки libpthread, в которую было добавлено несколько улучшений в области синхронизации потоков. Модель потоков SA заменена на 1:1. Код реализации malloc заменен на jemalloc из FreeBSD, оптимизированный для многонитевых приложений. Интегрирован модульный планировщик SCHED_M2, который показывает высокую производительность на многопроцессорных системах, поддерживает исполнение процессов в реальном времени и позволяет выбирать алгоритм планирования, не останавливая систему. Теперь NetBSD более масштабируема и показывает заметный прирост производительности на MP-системах. Большим изменениям подвергся код совместимости с Linux (compat_linux(8) и compat_linux32). Из FreeBSD импортирован код поддержки TLS, добавлены системные вызовы getdgid, old_uname, readdir, pread, pwrite, mlock, munlock, msync, sys_clock{getres,gettime,settime}, несколько системных вызовов семейства chown. Обновлена поддержка IPC, добавлена поддержка ossaudio(3). Виртуальная файловая система procfs теперь экспортирует /proc/stat, /proc/loadavg и /proc/<pid>/statm. Обновлена поддержка эмуляции 32-битной NetBSD (compat_netbsd32(8)), удалена поддержка эмуляции HP-UX (compat_hpux). Код реализации «магических символических ссылок», позволяющий симлинкам указывать на разные файлы в зависимости от значения одной или нескольких специальных переменных, обновлен и поддерживает переменную @ruid, которая раскрывается в «настоящий» UID процесса. Эта возможность используется для создания изолированного /tmp для каждого пользователя (опция «per_user_tmp=yes» в /etc/rc.conf). Магические симлинки - довольно простой, но полезный механизм, который позволяет сделать, например, так (на машине x86 ~/bin будет указывать на ~/bin-i386):
Обновлен стек bluetooth и сопутствующие утилиты. В ядро добавлен драйвер для Bluetooth HCI UART, написанный с оглядкой на Linux-драйвера BlueZ и позволяющий пересылать пакеты через последовательный порт. Добавлены демон btuartd(8), который управляет работой драйвера, bpand(8), управляющий профилями PAN (Bluetooth Personal Area Networking) и btkey(1) - программа для работы с ключами соединений. Утилита ifconfig(8) по команде «list scan» теперь выдает список досягаемых точек доступа. Из других изменения внутри ядра можно отметить работу на консоли Microsoft Xbox, поддержку DRM (Direct Rendering Manager), необходимую для работы 2D- и 3D-ускорения в видеодрайверах, поддержку PIE. Порт на Xen обновлен до версии 3.3, добавлена поддержка архитектуры amd64 (dom0 и domU) и расширения i386 PAE для domU. Из соображений безопасности удален механизм systrace. Ядро теперь еще больше совместимо с POSIX и поддерживает такие расширения стандарта как: POSIX Real-time, Asynchronous I/O и POSIX message queues. Псевдодрайвер fast_ipsec(4) обучили работе с технологией IPSec NAT-T, код брэндмауэра pf(4) синхронизирован с OpenBSD 4.2. Появилась поддержка «ipv6 fast forward». Второй стадией загрузки теперь можно управлять через конфигурационный файл boot.cfg(8), пример которого приведен ниже: В базовое окружение NetBSD были добавлены:
Переработке и модернизации также подверглись существующие утилиты:
В базовую поставку были включены httpd - простой HTTP-сервер, написанный на Си, и dhcpcd 4.0.11. Тише едешь - дальше будешьРазмеренное, неторопливое движение к намеченной цели - еще одна привлекательная черта «альтернативных» BSD. Никакой погони за нововведениями и желания урвать куски сразу всех возможных рынков. Проекты OpenBSD и NetBSD уже давно перешли черту зрелых, полностью готовых к использованию продуктов, и сейчас идет процесс планомерного развития и приспособления к меняющемуся рынку IT. Слежение за разработкой этих ОС сродни чтению мантры, которая успокаивает и наводит на правильные мысли. Стороннее ПО в базовой поставке OpenBSD 4.5
Улучшенная и более защищенная версия Apache 1.3.29 с поддержкой IPv6, SSL/TLS и DSO
В OpenBSD 4.5 из набора прекомпилированных пакетов для платформ i386/amd64 стоит выделить:
Стороннее ПО в базовой поставке NetBSD 5.0
DVDНа прилагаемом к журналу диске ты найдешь OpenBSD 4.5 и NetBSD 5.0. INFO
|