11 августа 2007 в 05:08

Hardened Gentoo: установка tutorial

Процесс установки Hardened Gentoo (точнее, апгрейда текущей Gentoo системы в Hardened) выглядит примерно так:

  1. переключаемся на hardened toolchain и пересобираем им всю систему, чтобы все бинарники использовали PIE и SSP (после этого система становится защищена SSP)
  2. устанавливаем hardened-sources (они содержат патчи PaX + GrSecurity + SeLinux + дополнительные от Gentoo) и компилируем их с поддержкой PaX, GrSecurity и GrSecurity/RBAC
  3. перегружаемся с новым ядром (после этого система становится защищена ещё и PaX+PIE и GrSecurity)
  4. некоторое время настраиваем и отлаживаем ограничения доступа (после чего система становится защищена ещё и GrSecurity/RBAC)

Ожидаемые проблемы:
  • не всё может скомпилироваться с PIE+SSP — возможно отдельные пакеты нужно будет патчить или компилировать без одной или обоих из них (мне пока потребовалось через gcc-config переключаться на vanilla gcc только для компиляции X-ов чтобы они работали с ATI-дровами)
  • не всё может нормально работать, т.к. некоторые программы (обычно упоминают X-ы и java) используют выполнение динамически сгенерированного кода для вполне легальных целей, а теперь при попытке это делать они будут киляться либо SSP либо PIE+PaX — для этих программ нужно будет индивидуально отключать часть защит PaX (для этого есть специальные утилиты, например paxctl) и/или компилировать их без SSP
  • не всё может работать из-за ограничений «фич» ядра GrSecurity — в этом случае нужно будет часть защит GrSecurity отключать (глобально, в make menuconfig)
  • настроить ограничения прав доступа может оказаться не просто, и в любой момент когда какая-нить прога сделает что-то, что мы при настройке её прав не учли — она будет прибита ядром… и придётся эти правила в срочном порядке фиксить

Ну что, поехали… :)

Слишком сильная оптимизация (-O3) вместе с hardened toolchain может приводить к разным глюкам и сбоям компиляции, поэтому нужно в /etc/make.conf заменить -O3 на -O2, и убрать все прочие -f* оптимизаторские флаги.

Переходим на hardened-профайл. (Теоретически вместо этого можно было просто добавить в USE-флаги: «hardened pie ssp».)
ln -snf ../usr/portage/profiles/hardened/x86/2.6/ /etc/make.profile

После переключения профайла на hardened/x86/2.6/ выключилось несколько нужных мне USE-флагов, которые в обычных профайлах включены автоматически — я их дописал в make.conf (у вас флаги могут быть другие, просто не забудьте этот момент проследить):
avi encode gtk2 jpeg mpeg oss quicktime spell truetype xv bitmap-fonts truetype-fonts type1-fonts

Компиляция hardened-toolchain и пересборка им всех остальных пакетов:
emerge binutils gcc glibc
emerge -e world
dispatch-conf

Далее, нужно поставить ещё несколько пакетов:
emerge paxtest paxctl gradm

paxtest можно было поставить и раньше, до перехода на hardened toolchain. Эта утилитка пытается делать разные опасные операции (типа переполнения стека с выполнением кода), которые обычно выполняют эксплойты. Если система защищена, то все её попытки будут пресечены, о чём она и сообщит. В общем, можно её погонять до установки hardened toolchain, после а так-же после перезагрузки с ядром где включён PaX, по приколу. :)

paxtest как свою зависимость так-же установит прогу chpax — это старый способ управлять PaX, вместо которого лучше использовать paxctl. Но некоторые проги, распространяемые без исходников, скомпилированы так, что paxctl с ними работать не может, и приходится юзать chpax.

Ну а gradm нужен для настройки RBAC в GrSecurity — тех самых ограничений прав для процессов и юзеров.

