Защищая GRUB

GRUB - очень мощный загрузчик с множеством удобных для админа возможностей. Одна из них - интерактивная командная строка загрузки. Юзверь может прямо в программе отредактировать параметры и запустить операционную систему в нужном ему режиме или загрузиться с другого носителя. Это здорово! Но если командной строкой воспользуется злоумышленник, то он может получить полный доступ к операционной системе. Вас это волнует? Значит пришло время позаботиться о безопасности.

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

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

Итак у нас есть тот самый GRUB. Свои настройки он хранит в файлике /boot/grub/grub.cfg. Но важно сдержать свое желание начать перекраивать этот файлик руками. Такое допустимо, но ТОЛЬКО в целях тестирования. Дело в том, что конфиг формируется автоматически при помощи скриптов, которые лежат в папочке /etc/gpub.d и программки update-grub, которая поочередно выполняет эти скрипты в алфавитном порядке. Таким образом, если вручную поменять конфиг загрузчика, изменения могут бесследно исчезнуть, например после обновления ядра. Итого, правильный путь grubокопателя - добавление своих скриптов в /etc/gpub.d или (что желательно свести к минимуму) редактирование существующих с последующим обновлением grub.cfg посредством update-grub. Одним из удобств GRUB, в отличии от потихоньку умирающего LILO, является то, что после изменения конфига не нужно переустанавливать загрузчик.

Теперь приступим к настройке. Чтобы запаролить доступ к редактированию командной строки достаточно задать суперпользователя:

set superusers="admin"
password_pbkdf2 admin grub.pbkdf2.sha512.10000....(тут собственно пароль), пароль дает команда grub-mkpasswd-pbkdf2.

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

Тут следует отметить различие между GRUB версии 2.0 и 1.9 (а скорее всего и более ранних). В 2.0 по-умолчанию после установки пароля доступ ко всем пунктам меню будет запаролен. А в 1.9 доступ будет открыт. Т.е. в 2.0 политика "все, что не разрешено - запрещено", а в 1.9 - наоборот "все что не запрещено - разрешено".

Для разграничения доступа к элементам меню существуют две директивы "--users" и "--unrestricted". После директивы "--users" необходимо указать список пользователей, которые будут иметь доступ к данному элементу меню (пункту меню: "menuentry" или подменю: "submenu" и, всем его подпунктам), или пустой список, чтобы только суперпользователи имели доступ. Директива "--unrestricted" указывает, что данный элемент меню будет доступен без авторизации.