Red Hat 6.x / CentOS 6.x
Bootloader GRUB umożliwia nam zabezpieczenie możliwości zmiany opcji bootowania naszego systemu, czy też niepowołanego jego uruchomienia poprzez hasło.Możliwość taka wydaje się być przydatna bardziej w przypadku stacji desktopowych czy laptopów i w połączeniu z blokadą biosu oraz zaszyfrowaniem dysków pozwala nam w znaczny sposób zabezpieczyć nasze dane przed niepowołanym dostępem.
Należy jednak pamiętać, że w przypadku uzyskania przez niepowołane osoby dostępu do konsoli zarządczej serwera, istnieje możliwość zalogowania się intruza do naszego systemu w trybie "single mode" czy "recovery mode" z uprawnieniami root, co w oczywisty sposób stanowi zagrożenie dla naszych danych. Jednak odpowiednie "hasłowanie" GRUB-a wymagać będzie od intruza dostępu fizycznego do cdrom-u serwera, co w zasadzie wyklucza ataki tego typu.
Hashowanie hasła dla bootloadera
Hasło bootloadera może być podane jako tekst jawny, ale z oczywistych względów zalecane jest hashowanie takiego hasła. Grub obsługuje trzy typy kodowania, tj.: domyślnego sha-512, sha256 oraz md5. Wyboru typu dokonujemy poprzez dodanie odpowiedniego przełącznika podczas hashowania.Kodowania hasła dokonamy dedykowanym do tego grub-crypt-em:
[root@centos67 ~]# grub-crypt --md5
Password: [haslo]
Retype password: [haslo]
$1$BxRE6m01$O6rMUIRLFywLjJSD67itc1
Password: [haslo]
Retype password: [haslo]
$1$BxRE6m01$O6rMUIRLFywLjJSD67itc1
Wynikiem komendy będzie hash naszego hasła, który następnie umieścimy w odpowiedniej sekcji naszej konfiguracji.
Zabezpieczenie zmian parametrów startowych systemu
Jedną z dwóch możliwości zabezpieczeń jakie daje nam grub, jest zabezpieczenie przed zmianą parametrów startowych naszego systemu. Daje nam to pewność, że system nie zostanie zbootowany w trybie pozwalającym na przejęcie nad nim pełnej kontroli.Zabezpieczenie to wdrożymy dodając odpowiedni wpis w pliku /boot/grub/grub.conf:
[root@centos67 ~]# vi /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_centos-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --encrypted $1$BxRE6m01$O6rMUIRLFywLjJSD67itc1
title CentOS Linux 6 (2.6.32-573.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /initramfs-2.6.32-573.el6.x86_64.img
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_centos-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
password --encrypted $1$BxRE6m01$O6rMUIRLFywLjJSD67itc1
title CentOS Linux 6 (2.6.32-573.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /initramfs-2.6.32-573.el6.x86_64.img
Ważne, aby wpis znajdował się przed pierwszą definicją pozycji menu gruba, czyli przed pierwszym title.
Po zrestartowaniu systemu, i próbie zmiany parametrów startowych nie uzyskamy dostępu do standardowych opcji bootloadera (edit czy append), a jedynie możliwość przejścia do prompta hasła poprzez opcję "p":
Zabezpieczenie przed nieautoryzowanym bootowaniem systemu
Kolejną możliwością zabezpieczeń oferowaną przez GRUB jest wymuszenie podania hasła podczas standardowego startu systemu.Opcja ta może okazać się przydatna np. w sytuacji, kiedy skonfigurowaliśmy nasz bootloader, aby umożliwiał wybór kilku wersji systemu.
Konfiguracji dokonujemy tak, jak w poprzednim przypadku, w pliku /boot/grub/grub.conf, lecz hash hasła umieszczamy w sekcji bootowania systemu, który chcemy zabezpieczyć:
[root@centos67 ~]# vi /boot/grub/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_centos-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS Linux 6 (2.6.32-573.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /initramfs-2.6.32-573.el6.x86_64.img
password --encrypted $1$BxRE6m01$O6rMUIRLFywLjJSD67itc1
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/mapper/vg_centos-lv_root
# initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS Linux 6 (2.6.32-573.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /initramfs-2.6.32-573.el6.x86_64.img
password --encrypted $1$BxRE6m01$O6rMUIRLFywLjJSD67itc1
Każda pozycja pojawiająca się w menu GRUB-a rozpoczyna się w pliku grub.conf linią title. Chcąc zabezpieczyć daną pozycję hasłem bootowania, wystarczy umieścić w porządanej sekcji linijkę dotyczącą hasła (password...).
Inne typy kodowania hasła
Tak jak wspomniałem, GRUB obsługuje 3 typy hashowania hasła, oraz hasło w formie jawnej. Zmiana na któryś z typów sha wymaga od nas jedynie podania odpowiednio opcji --sha256 lub --sha-512 przy tworzeniu hasha grub-crypt-em. (brak jakiegokolwiek przełącznika przy wywołaniu polecenia skutkuje użyciem domyślnego sha-512).Użycie hasła w formie jawnej nie będzie od nas wymagać używania grub-crypta, jak i przełącznika --encrypted w pliku grub.conf.
...
title CentOS Linux 6 (2.6.32-573.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /initramfs-2.6.32-573.el6.x86_64.img
password moje$trasznieTajn3Hasl0
title CentOS Linux 6 (2.6.32-573.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-573.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg_centos/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM
initrd /initramfs-2.6.32-573.el6.x86_64.img
password moje$trasznieTajn3Hasl0
Jestem pod wrażeniem. Bardzo fajny wpis.
OdpowiedzUsuń