Пароль на Grub2

Постановка задачи

Сначала мне показалось, что не стоит заострять внимание на том, зачем мне понадобилось реализовать описанную в этой статье функциональность, которую Grub2 и сообщество GNU/Linux с лёгкостью мне предоставили. Так сложилось, что меня всю жизнь очень раздражала информация, которую я получал, но не понимал зачем. А когда понимал, то уже даже не помнил, что она мне попадалась. Чтобы проще всё это увязалось в памяти и при необходимости читатель вспомнил что ищет, представьте, что MS вызывает у Вас неприятные позывы. Однако, вы делите на двоих ноутбук с человеком, который испытывает тоже по отношению к GNU/Linux. Но линуксоиды более гуманные люди, поэтому сами позаботятся, чтобы другим было удобно. Итак, необходимо загружать две операционные системы, одна из которых Windows, с одного жёсткого диска, причём, меню Grub не должно выводиться. Поясню, одна из систем просто должна загружаться по умолчанию. Однако, загрузка любой из систем должна сопровождаться запросом пользователя и пароля, но различных для каждой системы. Результат должен быть таким, грузимся, вводим пользователя и пароль, пользуемся системой №1. Желаем систему №2, грузимся, вызываем Grub, выбираем систему №2, вводим другие пользователя и пароль для системы №2. Изменение настроек Grub2 тоже запрещаем. Можно для системы Windows не устанавливать пароль, тогда виндоюзер, совсем не будет напрягаться и как либо ощущать присутствие второй системы.

Генерируем хеши наших паролей

Хеши нам понадобятся, для создания файла с паролями для Grub2. Используем grub-mkpasswd-pbkdf2, получаем:

sergey@laptop:~$ grub-mkpasswd-pbkdf2
Enter password:
Reenter password:
Your PBKDF2 is
grub.pbkdf2.sha512.10000.D65B264809DA99A0331A325E34C360E4620A9E62F4A40E6BE3899397814B1D050537DF1F9AF1E
1A6D2CCCE331E0F7600406AE635B0D613F02D4B96D08F99F836.AFFBCF65C9D5DE8D40A7817BBC1CD28CB3AB98E4C4D5320E20
E91E70631512D5D892B51EC3B4C64A89308E937811AA00DC8AF2FC6A7644BACFB3F7B89C5F9170

sergey@laptop:~$

Для пароля password получился хэш, выделенный жирным красным. Вот его то и копируем в буффер и идём дальше.

Заводим файл паролей

Собственно, тут мы и описываем наших пользователей.

sudo nano /etc/grub.d/05_password

А файл делаем таким:

echo «Setting password protection…» >&2
cat << EOF

set superusers="user1"
password_pbkdf2 user1 grub.pbkdf2.sha512.продолжение Вашего хэша
password_pbkdf2 user2 grub.pbkdf2.sha512.продолжение Вашего хэша
EOF

Теперь изменять настройки Grub2 по нажатию «E» во время отображения меню, сможет только user1, так как мы его сделали суперюзером.

Небольшая, но важная презервация:

sudo chmod u+x,go-rw /etc/grub.d/05_password

Защищаем отдельные пункты меню

Существует два файла.

Редактируем 10_linux для Linux систем и 30_os-prober для всех остальных, вроде Windows.

sudo nano /etc/grub.d/10_linux

printf «menuentry ‘${title}’ ${CLASS} —users user1 {\n» «${os}» «${version}»

sudo nano /etc/grub.d/30_os-prober

menuentry «${LONGNAME} (${2}-bit) (on ${DEVICE})» —class osx —class darwin —class os —users user2 {

Для упрощения, можно искать строки по «menuentry», вставлять —users username перед «{«.

Установка загрузки определённой системы по умолчанию

sudo nano /etc/default/grub

GRUB_DEFAULT=0

Меняем значение для опции на нужный пункт из меню.

Прячем меню загрузки Grub2

Есть в файле /etc/default/grub опция #GRUB_HIDDEN_TIMEOUT=0. Её нужно раскоментировать (убрать # перед ней). Всё бы было хорошо, но есть нюанс. В случае, если в меню присутствует windows опция игнорируется. Для того, чтобы она заработала можно сделать так:

sudo nano /etc/grub.d/30_os-prober

И комментирум вот эту проверочку:

# if [ "x${found_other_os}" = "x" ] ; then
if [ "x${1}" != "x" ] ; then
if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
verbose=
else
verbose=" --verbose"
fi

if [ "x${1}" = "x0" ] ; then
cat <
if [ "x\${timeout}" != "x-1" ]; then
if keystatus; then
if keystatus --shift; then
set timeout=-1
else
set timeout=0
fi
else
if sleep$verbose --interruptible 3 ; then
set timeout=0
fi
fi
fi
EOF
else
cat << EOF
if [ "x\${timeout}" != "x-1" ]; then
if sleep$verbose --interruptible ${GRUB_HIDDEN_TIMEOUT} ; then
set timeout=0
fi
fi
EOF
fi
fi
# fi


Теперь обновляем конфигурацию Grub2

sudo update-grub

И всё, злой и грубый Grub2 создаст ряд препятствий тем, кто любит брать чужие вещи.

Несколько полезных ссылок, которыми я пользовался привожу здесь же:
Ставим пароль на загрузку Windows XP в GRUB2
Викиучебник
Выбор ОС по умолчанию в Grub2

2 Comments

  1. otto:

    set superusers=«user1″

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

    так же все это не будет работать если UEFI

    • admin:

      Спасибо за замечание, исправил set superusers="user1". Подвело по умолчанию преобразование кавычек из технических в литературные. По поводу UEFI — проблема из-за того, что os-prober не заработал с UEFI?

Leave a Reply

*