Что касается настроек ядра. Я для начала настроил всё так, как описано в доке Gentoo и GrSecurity — при этом не все защиты включены, но большинство софта при таких настройках будет работать. В процессе разбора с настройками возникло несколько теоретических предположений:
  • Если загрузить hardened ядро ДО перекомпилирования системы, то могут возникнуть проблемы если включена эта опция:
    PaX -> Non-executable pages -> Disallow ELF text relocations
  • На сервере, где нет X-ов, можно дополнительно включить: (не забыть перед этим проверить, что от этого не перестало работать что-то кроме X-ов, в частности hwclock):
    Grsecurity -> Address Space Protection -> Disable privileged I/O
  • Кроме того, ещё есть предположение, что некоторые ограничения chroot могут помешать операциям типа инсталляции Gentoo (которая идёт внутри chroot) или попытке починки системы (если, например, для этого загрузиться с CD с таким hardened ядром):
    Grsecurity -> Filesystem Protections -> Deny mounts
    Grsecurity -> Filesystem Protections -> Deny double-chroots
    Grsecurity -> Filesystem Protections -> Deny (f)chmod +s
    Grsecurity -> Filesystem Protections -> Deny mknod
    

Начало. Продолжение следует...
Alex Efros @powerman
карма
303,5
рейтинг 0,0
Systems Architect, Senior Go/Perl Linux Developer
Похожие публикации
Самое читаемое Администрирование

