Чтение онлайн

ЖАНРЫ

Linux глазами хакера

Флёнов Михаил Евгеньевич

Шрифт:

Производители дистрибутивов включают в поставку универсальное ядро, которое сможет одинаково хорошо работать на различных платформах. При этом во всех дистрибутивах, которые я видел, включена поддержка модулей. Это очень удобно, но не всегда хорошо.

Еще несколько лет назад взломщики очень часто использовали подмену системных файлов, чтобы встроить в них сплоиты (программа, позволяющая использовать уязвимость) или потайные двери (backdoor). Для борьбы с такой подделкой было разработано множество утилит, которые запрещают изменение системных файлов и следят за их контрольной суммой. В случае каких- либо трансформаций подается сигнал тревоги.

Хакеры,

недолго думая, перешли на использование модулей к ОС Linux. Их проследить сложнее, а результат от использования тот же, да и задачи они решают любые. Запретив использование модулей, мы закрываем эту дыру в безопасности, но вы должны учитывать, что могут возникнуть проблемы в работе ОС. Некоторые производители железа или системных утилит любят использовать модули. Это и понятно, ведь их установка проще и позволяет получить необходимые возможности без перекомпиляции ядра. Но мы же знаем, что безопасность и удобство — несовместимые понятия.

3.8.1. Подготовка к компиляции

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

Если на вашем сервере уже есть какие-либо данные, то следует сделать их резервную копию. Помимо этого, приготовьте загрузочную дискету, которая может пригодиться в непредвиденной ситуации (например, в случае нарушения загрузочной записи).

Для создания загрузочной дискеты необходимо выполнить следующую команду:

/sbin/mkbootdisk ver

В данном случае

ver
— это номер версии ядра, установленного в вашей системе. Если вы не знаете текущую версию вашего ядра, выполните команду:

uname -r

На моем тестовом сервере на данный момент установлено ядро 2.4.18-5asp. Чтобы создать загрузочную дискету для него, выполняем:

/sbin/mkbootdisk 2.4.18-5asp

Если неверно указать версию, то дискета не будет создана, потому что программа ищет необходимые для загрузочной дискеты файлы в директории /lib/modules/ver, где ver — это номер версии. В моем случае это директория /lib/modules/2.4.18-5asp.

3.8.2. Обновление ядра из RPM-пакета

Самый простой способ установить новое ядро — использование RPM-пакета. Установка такая же, как и любой другой программы. Для обновления ядра можно выполнить команду:

rpm -Uvh ИмяПакета

Если вы хотите установить новое ядро, то ключ

U
необходимо заменить на ключ i. ОС Linux удобна тем, что можно одновременно установить несколько ядер. Правда, загрузить можно только одно из них.

Из RPM-пакета устанавливаются только все необходимые файлы, модули и загрузчик, но чтобы можно было загрузиться с новым ядром, необходимо еще прописать ядро в загрузчик LILO.

Установка из RPM-пакета дает нам доступ к новым функциям и исправляет старые ошибки. Возможности ядра остаются теми же, что заложил разработчик. Максимальных преимуществ от обновления можно добиться только при компиляции ядра.

3.8.3. Компиляция ядра

При установке из RPM-пакета мы получаем модульное ядро, в котором

драйверы устройств могут быть как скомпилированы в одно целое с ядром, так и загружаться отдельно. Такое ядро медленнее в работе, но позволяет обновлять драйверы простой заменой модулей.

При компиляции можно выбрать и монолитное ядро. В этом случае в него будут встроены все необходимые драйверы, что повысит производительность, но это сделает невозможным обновление без перекомпиляции всего ядра.

Я рекомендую вам разобраться с компиляцией, потому что все свежие ядра выходят в исходных кодах, а издание RPM-пакетов иногда запаздывает на неделю и более. Все это время ваша система будет уязвимой.

Как правило, ядро поставляется в виде tar-архива. Сначала его надо разархивировать:

tar xzvf linux-2.6.10-rc2.tar.gz

Имя архива в вашем случае может отличаться. Я беру самое новое на момент написания книги ядро, которое специально скачивал с сайта www.redhat.com.

Архив распаковывается в директорию linux-2.6.10-rc2 (имя архива без расширения tar.gz). Необходимо перейти в этот каталог, чтобы выполнять дальнейшие действия по компиляции из этой директории.

Для начала нужно сконфигурировать ядро, т.е. указать, что мы хотим получить в результате. Для этого можно использовать одну из четырех утилит:

1. 

oldconfig
— сценарий, который устанавливает значения по умолчанию без нашего ведома. Для вызова используйте команду
make oldconfig
.

2. 

config
— сценарий, который в командном интерпретаторе задает вам вопросы о параметрах будущего ядра и в зависимости от ваших ответов формируется конфигурационный файл для компиляции. Для вызова используйте команду
make config
.

3. 

menuconfig
— текстовая утилита (рис. 3.6). Наиболее удобный вариант конфигурирования из консоли. Для вызова используйте команду
make menuconfig
.

Рис. 3.6. Текстовая утилита конфигурирования ядра menuconfig

4. 

qconf
(
xconfig
) — графическая утилита (рис. 3.7). Наиболее удобный вариант конфигурирования ядра из графической оболочки Linux. Для вызова используйте команду
make xconfig
.

Рис. 3.7. Графическая утилита конфигурирования ядра qconf

Во время конфигурации с помощью любой из вышеперечисленных утилит вы должны указать, нужна ли поддержка загружаемых модулей.

Если вы хотите иметь два разных ядра одной и той же версии, например, с поддержкой модулей и без нее, то необходимо открыть файл Makefile и в параметре

EXTRAVERSION
указать различные значения:

□ 

EXTRAVERSION=-rc2-module
— при компиляции ядра с модулями;

□ 

EXTRAVERSION=-rc2-nomodule
— при компиляции ядра без модулей.

Лучше всего указывать в этом параметре, чем именно будет отличаться ядро. Например, помимо

– rc2-module
можно вставить дополнительное пояснение, но оно должно быть максимально коротким.

Поделиться с друзьями: