ХАКЕР 04 /171/ 2013 Семь столпов Linux117собственный список процессов, сетевой стек и систему межпроцессноговзаимодействия.В сочетании эти две технологии позволяют создать полностьювиртуализированное окружение для группы процессов,чем с успехом пользуются системы виртуализации OpenVZи LXC для запуска «Linux внутри Linux». Также с помощью Cgroupsможно легко выполнить довольно сложные задачи, вроде ограничениявсех малозначимых фоновых демонов в процессоре,безопасный запуск подозрительных приложений, многопользовательскоеокружение с полным отделением юзеров другот друга (как сделано в Ubuntu Touch), назначение всем интерактивнымпроцессам более высокого приоритета (такой подходприменяется в текущих версиях Linux) и многое другое.KVM — это драйвер для подсистем Intel VTи AMD SVM, в отличие от Xen не затрагивающийбазовых структур ядраCFSЗа все время существования Linux сменил множество различныхалгоритмов планирования процессов, от самых простыхи примитивных до алгоритмов, способных предугадывать будущиепотребности процессов в ресурсах процессора и равномернораспределять время между всеми процессами. Однаконаиболее значимым стал переход к использованию планировщикаCFS, который позволил вплотную приблизить работу системык идеалу.CFS (Completely Fair Scheduler) был разработан Инго Молнаромпод впечатлением от планировщика Rotating StaircaseDeadline за авторством непризнанного Linux-хакера Кона Коливаса,известного своим нестандартным подходом к реализациивнутриядерных механизмов. CFS отличается простотой, отсутствиемкакой-либо эвристики и удивительной способностьюк правильной балансировке нагрузки. В системе с CFS можнозапросто запустить компиляцию в несколько потоков, форкбомбу,фильм и при этом спокойно сидеть в интернете, практическине замечая каких-либо притормаживаний. Нагрузка будетраспределена полностью равномерно.Достигается это за счет простого алгоритма распределениявремени, в котором процессы встают в очередь в том порядке,в котором они использовали время процессора в предыдущийраз. Наименее жадные получают процессор первыми, наиболеежадные — последними. Поэтому, например, компилятори форк-бомба будут находиться ближе к концу в очереди,а интерактивные процессы, которые большую часть временипростаивают, ожидая ввода пользователя или данных с диска,— к началу, что является разумным, но полностью автоматизированнымразделением времени.CFS был включен в ядро, начиная с версии 2.6.23, и, вероятнеевсего, еще не скоро покинет его (если это вообще случится).Разработчики FreeBSD портировали его в свою систему,но, к сожалению, забросили разработку в пользу собственногопланировщика ULE.userspacekernelIs -1 /tmp/fuseglibcexample/hello /tmp/fuselibfuseglibcFUSEУправление виртуальнымиKVMокружениямис помощьюvirt-managerПринцип работы FUSEKVMК началу бума виртуализации в мире Linux уже существовал инструмент,позволяющий превратить пингвина в полноценнуюплатформу для запуска виртуальных машин. Это Xen, которыйпоявился еще до начала продаж процессоров с поддержкой аппаратнойвиртуализации и позволял запускать (модифицированные)гостевые окружения на скорости, близкой к нативной.Однако с появлением технологий аппаратной виртуализацииIntel VT и AMD SVM стало ясно, что Xen, будучи оправданным решениемв мире паравиртуализации, в новых условиях оказываетсярешением избыточным, требуя использовать специальноеядро и инструменты даже в том случае, если предполагаетсяаппаратная виртуализация.Решением проблемы стал KVM (Kernel-based VirtualMachine), небольшой модуль Linux-ядра, позволяющий получитьвсе возможности аппаратной виртуализации без необходимостиналожения патчей, установки специального ядраи тому подобных извращений. Достаточно загрузить модуль,установить специальную версию эмулятора QEMU — и можноначинать запуск виртуальных окружений, работающих со скоростью99% от нативных.Козырь KVM в предельной простоте. Это всего лишь небольшойдрайвер для подсистем Intel VT и AMD SVM, который,в отличие от того же Xen, не затрагивает никаких базовых структурядра и не требует использования специальных драйверовв виртуальных окружениях. Вся сложная работа выполняетсяв пространстве пользователя силами того самого QEMU, тогдакак KVM играет роль интерфейса для настройки адресного пространствагостя виртуальной машины.По этой причине код KVM был очень быстро принят в ядроLinux 2.6.20, а компания Qumranet, ответственная за его разработку,куплена Red Hat. Сегодня KVM — это стандарт в миреLinux-виртуализации. Он используется во многих облачныхплатформах и фреймворках. В виртуальных окружениях, созданныхKVM, работают миллионы серверов. Он является базовойчастью всех облачных решений таких компаний, как Red Hat,Ubuntu, SUSE и многих других.VFS...NFSExt3ВЫВОДЫLinux развивается стремительными темпами, серьезно обновляясьдо шести-семи раз в год. Однако по-настоящему фундаментальныетехнологии появляются в нем не так часто. В статьемы рассмотрели наиболее важные из этих технологий, что совсемне значит, будто на этом их список заканчивается. За болеечем 20 лет существования ядра в Linux появилось и исчезлоогромное количество технологий, для описания которых пришлосьбы расширить статью до полноценной книги.
118 UnixoidХАКЕР 04 /171/ 2013ПОДУШКАБЕЗОПАСНОСТИРоман Ярыженкоrommanio@yandex.ruСОЗДАЕМ ОТКАЗОУСТОЙЧИВУЮСРЕДУ ДЛЯ ЭКСПЕРИМЕНТОВНА ОСНОВЕ UBUNTU 12.10Никто из нас не застрахован от ошибок. Иногдасиндром кривых рук приводит к весьмапечальным последствиям. Иногда оченьсложно удержаться и не провести «антинаучные»эксперименты с системой или запуститьскрипт/приложение, скачанное из непроверенногоисточника. И здесь на помощьприходят различные средства для запускаприложений в изолированной среде и расширенныевозможности файловой системы.ВВЕДЕНИЕ*nix-системы всегда были относительно устойчивы к некорректнонаписанным приложениям (в том случае, конечно, если онизапускались не из-под суперпользователя). Однако иногда возникаетжелание поэкспериментировать с системой — порезвитьсяс конфигами, отдельные из которых могут быть жизненноважными, запустить подозрительный скрипт, поставить программу,полученную из недоверенного источника… А то и простоодолевает паранойя, и хочется возвести как можно большебарьеров для защиты от потенциальной малвари. В статьебудут описаны некоторые средства, позволяющие избежатьпоследствий невынужденных ошибок с помощью отката на заблаговременносозданную точку возврата (снапшоты Btrfs), запуститьподозрительную программу в ограниченном окружениии потешить твою паранойю (Arkose и chroot).CHROOTChroot известен давным-давно. У него имеется огромное преимуществоперед другими средствами — он работает везде,даже на очень старых дистрибутивах. Все эти новомодные песочницыпредставляют собой не что иное, как его дальнейшееразвитие. Но есть и минусы. Например, нет возможности ограничитьработу с сетью, root может при некотором усилии выйтииз него, и самое главное — его достаточно сложно настраивать.Несмотря на это, для некоторых целей, к примеру установкипакетов из исходников, он подходит идеально. Существуеткак минимум три способа создания chroot-окружения: