Установка пароля на загрузчик LILO или GRUB

archive view archive save

bootloader-a Если пароль на загрузчик LILO или GRUB не установлен, то любой имеющий физический доступ к машине без особого труда сможет сменить пароль любого пользователя в том числе и пароль пользователя root, войдя в однопользовательский режим дописав к строке загрузки Single или init=/bin/sh в случае с Debian/Ubuntu.

Разумеется, что пароль на загрузчик LILO или GRUB не является панацеей от доступа к содержимому диска, но тем не менее является дополнительной предохранительной мерой от разного рода дебилов.

Установка пароля на загрузчик LILO

Пароль на загрузчик LILO устанавливается в открытом (не зашифрованном) виде и хранится в файле /etc/lilo.conf:

image=/boot/2.2.14-vmlinuz
    label=Linux
    read-only
    password=hackme
    restricted
    ...

В этом примере установлен пароль hackme и разрешена обычная загрузка ОС, но если будет попытка изменить запись загрузки, то будет запрошен пароль, а если нужен запрос пароля и на загрузку, то убираем строку restricted.

Когда нужно установить пароль на всё меню LILO, то строку password=hackme пишем следующим образом:

default="Linux"
boot=/dev/hda
map=/boot/map
keytable=/boot/us.klt
menu-scheme=wb:bw:wb:bw
prompt
nowarn
password=hackme
timeout=100
message=/boot/message
image=/boot/2.2.14-vmlinuz
    label=Linux
    read-only
    ...

ВНИМАНИЕ! После изменения /etc/lilo.conf нужно выполнить /sbin/lilo. Обычно lilo.conf доступен всем для чтения, поэтому лучше сменить права чтобы доступ был только для пользователя root: chmod 600 /etc/lilo.conf

Установка пароля на загрузочные записи GRUB

Имя пользователя и пароль должны быть определены в одном из файлов сценариев размещённых в /etc/grub.d/, например в /etc/grub.d/00_header. Прямая правка конфигурационного файла /boot/grub/grub.cfg приведёт к потере установленного логина и пароля при следующем запуске команды update-grub. Вот описание некоторых скриптов GRUB:

  • 00_header - отвечает за подгрузку базовых GRUB библиотек и параметров;
  • 05_debian_theme - отвечает за внешний вид;
  • 10_linux - отвечает за формирование записей в меню ОС-linux, в которой установлен GRUB;
  • 20_linux_xen - аналогично предыдущему, только вероятно для XEN;
  • 30_os-prober - отвечает за обнаружение и включение в список остальных ОС;
  • 40_custom и 41_custom - пользовательские скрипты.

Перед началом правки GRUB2 скриптов правильным решением будет создание их резервной копии:

