На пути к совершенству. Обзор интересных новшеств мира LinuxЕвгений Зобнин (zobnin@gmail.com) Linux развивается стремительно. Каждый год мы становимся свидетелями очередных витков эволюции этой операционной системы. Развиваются даже те части, развитие которых, казалось бы, уже не требуется. Совершенствуются файловые системы, обновляются планировщики процессов, заменяется система фильтрации пакетов. В этой статье мы рассмотрим наиболее значимые новшества Linux. Опробовать их можно будет уже в этом году. Очеловечивание пакетного фильтраСистема фильтрации пакетов ядра Linux прошла долгий путь развития. В ядре версии 2.0 появилась первая реализация BSD-подобного межсетевого экрана ipfw и закрепленная за ним утилита управления ipfwadm. В версии 2.2 их сменил файрвол ipchains. С выходом ветки 2.4 он, в свою очередь, был вытеснен связкой netfilter/iptables. Netfilter действительно хорош: он грамотно спроектирован; обладает мощными возможностями для конфигурирования таких фич, как трансляция сетевых адресов, прозрачное проксирование, перенаправление трафика, балансировка нагрузки; умеет отслеживать состояние соединений (stateful firewalling). Это позволяет распознавать и блокировать, например, stealth-сканирование; а благодаря дополнительным плагинам он способен обрабатывать пакеты практически любого типа. Огорчает только способ его конфигурирования, который основан на передаче невнятных аргументов командной строки утилите iptables. Можно долго спорить о преимуществах и недостатках способа настройки, предлагаемого iptables, но факт остается фактом: он слишком громоздок и ориентирован на машину, а не человека. Команда разработчиков netfilter уже не раз смотрела в сторону альтернативных систем конфигурирования, предложенных пакетным фильтром pf и различными обертками вокруг iptables (например ferm, ferm.foo-projects.org). Переписать только саму утилиту не представлялось возможным, потому как она была тесно связана с кодом ядра. Patrick McHardy, один из активных разработчиков подсистемы netfilter, взялся за переработку всей системы фильтрации пакетов. Надо сказать, она и без того страдала от других недостатков (необходимость в перезагрузке всех правил во время их обновления, возможность задавать только одну цель для каждого правила, непродуманный механизм расширений, слишком плоская модель кода, не допускающая создавать высокоуровневые абстракции, противоречивые способы сопоставления с шаблоном). В результате на свет появился nftables – пакетный фильтр нового поколения, состоящий из трех взаимосвязанных частей:
Утилита nft читает файл конфигурации (который теперь похож скорее на скрипт, чем на список правил), генерирует на его основе простой компактный псевдокод и передает эти данные ядру. Код nftables, работающий внутри ядра, разбирает псевдокод и применяет его правила к проходящим по цепочкам пакетам. Для конфигурирования nft применяется настоящий язык программирования, который позволяет задавать условия, создавать переменные, выполнять математические операции. Он прост в освоении и достаточно развит для создания сложнейших правил обработки пакетов. Приведенный автором проекта код фильтрации исходящего трафика выглядит так: Пример конфигурационного файла nftables
А способ инкрементального добавления правил очень похож на то, как это делается в OpenBSD:
Генерируемый на выходе псевдокод прост и прямолинеен. Львиную долю работы по проверке правил возложили на компилятор nft. Это позволило существенно сократить код фильтрации, работающий внутри ядра. Теперь он выполняет только базовый набор действий, таких как разбор пакетов, сравнение данных и т.д. В отличие от iptables, утилита nft не так тесно связана с ядром и представляет собой всего лишь фронтенд для генерации псевдокода или инкрементального добавления новых правил. Возможность создания новых фронтендов, обладающих совершенно иным синтаксисом правил, вытекает из общей архитектуры системы. Очередное расширениеДля Linux было создано и портировано из других операционок огромное количество файловых систем, но только одна из них может гордо носить имя официальной - это файловая система ext3. ФС ext3 - уже третья эволюция стандартной файловой системы Linux. До нее была ext2, в основном отличающаяся отсутствием журнала. Еще раньше была ext, первая файловая система, созданная специально для Linux. Однако надолго в ядре она не задержалась (этому способствовали многочисленные ограничения, такие как максимальный размер в 2 Гб и отсутствие поддержки дат модификации файлов). Четвертая реинкарнация файловой системы ext (июнь 2006) стала следствием требований разработчиков – новые функции и возможности могли нарушить обратную совместимость или сделать файловую систему нестабильной и слишком сложной для поддержки. Спустя 5 месяцев предварительная версия ext4 появляется в ядре Linux 2.6.19, помеченная как «экспериментальная разработка». Допиливание файловой системы продолжалось больше года, и только с выходом ядра версии 2.6.28 (25 декабря) ext4 становится стабильной и рекомендованной для повсеместного тестирования. Из-за отсутствия требований к обратной совместимости разработчики ext4 смогли применить самые изощренные техники для повышения производительности, надежности и расширяемости файловой системы. Далее мы рассмотрим все ключевые новшества ext4, которые позволили ей стать одной из самых производительных и богатых на функциональность файловых систем:
Несмотря на отсутствие поддержки обратной совместимости в самой ФС, драйвер ext4 поддерживает прямую совместимость со своей предшественницей. ФС ext3 можно смонтировать в режиме ext4, используя при этом большинство преимуществ новой ФС. Новый этап в развитии GrubВместе с пингвином развиваются и средства его загрузки. Еще совсем недавно единственным загрузчиком Linux был неуклюжий, но хорошо справляющийся со своими задачами LiLo. Позднее его сменил пришедший из мира GNU/Hurd «многоцелевой» grub, который по уровню функциональности вполне мог потягаться с первыми версиями операционной системы MS-DOS. Хотя в дальнейшем развитии grub не было никакой насущной необходимости, разработчики продолжали совершенствовать свой продукт, наводить блеск, повышать эффективность и исправлять ошибки. В результате на свет появился grub2. Это загрузчик нового поколения, который обладает следующими достоинствами:
С точки зрения рядового пользователя grub2 интересен красивым внешним видом, поддержкой различных шрифтов и полностью автоматизированным процессом настройки. Впечатляет, что варианты графического оформления - не просто шкурки, а совершенно разные системы меню. Они могут коренным образом отличаться друг от друга. Загрузчик стал гораздо умнее: конфигурационный файл /boot/grub/grub.cfg теперь содержит прямое упоминание о том, что вместо его ручного редактирования следует воспользоваться командой update-grub. Команда сама найдет все установленные операционные системы и подсобные самодостаточные утилиты (memtest86, например) и добавит их в конфигурационный файл. В новой версии код загрузчика разбит на множество модулей, которые могут быть загружены в любой момент. Stage 1.5 (второй компонент бутлоадера, располагающийся в начале файловой системы), наконец, остался в прошлом, благодаря чему grub стал более гибким и устойчивым к сбоям. Особое мнение разработчиков DebianВ отличие от BSD-систем, большинство компонентов которых развивает одна команда разработчиков, дистрибутивы Linux держатся на кирпичиках, созданных независимыми командами. Дворец, именуемый «операционная система Linux», построен огромным количеством людей, и каждый из них имеет собственное представление об удобстве, стиле и подходе к написанию приложений. Такая ситуация доставляет множество проблем создателям дистрибутивов, но зато оставляет право выбора (не нравится - приготовь сам). Разработчики дистрибутива Debian воспользовались этим правом, чтобы заменить один из главных компонентов ОС Linux - стандартную библиотеку языка Си. Это может показаться странным, но мантейнеры наиважнейшего компонента ОС Linux, библиотеки glibc (GNU C Library), умудрились довести свою разработку до такого состояния, что недовольным пришлось создать собственную группу поддержки их продукта. Стартовавший совсем недавно проект eglibc занялся поддержкой особой версии glibc, которая бы не только решала проблемы сопровождения библиотеки, но и позволяла использовать ее во встраиваемых системах. Проект был быстро взят на вооружение мантейнерами Debian. Их аргументы были более чем весомы:
Библиотека eglibc полностью бинарно совместима с glibc и уже используется другим известным проектом OpenWrt (openwrt.org). Борьба за безопасностьВ начале 2006 года компания Novell анонсировала новую систему создания политик безопасности для приложений. Проект получил имя AppArmor и был нацелен на тех пользователей и системных администраторов, которым требовалась более удобная и простая в сопровождении альтернатива SELinux. Однако, к несчастью компании, AppArmor не смог составить достойной конкуренции SELinux, и Novell пришлось отказаться от применения новой разработки в своих дистрибутивах. Провал AppArmor не был вызван головотяпством маркетологов Novell. Причины неудачи носили чисто технический характер. Одной из них был неэффективный, по мнению специалистов, способ привязки политик безопасности к файловому пути (а не к объекту, как это сделано в SELinux). Другая проблема - костыли в коде, которые пришлось нагородить, потому что механизм LSM (Linux Security Modules) не предусматривал возможности привязки действий по обеспечению ограничений приложения к файловому пути. Мантейнеры Linux-ядра обозвали присланные Novell патчи кашей, которую просто некошерно включать в основной код. Несмотря на все это, идея привязки политик безопасности к файловому пути была слишком лакомым кусочком, чтобы кто-то другой не заинтересовался ей и не попытался реализовать вновь. Одними из таких людей стали разработчики MAC-системы TOMOYO Linux (elinux.org/TomoyoLinux). Пройдя долгий и тернистый путь, сопровождаемый множеством переработок дизайна, они добились-таки включения своей разработки в ядро версии 2.6.30. Набор модулей ядра TOMOYO Linux очень похож на AppArmor, но концептуально более изящен. Он прост в использовании и поддерживает режим обучения, однако пока не представляет той гибкости, которой обладает SELinux. Другая система обеспечения безопасности, принятая в ядро версии 2.6.30, была разработана сотрудниками IBM. Она представляет собой инфраструктуру для контроля целостности исполняемых файлов. Ее следует использовать совместно с SELinux или Slim (Simple Linux Integrity Module - простая реализация песочницы, используемая в серверном ПО IBM). Система предоставляет набор средств, которые позволяют привязать цифровую подпись и контрольную сумму к любому файлу. Если злоумышленник получит прямой доступ к машине и сможет воспользоваться LiveCD для модификации файлов основной системы, система заблокирует доступ к измененным файлам после следующей загрузки. Мигрируем на ext4fsСейчас мы разберемся, как перейти на ext4 без потери данных. Сразу должен предупредить: после выполнения приведенных действий ext3-раздел больше нельзя будет смонтировать как ext3 – только как ext4! Открой терминал и набери:
На момент ввода этой команды устройство должно быть размонтировано. Если требуется преобразовать корневую файловую систему в ext4, то команду следует вводить с LiveCD.
Монтирование файловой системы производится следующим образом:
Если раздел автоматически монтируется через /etc/fstab, не забудь исправить файловую систему на ext4:
Если ты изменил тип файловой системы корневого раздела, то необходимо отредактировать файл /boot/grub/menu.lst и добавить опцию «rootfstype=ext4» в список параметров ядра. Например:
Денис Колисниченко (dhsilabs@mail.ru, www.dkws.org.ua), автор многих книг и статей, посвященных Linux. Критика ext4Многочисленные техники, направленные на увеличение производительности новой файловой системы, сыграли злую шутку с ее создателями. Резкая критика обрушилась в их адрес после включения поддержки ext4 в дистрибутив Ubuntu. Суть проблемы заключалась в следующем: благодаря отложенному распределению и увеличению периода сброса данных на диск, между созданием нового файла и его фактической записью на диск могло проходить до 150 секунд. Если в течение этого периода происходило отключение питания компа, файл бесследно исчезал. Разработчики ext4 сняли с себя ответственность, сказав, что подобным образом ведет себя любая современная ФС (XFS, Reiser4), а пинать следует разработчиков приложений, которые не заботятся о выполнении системного вызова sync() после записи важных данных. В пример был поставлен редактор emacs, который никогда не теряет файлы на ext4. Назад в прошлое: командный интерпретатор в ядреUnix стал первой операционной системой, командный интерпретатор которой был вынесен в отдельный процесс. Matt Ranon решил вернуть все на прежние места и представил патч с реализацией интерфейса командной строки в ядре Linux. Kcli базируется на библиотеке libcli и предназначен для применения в монолитных образах Linux для встраиваемых систем. INFOНесмотря на все достоинства и уникальные черты, файловая система ext4 - не долгосрочное решение, а лишь промежуточный шаг на пути к btrfs, файловой системе нового поколения, которая должна стать официальной ФС Linux через несколько лет. В рамках акции по защите австралийского Тасманского Дьявола от вымирания, Linux-ядро версии 2.6.29 получило новый логотип, на который ты можешь полюбоваться, открыв файл |