Комментарии (11)

  • 0
    Хочу на всякий случай отметить два нюанса.

    Во-первых я использовал только 32-битные системы (ибо просто не вижу смысла пересобирать Gentoo под 64 бит даже на своём Core2Duo) - так что на 64-битных системах грабель и шероховатостей может быть немного больше.

    А во-вторых, hardened profile иногда содержит не только устаревшее на пару версий ядро, но и более старые версии gcc/glibc. А "откат" на более старые версии gcc/glibc на живой системе может плохо кончится. Так что если у вас после смены профайла emerge предложит откатить gcc/glibc, то я бы вам это делать не рекомендовал. Лучше перестать обновлять gcc/glibc в обычной системе и дождаться момента, когда в hardened profile будут включены те же или более новые версии gcc/glibc.
  • 0
    Судя по комментам, Gentoo не так пополулярен ;-).
    P.S. сам сижу на OpenSuse, весьма доволен.
    • 0
      Судя по посту, эта система явно не для тех, кто ценит своё время ;)
      • +1
        Провокаторы. :)

        По данным Google Trends в России Gentoo имеет примерно такую же популярность, как Fedora, Debian, etc., а по миру в целом отстаёт от них раза в два. По данным DistroWatch Gentoo входит в первую десятку дистрибутивов. Это что касается популярности.

        Теперь о времени. Gentoo имеет много преимуществ перед другими дистрибутивами. Некоторые из них для меня не важны, например: "максимальная оптимизация под конкретное железо". И среди этих преимуществ нигде и никогда не звучала "дружелюбность к пользователю и простота использования". Но зато несколько других преимуществ для меня оказала критична:

        1. ежедневные обновления, отсутствие необходимости переустанавливать систему при выходе новой версии дистрибутива (или не переустанавливать, а обновлять, но ТАКОЙ дозой новых пакетов, что после этого всё-равно несколько дней нужно восстанавливать работоспособность системы)
        2. возможность полностью настроить дистрибутив "под себя", контролировать какие пакеты в него войдут, и с какими опциями они будут скомпилированы - это сильно увеличивает контроль над системой (т.е. меньше возникает проблем и легче разобраться как их исправить)
        Таким образом, основное время уходит на первоначальном этапе - установке - т.к. вы при этом фактически собираете свой собственный дистрибутив, и должны принять массу решений (ну и квалификацию это от вас требует тоже не маленькую, конечно).

        Ещё время уходит если вы решаете внести какие-то серьёзные изменения в "свой дистрибутив" - например, перейти на Hardened. Но это бывает раз в год, а то и в два-три года.

        Всё остальное время у меня на поддержку (т.е. регулярные обновления) Gentoo уходит минут по 10 в неделю (на обновление домашней машины и нескольких серверов вместе взятых).

        Когда машин много, то есть отличные средства для автоматизации процесса их обновления, так что времени на это уходит не больше, чем на обновление парка машин с rpm-based дистрибутивом типа RedHat. Впрочем, такого парка машин у меня нет, так что за эту информацию я не отвечаю - просто читал отзывы в maillist.
  • 0
    Это всё очень здорово, но количество действий, приведенных в постах "Установка" и "Настройка" наводят на мысль о том, что это "Linux НЕ для всех", о чём вы и пишете выше. Собственно ваши ссылки и говорят о том, что эта далеко не самая популярная (9/10 место) система предназначена для "power users". По-моему это как раз те, кто либо не ценит своё время, либо имеет необычное хобби :)
    • 0
      Угу, не для всех. Если Вы намекаете, что я эти статьи запостил не в тот коллективный блог... :-)

      Да, система для "power users". Но я бы не стал их характеризовать как "либо не ценит своё время, либо имеет необычное хобби". Например, у меня это работа - знаете, приходится админить несколько серверов, бывает и такое. :) И я своё время как раз ценю. Поэтому предпочитаю один раз разобраться и сделать что-нить типа описанного в статье, чем разгребать последствия взлома. Вообще-то это мои прямые обязанности, как админа - сделать всё, что в моих силах, чтобы усложнить взлом сервера.

      И статьи эти написаны в надежде сэкономить время на изучение этого вопроса другим людям, и повысить качество их работы подтолкнув их к переходу на Hardened.
      • 0
        >Угу, не для всех. Если Вы намекаете, что я эти статьи запостил не в тот коллективный блог... :-)

        Отчасти это так :), но с другой стороны вы популяризуете один из дитрибутивов, в результате линукс становится ближе ко всем.

        >Но я бы не стал их характеризовать как "либо не ценит своё время, либо имеет необычное хобби". Например, у меня это работа - знаете, приходится админить несколько серверов, бывает и такое. :)

        Честно говоря, я немного удивлен. Не знаю ни одного человека, использующего в качестве рабочей ОС Gentoo, хотя знакомых линуксоидов немало. Аналогично с корпоративным рынком.

        >И статьи эти написаны в надежде сэкономить время на изучение этого вопроса другим людям, и повысить качество их работы подтолкнув их к переходу на Hardened.

        Я не спорю с тем, что статьи полезные, а соглашаюсь с тем , что дистрибутив этот не очень популярен, вероятно, в значительной степени из-за своей "недружелюбности".
    • 0
      >Это всё очень здорово, но количество действий, приведенных в постах "Установка" и "Настройка"
      Конечно же это здорово! Потому что пунктов "Обновление" и "Поддержка" попросту нет ;)
    • 0
      Вот один из примеров использования Gentoo (взят из maillist gentoo-user-ru).

      Konstantin:

      Более 2 лет назад перешёл на Gentoo по совету одного хорошего знакомого. На тот момент администрировал сеть небольшого провайдера + несколько прилагающихся к этому серверов. До этого юзал Slackware. Переход дался не легко, в смысле времени, но я не торопился и делал постепенно. Начал с менее критичных сервисов, постепенно переходя к более сложным. Что меня сильно порадовало, так это большое комьюнити и сравнительно более лёгкое администрирование большего кол-ва серверов. И если роутеры переводить на gentoo смысла большого не имело, то веб-сервера, mail и DNS стало гораздо легче поддерживать в состоянии up2date.

      Я не считаю себя гуру в администрировании Gentoo, но на данный момент без проблем поддерживаю около 50 серверов + ещё около сотни роутеров. У меня есть определённые сборки/конфигурации, которые я и поддерживаю. Проблем с надёжностью не было. Есть машины которые успешно работают без остановки более года. В основном выходит из строя хардвар.

      Конечно же я не хочу сказать, что абсолютно все пакеты с любыми флагами работают безглючно. Нет, я стараюсь отрабатывать связки пакетов на менее критичных серверах и только по прошествии какого-то времени переносить их на продакшен. Не думаю, что это как-то сильно отличается от других дистрибутивов. При использовании Gentoo, мне кажется, у меня появляется большая свобода выбора в том, как и какой пакет мне необходимо собрать, и в то же время система не превращается в помойку, как если бы мне пришлось это всё собирать из исходников самому.
  • 0
    Спасибо за статью
  • 0
    Спасибо за статью. Собираю дистрибутив для интернет киоска. Выбирал между seLinux и grsecurity пока не нашел вашу статью. Даже не думал что генту так хорошо поддерживает эти технологии. Видел 'hardened' в списке возможных use flags, но раньше не обращал внимание.
    Психологический эффект от статьи: оказывается grsec это довольно просто :)
  • Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.