$ mkdir /etc/grub.d.backup
$ cp /etc/grub.d/* /etc/grub.d.backup

В примере ниже мы создаём зашифрованный пароль командой grub-mkpasswd-pbkdf2 (хеш пароля приведён в сокращённом виде), определяем его в /etc/grub.d/40_custom, который специально предназначен для пользовательских правок, а в файле /etc/grub.d/10_linux добавляем флаг идентификации, потом update-grub обновляем конфигурацию GRUB:

$ grub-install -V
grub-install (GRUB) 1.99-27+deb7u2
 
---
 
$ grub-mkpasswd-pbkdf2
Введите пароль:
Повторно введите пароль:
Хэш PBKDF2 вашего пароля: grub.pbkdf2.sha512.10000.3492844BF978E1B5F33C026A0B7........37F380960317
 
---
 
$ vi /etc/grub.d/40_custom
 
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries.  Simply type the
# menu entries you want to add after this comment.  Be careful not to change
# the 'exec tail' line above.
 
set superusers="root"
 
password_pbkdf2 root grub.pbkdf2.sha512.10000.3492844BF978E1B5F33C026A0B7........37F380960317
 
export superusers
 
---
 
vi /etc/grub.d/10_linux
 
---
 
find the following line:
 
    printf "menuentry '${title}' ${CLASS} {\n" "${os}" "${version}"
 
Add --users '' :
 
    printf "menuentry '${title}' ${CLASS} --users '' {\n" "${os}" "${version}"
 
---
 
    printf "menuentry '${title}' ${CLASS}" = "menuentry '${title}' ${CLASS}"
 
add "--users ''" :
 
    printf "menuentry '${title}' ${CLASS}" = "menuentry '${title}' ${CLASS} --users ''"
 
---
 
save file and run:
 
update-grub

Добавив параметр --users с пустым '' значением мы активируем защиту записей паролем и разрешаем доступ только для суперпользователя (superusers). Если добавить --users user1, тогда пользователю user1 будет разрешено только загружать ОС, а суперпользователю (superusers) будет дан полный доступ. Если нужно разрешить несколько пользователей, тогда добавляем их через запятую --users user1,user2

Переменная superusers должна быть определена обязательно! Пользователи перечисленные в этой переменной будут иметь права пользователя root с правом на загрузку любой операционной системы а также правом выхода в консоль и редактирования строки загрузки.

ВНИМАНИЕ! Если в имени переменной superusers будет допущена опечатка (к примеру superuser) или она не будет определена, то защита загрузочных записей не будет работать несмотря на наличие других логинов/паролей! Необходимость экспорта переменной export superusers связана с багом

  • Bug #718670 “authorisation not applied to submenus” : Bugs : grub2 package : Ubuntu
    https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/718670

В принципе если нужно разрешить доступ к записям (загрузку) только одному доверенному пользователю, то можно обойтись (для GRUB 2.02~beta2-22 работает) только редактированием файла /etc/grub.d/40_custom.

Приведённый выше пример правки файла /etc/grub.d/10_linux приведён из ОС Debian 7 (Wheezy), а в Debian 8 (Jessie) есть некие отличия:

      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
  else
      echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
--------------------------------------------
      echo "menuentry '$(echo "$title" | grub_quote)' ${CLASS} --users user1 \$menuentry_id_option 'gnulinux-$version-$type-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
  else
      echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} --users user1 \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"

Принцип тот же, флаг --users user1 устанавливаем после переменной ${CLASS} перед открывающей { фигурной скобки. Для автоматической подстановки --users user1 во все загрузочные записи menuentry можно использовать программу sed следующим образом:

# Protecting All Entries
$ sed -i -e '/^menuentry /s/ {/ --users user1 {/' filename(s)
sudo sed -i -e '/^menuentry /s/ {/ --users superman {/' /etc/grub.d/10_linux  /etc/grub.d/20_memtest86+ /etc/grub.d/30_os-prober /etc/grub.d/40_custom
 
# To undo the previous command, run:
# sudo sed -i -e '/^menuentry /s/ --users user1 {/ {/' filename(s)
$ sed -i -e '/^menuentry /s/ --users superman[/B] {/ {/' /etc/grub.d/10_linux  /etc/grub.d/20_memtest86+ /etc/grub.d/30_os-prober /etc/grub.d/40_custom

Установка пароля на загрузочные записи GRUB других ОС

Если в системе существуют другие операционные системы, то в итоговом файле конфигурации /boot/grub/grub.cfg они будут определены в секции:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Microsoft Windows XP Professional RU (на /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-EC101F75601EF3D7' {
        insmod part_msdos
        insmod ntfs
        set root='hd0,msdos1'
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1  EC101F75601EF3D7
        else
          search --no-floppy --fs-uuid --set=root EC101F75601EF3D7
        fi
        parttool ${root} hidden-
        drivemap -s (hd0) ${root}
        chainloader +1
}
### END /etc/grub.d/30_os-prober ###

В противном случае эта секция будет пустой:

### BEGIN /etc/grub.d/30_os-prober ###
### END /etc/grub.d/30_os-prober ###

Если же у нас есть иные операционные системы, например "Microsoft Windows XP Professional RU (на /dev/sda1)", то флаг --users user1 мы должны добавить в записи menuentry в файле /etc/grub.d/30_os-prober перед началом фигурных скобок, например: menuentry ... --users user1 {...}

      cat << EOF
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class windows --class os \$menuentry_id_option 'osprober-chain-$(grub_get_device_id "${DEVICE}")' --users user1 {
EOF
 
-----------------------------------------
 
      cat << EOF
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class windows --class os \$menuentry_id_option 'osprober-efi-$(grub_get_device_id "${DEVICE}")' --users user1 {
EOF

Проверка конфигурации GRUB

При запуске команды update-grub по-сути запускается команда grub-mkconfig с параметром вывода в файл /boot/grub/grub.cfg:

$ grub-mkconfig -o /boot/grub/grub.cfg

Поэтому перед запуском update-grub можно использовать grub-mkconfig для создания, например в домашней директории, предварительного варианта файла grub.cfg без изменения реальной конфигурации, которую после проверить командой grub-script-check:

$ grub-script-check /root/grub.cfg

Кстати, вместо хешированного пароля (password_pbkdf2 your_login your_password) можно использовать обычный пароль (password your_login your_password), что крайне не рекомендуется ибо в файле /etc/grub.d/40_custom хранится он будет в открытом виде.

Дополнительные настройки GRUB

Дополнительную конфигурацию GRUB можно найти в файле конфигурации /etc/default/grub, которую мы разумеется подробно здесь рассматривать не будем, а упомянем лишь о переменной GRUB_BACKGROUND в которой можно указать своё собственное фоновое изображение (ака обои) для меню GRUB.

Используемое по-умолчанию фоновое изображение для меню GRUB расположено по адресу /usr/share/images/desktop-base/lines-grub.png, - это изображение используется если иное не указано явно в переменной GRUB_BACKGROUND.

Смена фонового изображения GRUB, - это как ещё один способ запудрить моск разного рода взломщикам, можно сменить например на логотип какого-нибудь trollface. Фоновое изображение GRUB должно быть в формате .png, .tga, .jpg, .jpeg

Для смены фонового изображения не обязательно добавлять переменную GRUB_BACKGROUND, для этого достаточно скопировать изображение в директорию /boot/grub и при следующем обновлении конфигурации командой update-grub оно будет обнаружено автоматически:

$ update-grub
Generating grub configuration file ...
Found background image: trollface-1027x768.jpg
Найден образ linux: /boot/vmlinuz-3.16.0-4-686-pae
Найден образ initrd: /boot/initrd.img-3.16.0-4-686-pae
Найден Microsoft Windows XP Professional RU на /dev/sda1
завершено

Ещё одной полезной переменной конфигурации, которая помогает маскироваться, является GRUB_DISTRIBUTOR, в которой можно сменить имя дистрибутива Linux.

$ vi /etc/default/grub
 
#GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_DISTRIBUTOR='Zalupinux'

После этих нехитрых манипуляций наш Debian будет числится как "Zalupinux GNU/Linux" на фоне trollface-1027x768.jpg ;)

trollface-1027x768

Унылый серо-белый цвет оформления менюшки можно сменить на свой собственный, но к сожалению этого нельзя сделать в файле настройки /etc/default/grub. Для смены цветовой гаммы оформления нужно установить значение переменных в нашем настроечном скрипте /etc/grub.d/40_custom, - значения нужно указывать в формате "color-foreground/color-background":

$ vi /etc/grub.d/40_custom
 
...
 
set color_normal=yellow/black
set menu_color_highlight=yellow/black
set menu_color_normal=red/black

Более подробную информацию о переменных конфигурации GRUB можно найти здесь:

  • 5.1 Simple configuration handling
    http://www.gnu.org/software/grub/manual/grub.html#Simple-configuration

Дополнительно ещё можно установить пароль на BIOS и по-периметру заминировать системный блок :)


Об авторе
АдМинь БагоИскатель
АдМинь БагоИскатель ярый борец за безглючную работу любых механизмов и организмов во всей вселенной и потому пребывает в вечном поиске всяческих багов, а тот кто ищет как известно всегда находит. Когда что-то или кого-то вылечить не в состоянии, то со словами "Я в аду, а вы все черти" уходит в запой выйдя из которого снова берётся лечить неизлечимое.
Ещё статьи автора

Добавить комментарий

АХТУНГ! Все комменты гостей модерасятся модерастом.
  1. Мессаги исключительно рекламного содержания, либо содержащие только одни оценочные суждения типа "круто" ("отлично", "спасибо", "автор дебил" и т.п.) не публикуются;
  2. Злостным спамерам, пранкерам и прочей сетевой нечисти рекомендуем напрасно не тратить своего времени и удовлетворять свои больные фантазии на специализированных Интернет ресурсах!;
  3. Разумная обоснованная критика, замечания, дополнения приветствуются. Поля помеченные символом * обязательны к заполнению.


Защитный код
Обновить

Нет комментариев

Вы можете стать первым, кто добавит комментарий к этой записи.

Комментарии в блоге
Новое на форуме