Достаточно часто бывает необходимо на более низком уровне защитить устройство от различных модификаций и изменений. Будь-то загрузка образов восстановления, которые от лица root могут работать с файловой системой хоста или же редактирование опций ядра, при загрузке!
В данном материале мы рассмотрим одно из решений данной проблемы, такое как установка пароля на Grub!
Что такое Grub?
Grub – это программа, которая получает управление первой после загрузки BIOS/UEFI и позволяет определить образ и параметры, которые необходимо запустить далее. К примеру, такое решение полезно, когда на устройстве две и более операционных систем или образов, которые могут позволить провести работы над ОС по восстановлению.
Загрузка bootloader зависит от того, какой диск с таблицей разделов используется для его хранения. К примеру, с таблицы разделов MBR порядок загрузки следующий:
BIOS → Выбирает первые 512 байт загрузочной области и передает управление (Stage 1) → До загружается конфигурационные файлы bootloader’a (Stage 2) → Загрузка ядра
С GPT разделов (относится чаще к UEFI) загрузка происходит иначе:
UEFI → Поиск по EFI-разделу (обычно /boot/efi) → Непосредственная загрузка bootloader.efi → Загрузка ядра
Нарушитель может эксплуатировать особенности и возможности работы данного решения для получения доступа в обход мер защиты! Как реализацию меры противодействия рассмотрим установку пароля на grub, который закроет часть уязвимостей на своем уровне.
Как установить пароль на Grub?
Аутентификационные данные для Grub хранятся в файле директории /etc/grub.d/ и представляют собой совокупность логина и хешированного пароля. Значит для внесения нового необходимо создать в файле запись. Предварительно, подготовим пароль с утилитой grub-mkpasswd-pbkdf2:
Перейдем в файл /etc/grub.d/ и удалим лишние строки, которые остались в следствии перенаправления вывода, а так же добавим пару строк о пользователе. В итоге получим строку следующего вида в конце конфигурационного файла:
password_pbkdf2 username grub.pbkdf2.sha512.<длинный_хэш>
Поясним каждый из пунктов в данном контексте:
- set superusers — устанавливает имя пользователя, который будет считаться суперпользователем в контексте GRUB;
- username — это имя пользователя, для которого вы задаёте пароль;
- password_pbkdf2 — указывает, что для проверки пароля нужно использовать PBKDF2-хэш;
- username — имя пользователя, для которого задан пароль;
- grub.pbkdf2.sha512.<длинный_хэш> — это хэш пароля, сгенерированный с помощью grub-mkpasswd-pbkdf2. GRUB сравнит введённый пользователем пароль с этим хэшем.
После чего выйдем и сохраним файл, а так же скомпилируем из него конфиг для загрузчика:
Перезапустим устройство и дождемся загрузчика, после чего выберем один из образов:
Отлично, парольная защита работает и не даст загрузится в ОС, не зная пароля от загрузчика. При нехватке собственных мощностей можно воспользоваться облачными серверами от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать: