Заметки и различная информация

Правильный способ установки пароля на GRUB 2

Дошли руки до установки пароля на GRUB. Посмотрев в интернетах, не нашёл нормального готового решения. Меня не устроило следующее:

  • Необходимость править пароль в скрипте.
  • Доступность хэша пароля каждому пользователю.
Сделал свой велосипед. Использую на Debian и, вероятно, подойдёт для Ubuntu. В /etc/grub.d копируется следующий скрипт (я его назвал 05_grub_password):
                     !/bin/sh
                     # grub-mkconfig helper script.
                     # Copyleft(CL)2012 by Artiom N.
                     # Setting password in grub loader.

                     set -e

                     PASSWORD_FILE=/etc/default/grub_password
                     ARIGHTS="600"

                     # Include the GRUB helper library for grub-mkconfig.
                     . /usr/lib/grub/grub-mkconfig_lib

                     # I want to work in /boot/grub/ only.
                     test -d "${GRUB_PREFIX}"; cd "${GRUB_PREFIX}"

                     [ ! -r "$PASSWORD_FILE" ] && { echo "$0: Error! Can't find password file ($PASSWORD_FILE)!" >&2; return 1; }

                     if [ $(stat -c%a "$PASSWORD_FILE") -ne "$ARIGHTS" ]; then
                        echo "$0: Warning! Access rigths to $PASSWORD_FILE not equal to $ARIGHTS! Will be changed to $ARIGHTS." >&2
                        chmod $ARIGHTS "$PASSWORD_FILE" || return 2;
                     fi

                     . "$PASSWORD_FILE"
                     USER_NAME=${USER_NAME:-root}

                     [ -z "$PBKDF2_HASH" ] && { echo "$0: Error! Password hash is empty." >&2; return 3; }

                     echo "$PBKDF2_HASH"|egrep -q "^grub\.pbkdf2\.[^.]*\.[0-9]*\.[0-9A-F]*\.[0-9A-F]*$" || echo "$0: Warning! Pasword hash not in PBKDF2 format!" >&2

                     cat << EOF
                     set superusers="$USER_NAME"
                     password_pbkdf2 root $PBKDF2_HASH
                     EOF
                     
05_ в названии нужен, чтобы он запускался перед скриптами, которые добавляют пункты меню.
В /etc/default/grub_password:
                     Grub2 password file.
                     PBKDF2_HASH="grub.pbkdf2.sha512.10000.[ХЭШ ПАРОЛЯ]
                     USER_NAME=root
                     
Пароль создаётся утилитой grub-mkpasswd-pbkdf2. Хэш, который она выдаёт (начинается с grub.pbkdf2), присваивается переменной PBKDF2_HASH в файле /etc/default/grub_password.
Сбт Июл 21 10:16:39 MSK 2012