Как настроить защиту паролем grub2
Информация о тестовой платформе:
Operation system: Debian GNU/Linux 9.6
Grub version: 2.02~beta3-5+deb9u1
1、Сгенерируйте хешированный пароль для GRUB
В этом примере в качестве пароля используется следующий пароль: "MangGuO93,*jqvt", такая комбинация является требованием для обеспечения надежности пароля.
# grub-mkpasswd-pbkdf2
Enter password:
Reenter password:
PBKDF2 hash of your password is grub.pbkdf2.sha512.10000.F5CFD948DC06B644E05531FBF9773C086B228A87033642B32D41DBE141B10D2FD0604C8ABCDD2D2D76C834297969EADC64687EB32662CB59BCA0898AD69D7FE6.C698997624F217CDCE83446E80632FF9F7AFB1A0A6AE0B5752A81392F1BAA9A44C37AF5B29D7CEE13B9DE7D1207D5FB4A173A49D1518B1492BB6D9FE45444656
Он сгенерирует длинный пароль, зашифрованный следующим образом: grub.pbkdf2.sha512.10000........ Скопируйте полностью сгенерированный код.
2、Настройка защиты паролем
1) Изменить /etc/grub.d/10_linux
В /etc/grub.d/10_linux найдите следующую строку:
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type- $boot_device_id' {" | sed "s/^/$submenu_indentation/"
Добавьте --users '':
echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} --users '' \$menuentry_id_option 'gnulinux-$version- $type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
2) Изменить /etc/grub.d/30_os-prober
Чтобы изменить /etc/grub.d/30_os-prober, чтобы добавить защиту паролем ко всем записям:
# sed 's/--class os /--class os --users /' -i /etc/grub.d/30_os-prober
3) Добавьте защиту паролем в /etc/grub.d/40_custom.
set superusers="username"
password_pbkdf2 username password
Очевидно, вы должны заменить слова «имя пользователя» желаемым именем пользователя и словом «пароль» для зашифрованного пароля, сгенерированного на предыдущем шаге. Формат записи зашифрованного пароля в файле /etc/grub.d/40_custom будет выглядеть примерно так (в примере сокращено):
set superusers="John"
password_pbkdf2 John grub.pbkdf2.sha512.10000.F5CFD948DC06B644E05531FBF9773C086B228A87033642B32D41DBE141B10D2FD0604C8ABCDD2D2D76C834297969EADC64687EB32662CB59BCA0898AD69D7FE6.C698997624F217CDCE83446E80632FF9F7AFB1A0A6AE0B5752A81392F1BAA9A44C37AF5B29D7CEE13B9DE7D1207D5FB4A173A49D1518B1492BB6D9FE45444656
Сохраните файл и выйдите.
3. Создайте файл конфигурации grub2.
# update-grub2
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.9.0-8-amd64
Found initrd image: /boot/initrd.img-4.9.0-8-amd64
done
Вот и все, ваш grub2 защищен.
4. Установите запись операционной системы, чтобы она загружалась нормально.
Если настраивать с 1 по 3 шаг, нормальный вход в систему тоже будет проверяться суперпользователем при его выполнении, что не удобно при обычном запуске. Таким образом, необходимо установить запись операционной системы, которая загрузится нормально, но никто, кроме суперпользователей, не сможет редактировать соответствующую запись в списке. Просто установите первый и третий элементы на втором шаге, а остальные операции не изменятся.
Найдите следующую строку в /etc/grub.d/10_linux:
echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
Добавьте --unrestricted:
echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} --unrestricted \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
Дополнение:
Для загрузки Windows без пароля нужно в файле /etc/grub.d/30_os-prober добавить --unrestricted в две строки:
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' $CLASS --class os \$menuentry_id_option 'osprober-chain-$(grub_get_device_id "${DEVICE}"
)' {
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' $CLASS --class os \$menuentry_id_option 'osprober-efi-$(grub_get_device_id "${DEVICE}")'
{
Должно получиться следующее:
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --unrestricted $CLASS --class os \$menuentry_id_option 'osprober-chain-$(grub_get_device_id "${DEVICE}"
)' {
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --unrestricted $CLASS --class os \$menuentry_id_option 'osprober-efi-$(grub_get_device_id "${DEVICE}")'
{
5、Устранение неполадок
Если добавить защиту паролем в /etc/grub.d/00_header, возможно, вы получите сообщение об ошибке при выполнении exec update-grub2, например следующее:
# update-grub2
/etc/grub.d/00_header :274 /etc/grub.d/00_header password_pbkdf2 not found
Помните, что правильный файл для редактирования — 40_custom просто потому, что другие файлы, такие как grub.cfg или даже 00_header, автоматически обновляются системой при определенных обстоятельствах, и это приведет к потере этих изменений.
6, Ссылки
https://www.gnu.org/software/grub/manual/grub/html_node/Authentication-and-authorization.html#Authentication-and-authorisation
https://help.ubuntu.com/community/Grub2/Passwords
- Войдите, чтобы оставлять комментарии
- 13 просмотров