GRUB2 alglaaduri kasutamine operatsioonisüsteemiga Debian Squeeze

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

Sissejuhatus

Tavaliselt paigaldatakse süsteemi installeerimisel vaikimisi alglaadur (ingl. k. bootloader) väga sobivalt ja kasutajal ei ole vaja kunagi tunda muret, arvuti lihtsalt alati käivitub korrektselt.

Käesolev tekst käsitleb alglaaduri kasutamist juhtumitel kui midagi mis on alati töötanud ühteäkki enam ei tööta, nt arvuti ei käivitu uue tuumaga ja alternatiiviks on kasutada mingit varasemalt teadaolevalt töötanud tuuma. Teine levinud juhtum alglaaduriga töötamisel on süsteemi varundamisest taaste, taasteprotseduuri käigus tuleb paigaldada alglaadur.

Tööpõhimõte

Kohalikud IO kontrollerid, aga ka FC või iSCSI kontrollerid esitavad enda küljes olevaid kettaid BIOSile /dev/sda, /dev/sdb jne seadmetena, millelt oskab BIOS leida boot sektori (mida otsitakse järjekorras) ning laadida bootloaderi vajalikud stage'd ning tuuma ja initramfs'i. Seejärel hakkab arvutis toimuvat juhtima Linux.

Olemasoleva GRUB2 alglaaduri kasutamine

TODO

GRUB2 alglaaduri paigaldamine plokkseadmele

  • Tundub, et GRUB2 puhul peab plokkseadmel olema partitsioonitabel kusjuures esimene partitsioon peab olema natuke kaugemal seadme algusest kui fdisk vaikimisi teeb, nt nii 256 MB /boot jaoks
# parted /dev/vda  
GNU Parted 2.3
Using /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) unit s                                                           
(parted) p                                                                
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 25165824s
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start       End          Size         Type     File system  Flags
 1      2048s       526335s      524288s      primary  ext3         boot

Sellise asetuse moodustamiseks sobib öelda

(parted) unit s
(parted) mkpart primary 2048 526335
  • Plokkseadme UUID väärtuse lugemiseks sobib öelda
# blkid 
/dev/cciss/c0d0p2: UUID="9mNOVl-MDEA-xSKc-fhSO-PZmo-LBqX-ih8cwm" TYPE="LVM2_member" 
/dev/cciss/c0d0p1: UUID="fc138afe-a71e-4c5f-89ff-66ee270d9539" TYPE="ext3" 
/dev/mapper/system-root: UUID="bfeb4967-8ddc-47a4-9df3-a8b470f7b60e" TYPE="ext3" 
/dev/mapper/system-swap: UUID="a64a936a-3473-4dbf-a4d6-26c90d365726" TYPE="swap" 
/dev/mapper/system-data: UUID="9cebeec7-6b76-43b7-a1bc-ab85232c7bd0" TYPE="ext3"
  • Alglaaduri paigaldamiseks sobib öelda
# mount /dev/sda1 /mnt/root
# grub-install --recheck --no-floppy --root-directory=/mnt/root /dev/sda

GRUB2 seadistusfaili /etc/grub/grub.cfg kasutamine

GRUB2 seadistusfaili genereerimist juhib /etc/default/grub seadistusfail, milles saab kasutada selliseid üldise tähendusega parameetreid

  • GRUB_CMDLINE_LINUX_DEFAULT="quiet" - kas kerneli reale lisatakse 'quiet'

GRUB2 seadistamiseks sobib kasutada nt sellist /etc/grub.d/40_custom faili

# cat /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.

# echo "Debian GPT" >&2
menuentry "Debian GPT" {
insmod part_gpt
insmod ext2
set root=(hd0,gpt2)
linux /vmlinuz-2.6.32-2-amd64 root=/dev/mapper/system-root ro
initrd /initrd.img-2.6.26-2-amd64
}

ning tuleb muuta käivitataks

# chmod 0755 /etc/grub.d/40_custom

Seadistusfaili /boot/grub/grub.cfg genereerimiseks sobib öelda

# update-grub

Kuhugi mujale genereerimiseks sobib kasutada programmi

# grub-mkconfig -o /tmp/grub-test.cfg

GRUB2 üle serial konsooli

Selleks, et alglaadur esitatakse serial konsoolil tuleb seadistusfailis /etc/default/grub näidata read, kus "serial console" tähendab, et grub menüüd esitatakse nii füüsilisel monitoril (console) kui serial konsoolil (serial)

# cat /etc/default/grub
...
GRUB_TERMINAL="serial console"
GRUB_CMDLINE_LINUX="console=ttyS0,9600"

ning vajadusel, sama süntaks nagu legacy GRUB, nt

GRUB_SERIAL_COMMAND="serial --unit=0 --speed=4800 --word=7 --parity=even --stop=1"

GRUB2 prompti kasutamine

Kui /boot/grub/grub.cfg fail puudub või menüüst väljutakse teadlikult Ctrl-C abil GRUB2 käsureale, siis nt selliselt saab käisitsi arvuti alglaadida

grub> insmod ext2
grub> set root=(hd0,msdos1)
grub> linux /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/system-root ro
grub> initrd /initrd.img-2.6.32-5-amd64
grub> boot

kus

  • (hd0,msdos1) - tuum ja initramfs asuvad esimese kõvaketta esimesel fdisk partisioonil asuvas failisüsteemis
  • operatsioonisüsteemi juurfailisüsteemiks on /dev/mapper/system-root LVM köide

GRUB2 ja LVM kasutamine

GRUB2 ja LVM kasutamine tähendab, et /boot failisüsteem asub LVM köitel, tõenäoliselt siis paikneb ja operatsioonisüsteemi juurfailisüsteem LVM köitel.

grub> insmod lvm
grub> set root=('system-root')

Praktiliselt tähendab see, et GRUB2 tarkvaraga ei ole vaja enam kasutada eraldi /boot failisüsteemi, mis asub otse fdisk partitsioonil.

GRUB2 ja RAID1 kasutamine

GRUB2 ja RAID1 kasutamine tähendab, et /boot failisüsteem asub mdadm RAID seadmel, tõenäoliselt siis paikneb operatsioonisüsteemi juurfailisüsteem samuti mdadm seadmel või sellel asuval LVM köitel. Tavaliselt kasutatakse füüsilisi kõvakettaid sel juhul selliselt, nt nelja ketta puhul

  • /dev/md/boot - RAID1, mis koosneb /dev/sda1, /dev/sdb1, /dev/sdc1 ja /dev/sdd1 seadmetest
  • /dev/md/system - RAID5, mis koosneb /dev/sda2, /dev/sdb2, /dev/sdc2 ja /dev/sdd2 seadmetest
  • /dev/mapper/system-swap, /dev/mapper/system-root - LVM köited asuvad /dev/md/system seadmel

Seadistusfaili /boot/grub/grub.cfg genereeritakse sel juhul automaatselt rida

set root='(md/boot)'

RAID1 seadmelt alglaadimisel on oluline uue seadme RAID lülitusse lisamisel grub uuesti paigalda öeldes, vähemalt ideeliselt võiks ta nii olla

# grub-install --recheck --no-floppy /dev/md/boot
Installation finished. No error reported.

Tundub, et 2013 aastal tuleb praktiliselt öelda siiski nt

# grub-install --recheck --no-floppy /dev/sda
# grub-install --recheck --no-floppy /dev/sdb

Tulemusena paigaldatake GRUB2 automaatselt kõigi asjassepuutuvate komponentide st /dev/sda, /dev/sdb jne MBR'i.

GRUB2 ja RAID5 kasutamine

GRUB2 alglaadija oskab /boot kataloogi kasutada ka RAID5 seadmelt.

grub> set raid
grub> set root=('md/0')

GRUB2 ja RAID1 ja LVM kasutamine

TODO

GRUB2 ja RAID1 ja LVM ja LUKS kasutamine

Oluline on jälgida, et peale initramfs tekitamist on seal olemas sarnase sisuga fail

# cat conf/conf.d/cryptroot 
target=c_md0,source=/dev/md0,key=none,rootdev,lvm=data-root

GRUB2 Rescue režiimi kasutamine

GRUB2 läheb rescue režiimi nt juhtumil, kui tal ei ole kasutada /boot/grub kataloogi

GRUB loading.                                                                   
Welcome to GRUB!                                                                

error: no such disk.
Entering rescue mode...
grub rescue> ls                                                                 
(md/boot) (md/system) (hd0) (hd0,msdos2) (hd0,msdos1) (hd1) (hd1,msdos2) (hd1,msdos1) 
(hd2) (hd2,msdos2) (hd2,msdos1) (hd3) (hd3,msdos2) (hd3,msdos1)

Selle põhjuseks võib olla nt, et GRUB2 ei tea, et need failid on (md/boot) seadmel. Edasi võiks saada nt nii

grub rescue> set prefix=(md/boot)/grub
grub rescue> insmod (md/boot)/grub/normal.mod
grub rescue> normal

Seejärel peaks avanema tavalised GRUB2 menüüvalikud.

GRUB2 alglaaduri kasutamine GPT ja UEFI riistvaraga

TODO

GRUB2 alglaaduri kasutamine GPT ja PC-BIOS riistvaraga

Kui UEFI riistavara töötab GRUB2 alglaaduri ja GPT partitsioneeritud kõvakettaga nö otseselt, siis PC-BIOS arvuti puhul tuleb kasutada seejuures mõnda täiendavat võtet. Üldiselt toimub PC-BIOS riistvaral töötava süsteemi alglaadimine selliselt

  • kõvakettale on moodustatud kolm GPT partitsiooni
(parted) p                                                                

Number  Start     End          Size         File system  Name      Flags
 1      2048s     4095s        2048s                     biosboot  bios_grub
 2      4096s     1052671s     1048576s                  boot
 3      1052672s  3905974271s  3904921600s               system
  • alglaadimisel loetakse üks alglaaduri aste esimeselt partitsioonilt
  • järgmised astmed ning operatsioonisüsteemi tuum ja initramfs loetakse boot partitsioonilt
  • operatsioonisüsteemi juurfailisüsteem asub kolmandal partitsioonil või sellel paiknevalt loogiliselt seadmelt, nt LVM köitelt

GPT partitsioonide moodustamine

Kirjeldatud GPT partitsioonide moodustamiseks sobib öelda, eeldusel, et tegeledakse /dev/sdc seadmega

# parted /dev/sdc
(parted) mklabel gpt
(parted) unit s
(parted) mkpart biosboot 2048 4095
(parted) set 1 bios_grub on                                               
(parted) mkpart boot 4096 1052671                                         
(parted) mkpart system 1052672 3907026943
(parted) set 3 lvm on

kus

  • tuleb jälgida, et partitsioonide suurused saavad sobivad, kaks esimest võiksid olla suhtliselt universaalselt sobivad

Failisüsteemide ettevalmistamine

GPT pealt töötava süsteemi saab ettevalmistada nt ühendades vastav plokkseade külge mõnele olemasolevale töötavale süsteemile. Seejärel moodustada seadmele GPT partitsioonitabel, failisüsteemid ning kopeerida sinna töötav süsteem üle, nt rsync abil.

GRUB2 seadistamine ja paigaldamine

GRUB2 seadistamiseks sobib kasutada nt sellist /etc/grub.d/40_custom faili

#!/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.

echo "Debian GPT" >&2
menuentry "Debian GPT" {
insmod part_gpt
insmod ext2
set root=(hd0,gpt2)
linux /vmlinuz-2.6.32-2-amd64 root=/dev/mapper/system-root ro
initrd /initrd.img-2.6.26-2-amd64
}

kus

  • insmod part_gpt - grub2 laadib omale GTP partitsioonitabeli tundmise tarkuse
  • (hd0,gpt2) - näitab millisel GPT partitsioonil asub /boot failisüsteem

Eeldusel, et failisüsteemid on monteeritud öelda

# grub-install --recheck --no-floppy --root-directory=/mnt/root /dev/sda
Installation finished. No error reported.

Tulemusena peaks arvuti käivituma.

Kasulikud lisamaterjalid

GRUB2 alglaaduri kasutamine multipath /boot seadmega

Eelduseks on

  • arvutil puudubvad nö lokaalsed kettad, ka /boot ja edasi juurikas tuleb üle FC võrgu
  • operatsioonisüsteem on juba paigaldatud, kuid millegipärast on bootloader rikkis
  • bootloader iseenesest on paigaldatud, mille kinnituseks on, et arvuti käivitamisel jõuab grub prompti
grub>

ning sealt nö käsitsi on võimalik os käivitada, nt

set root=(hd0,msdos1)
linux /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/system-root ro
initrd /initrd.img-2.6.32-5-amd64

Järgnev aitab juhtumil kui update-grub öeldes vastatakse sedasi, iseenest /boot/grub/grub.cfg kusjuures genereeritakse, aga arvuti siiski ise ei käivitu

# update-grub    
Generating grub.cfg ...
Found linux image: /boot/vmlinuz-2.6.32-5-amd64
Found initrd image: /boot/initrd.img-2.6.32-5-amd64
/usr/sbin/grub-probe: error: cannot find a GRUB drive for /dev/mapper/mpath0-part1.  Check your device.map.
/usr/sbin/grub-probe: error: cannot find a GRUB drive for /dev/mapper/mpath0-part1.  Check your device.map.
done

Tundub, et mitte käivitumise põhjuseks on ebasobiva sisuga /boot/grub/grub.cfg, eriti ebasobiv root=... seadistus. Abiks võiks olla kasutada sarnase sisuga /etc/grub.d/40_custom seadistusfaili

# cat /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.

menuentry "Debian mpath" {
insmod part_msdos
insmod ext2
set root=(hd0,msdos1)
linux /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/system-root ro
initrd /initrd.img-2.6.32-5-amd64
}

Kui seejärel öelda

# update-grub

siis peaks tekkima /boot/grub/grub.cfg sisse täiendav menuentry ning ehk on vaja ka kohendada default menuentri valikut /etc/default/grub failist.

Toodud lahenduse puuduseks on, et rida

root=(hd0,msdos1)

kasutab ainult ühte multipathi komponenti, ilusam oleks kui ta grub kasutaks ise ka multipathi, aga tundub, et see ei ole Debian v. 6 Squeeze puhul võimalik.

Kasulikud lisamaterjalid

OpenBSD alglaadimine

Eeldusel, et

  • Linux on paigaldatud nii, et /boot failisüsteemile vastab fdisk partitsioon /dev/sda1
  • MBR peale on paigaldatud GRUB2 bootloader
  • OpenBSD on paigaldatud nt /dev/sda4 fdisk partitsioonile ja /dev/sda4 peale on paigaldatud OpenBSD bootloader

sobib öelda grub promptis

> set root=(hd0,msdos4)
> chainloader +1
> boot

Tulemusena laadib GRUB2 bootloader OpenBSD bootloaderi ning seejärel käivitatakse OpenBSD operatsioonisüsteem. GRUB2 menüü sissekande tekitamiseks sobib kasutada sellise sisuga 40_custom faili

# cat /etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0

menuentry “OpenBSD″ {
  insmod part_msdos
  insmod chain
  set root=(hd0,msdos4)
  chainloader +1
}

ning default valiku kasustamiseks /etc/default/grub failis rida

GRUB_DEFAULT="OpenBSD"

Märkused

  • Kui RIPLinux pealt ei õnnestu GRUB2 alglaadurit paigaldada RAID seadmele /dev/md/boot, siis sobib kasutada esmaseks OS alglaadimiseks vastavaid komponente niisama; ja seejärel töötava operatsioonisüsteemi vahenditega moodustada RAID seade /dev/md/boot ning paigaldada GRUB2 OS vahenditega sinna.
  • Selleks, et update-grub ei otsiks mööda plokkseadmeid taga operatsioonisüsteeme sobib /etc/default/grub failis kasutada rida
GRUB_DISABLE_OS_PROBER=true
  • Selleks, et ei genereeritaks recovery sissekandeid sobib kasutada rida
GRUB_DISABLE_LINUX_RECOVERY="true"
  • kui GRUB teatab kõige algul (aga võib seejärel edasi töötada), siis maksab kahtlustada, et grub-install on jäänud tegemata, või mõnda grub mooduli faili ei leita
error: file not found
  • kui initramfs või grub seadistuste genereerimine segab paketifiltri tööd, siis võib olla abiks asendada skripti
/etc/kernel/postrm.d/zz-update-grub

sisu ajutiselt

#! /bin/sh
set -e
exit 0

Debian Wheezy puhul kontrollitud

Kui /boot asub mdadm plokkseadmel, siis on sobiv kasutada grub seadistustes

..
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64' \
  --class debian --class gnu-linux --class gnu --class os {
       load_video
       insmod gzio
       insmod raid
       insmod mdraid1x
       insmod part_msdos
       insmod ext2
       set root='(mduuid/34d523e98c385e95b842b2a9a9b21821)'
       search --no-floppy --fs-uuid \
         --set=root 044fbb88-658b-410d-bc53-6b4ce1cff26b
       ...

kus

  • mduuid - mdadm seadme UUID
# mdadm -D /dev/md/boot | grep UUID
          UUID : 34d523e9:8c385e95:b842b2a9:a9b21821
  • search ... 044fbb88-658b-410d-bc53-6b4ce1cff26b - mdadm seadme blkid
# blkid /dev/md/boot            
/dev/md/boot: UUID="044fbb88-658b-410d-bc53-6b4ce1cff26b" TYPE="ext3"

LILO kasutamine

Mõnel juhul ei õnnestus GRUB bootloaderit kasutada. Nt esimene paritsioon asub liiga lähedal kõvaketta algusele vms. Siis võib paremate variantide puudumisel abistada LILO bootloader. Tarkvara (mitte bootloaderi enda) paigaldamiseks sobib öelda

# apt-get install lilo

Esmase sisuga seadistusfaili tekitamiseks

# liloconfig
# egrep -v "^#|^$" /etc/lilo.conf 
lba32
boot = /dev/sda
map = /boot/map
install = menu
menu-scheme = Wb:Yr:Wb:Wb
delay = 200
prompt
timeout = 100
vga = normal
default = "Linux_LVM_sda3"

other = /dev/sda1
  label = Windows

image = /boot/vmlinuz-3.13-1-486
  label = "Linux LVM sda3"
  root = /dev/system/root
  read-only
  initrd = /boot/initrd.img-3.13-1-486

image = /boot/vmlinuz-3.12-1-486
       label = "Linux sda2"
       root = /dev/sda2
       read-only
       initrd = /boot/initrd.img-3.12-1-486

kus

  • kasutatakse kolme boot valikut, Windows ja kaks Linuxi eksemplari
  • boot - kus on boot record (nt kas master boot record (/dev/sda), või partition boot record (/dev/sda2)
  • root = kus on vastava boot valiku juurfailisüsteem (nt LVM või partitsiooni peal olevas failisüsteemis)
  • Linux LVM sda3 - vaikimisi valik

LILO paigaldamiseks sobib öelda

# lilo
Added Windows  
Added Linux_sda3  +  *
Added Linux_sda2  +

FreeBSD alglaadimine

grub> insmod part_bsd
grub> insmod ufs2
grub> set root=(hd0,msdos3,bsd1)
grub> kfreebsd /boot/loader

kus

  • FreeBSD on enda meelest /dev/ad0s3a partitsioonil

Kasulikud lisamaterjalid

GRUB2 CD plaadi valmistamine

Harva, aga osutub, vahest ei õnnestu sugugi arvuti lokaalsele kõvakettale paigaldada alglaadurit nii, et ta ka alglaadiks. Üks variant on proovida erinevaid alglaadureid, ja erinevaid BIOS/UEFI seadeid, aga vahest ikkagi ei õnnestu. Üks alternatiiv selliselt juhul on seada arvuti bootima CD plaadilt. Käesolevas punktis kirjeldatakse sellise CD tõmmise ettevalmistamist, mille kasutamisel esmalt kuvatakse kasutajale tavaline GRUB menüü. Lisaks saab juhtida plaadile kirjutatud GRUB seadistusfailiga grub.cfg, mis edasi juhtub, nt on võimalikud sellised variandid

  • kasutajat rahuldab töötavasse grub prompti sattumine ja sealt saab ise edasi linux, initrd jt käskudega
  • plaadil on tuum ja initrd ning arvuti kõvakettal olev juurfailisüsteem booditakse nendega
  • plaadil olev grub.cfg viitab kõvakettal asuvale /boot/i386-pc/core.img failile ja praktiliselt käivitatab kõvakettal oleva grub alglaaduri

Tõmmise valmistamise eelduseks on xorriso programmi olemasolu, paigaldamiseks sobib öelda

# apt-get install xorriso

Seejärel moodustada kataloog kuhu paigutatakse tekitatava tõmmise sisu, loogiline on see täita olemasoleva /boot sisuga

# mkdir /var/tmp/iso
# cp -a /boot /var/tmp/iso

Vajadusel saab moodustada grub.cfg faili ilma kõvakettal olevat faili muutmata

# grub-mkconfig -o /var/tmp/iso/boot/grub/grub.cfg

Tekitada iso tõmmis

# grub-mkrescue -o grub.iso iso

Tõmmise plaadile kirjutamiseks sobib kasutada käske

# wodim -v dev=/dev/sr0 blank=fast
# wodim -v speed=8 dev=/dev/sr0 grub.iso

Tulemusena saab arvuti CD plaadilt käivitada.

Selleks, et käivitada süsteem core.img abil sobib öelda GRUB2 promptis või grub.cfg failis

multiboot /grub/i386-pc/core.img

Kui peaks mingil põhjusel olema tarvis genereerida uus core.img (ja taustal tehakse veel hulka muid tegevusi) sobib öelda

TODO

Kasulikud lisamaterjalid

GRUB2 USB pulga valmistamine

TODO

GRUB booloaderist arvuti lokaalses failisüsteemis asuva ISO tõmmise bootimine

Kui arvutis ei ole kasutada mingit nö tavalist seadet, millelt install tõmmis bootida, nt CD/DVD või USB, aga arvutis on GRUB2 bootloader, siis sellega saab käivitada mõnel kõvakettal või partitsioonil olevast failisüsteemist tõmmist kasutada

grub> loopback loop (hd1,msdos1)/centos.iso
grub> linux (loop)/isolinux/vmlinuz
grub> initrd (loop)/isolinux/initrd.img
grub> boot

Tulemusena avaneb os installer. Vajadusel kopeerida iso tõmmise sisu samuti kohaliku ketta failisüsteemi.

Kasulikud lisamaterjalid

Debian v. 8 Jessie kopeerimine ja GRUB2 paigaldamine

Tundub, et Debian v. 8 Jessie kopeerimisel saab GRUB2 bootloaderi paigaldada selliselt

  • bootida üles SystemRescueCD plaadilt (nb! tundub, et systemd kasutamise tõttu 'boot existing root file system ...' valik ei toimi)
  • failisüsteemid on tehtud ja ära kopeeritud ja külge ühendatud /mnt/root ja /mnt/root/boot alla
  • teha bind mountid
# mount --bind /dev /mnt/root/dev
# mount --bind /proc /mnt/root/proc
# mount --bind /sys /mnt/root/sys
  • minna keskkonda
# chroot /mnt/root /bin/bash
  • paigalda grub kõik stage'd (nii kasutatakse loodetavasti õigeid plokkseadmete uuid väärtusi jms)
# grub-install --no-floppy --recheck --root-directory=/mnt/root /dev/sda
  • bootida käisitsi grub> promptist süsteem üles kui grub.cfg faili ei leita (eeldusel, et /boot on /dev/sda1)
grub> set root='hd0,msdos1'
grub> linux ...
grub> initrd ...
grub> boot
  • paigaldada vajadusel (igaks juhuks) uuesti kõik grub stage'd
# grub-install /dev/sda
  • genereerida grub.cfg (nii kasutatakse kindalsti õigeid plokkseadmete uuid väärtusi jms)
# update-grub
  • tulemusena peaks arvuti ise üles bootima

Krüptitud /boot ja GRUB kasutamine

Käeolev tekst kirjeldab kuidas ...

Legacy lahendus

Nö tavaliselt ehk legacy juhtumil

  • secure boot on välja lülitatud
  • arvutit kasutatakse BIOS ehk non-uefi režiimis
  • Linux swap, juurfailisüsteem ja muud failisüsteemid v.a. /boot failisüsteem on krüptitud
  • krüptimiseks kasutatakse LUKS (nn cryptsetup) lahendust

Lahendus

  • tagab, et välja lülitatud arvuti varastamisel ei saa failisüsteemidele (v.a. /boot/efi ligi)
  • ei taga Evil Maid Attack vastu kaitset

Secure Boot lahendus

Nn Secure Boot juhtumil

  • secure boot on sisse lülitatud
  • arvutit kasutatakse uefi režiimis s.h. /boot/efi tuleb ESP failisüsteemist
  • kõik v.a. /boot/efi failisüsteem on krüptitud
  • /boot/efi failisüsteemis asuvad efi rakendused ja nende autentsust kontrollitakse Secure Boot abil
  • töökohaarvuti operatsioonisüsteemine kasutatakse Debian operatsioonisüsteemi

Lahendus

  • tagab, et välja lülitatud arvuti varastamisel ei saa failisüsteemidele (v.a. /boot/efi ligi)
  • ei ole teostatav nn evil maid attact (nt paha saab ajutiselt väljalülitatud arvuti enda valdusse; eemaldab füüsiliselt kõvaketta, asendab /boot/efi failisüsteemis midagi ja paneb arvuti vaikselt nö oma kohale tagasi)

Kasutamine näeb lõpuks välja nii

  • arvutile toite sisselülitamise järel küsitakse efi parooli selleks, et arvutiga üldse midagi teha saaks (mitte Setup keskkonda sisse logimiseks; kuigi ka seal on parool ees)
  • seejärel küsib grub efi rakendus parooli selleks, et tuuma jms kasutada
Attempting to decrypt master key ...
Enter passphrase for hd0.gpt7 (0c...):
  • seejärel ilmub tavaline grub menüü, bootida krüptitud juurfailisüsteemiga
  • seejärel küsitakse sama parooli juurfailisüsteemi kasutamiseks
..
Please unlock disk /dev/sda7 (c_sda7):
...
  • operatsioonisüsteem käivitatakse ja arvuti saab kasutada tavalisel viisil

Ettevalmistused

Lähtepunktiks on

  • secure boot toega riistvara
  • paigaldatud nö tavaline Debian Linux
  • riistvara kasutatakse uefi režiimis ja gpt partitsioonitabeliga
  • /dev/sda seadmel on piisavalt kasutamata ruumi krüptitud plokkseadmele vastava partitsiooni tekitamiseks
  • paigaldatud cryptsetup pakett

Krüptitud lahenduse tekitamine

NB! Antud lahendus ei kaitse nn Evil Maid Attack eest.

  • secure boot on välja lülitatud
  • käivitada süsteem tavalisel viisil
  • tekitada /dev/sda7 gpt partitsioon
  • tekitada /dev/sda7 alusel cryptsetup seade /dev/mapper/c_sda7
TODO
  • tekitada lvm köide /dev/c_sda7_vg/root
# pvcreate /dev/mapper/c_sda7
# vgcreate c_sda7_vg /dev/mapper/c_sda7
# lvcreate -L20G -n root c_sda7_vg
# lvcreate -L4G -n swap c_sda7_vg
  • kopeerida juurfailisüsteem ümber LVM snapshot abil
# lvcreate -L4G -s -n root_ss /dev/system/root
# mount /dev/system/root_ss /mnt/root_ss
# mount /dev/c_sda7_vg/root /mnt/root_crypted
# rsync -avHAX --numeric-ids /mnt/root_ss/ /mnt/root_crypted/
  • tekitada ajutiselt sobiva sisuga /etc/crypttab
# cat /etc/crypttab 
# <target name>	<source device>		<key file>	<options>
c_sda7 /dev/sda7 none luks,discard,initramfs
  • tekitada crypttab toega initramfs
# update-initramfs -u
  • muuta krüptitud juurfailisüsteemi /etc/fstab sisu sobivaks
# cat /etc/fstab 
/dev/mapper/c_sda7_vg-root    /               ext4    errors=remount-ro    0       1
/dev/sda1                     /boot/efi       vfat    umask=0077           0       1
/dev/mapper/c_sda7_vg-swap    none            swap    sw                   0       0
  • bootida arvuti krüptimata /boot abil krüptitud juurfailisüsteemilt (NB! alljärgnevaad käsud antakse krüptitult booditud arvutist)
  • lülitada sisse grub bootloaderis krüpto
# grep CRYPTO /etc/default/grub
GRUB_ENABLE_CRYPTODISK=y
  • moodustada uus grub efi rakendus eraldi uefi boot valikuna
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=dc --recheck
grub-mkconfig -o /boot/efi/EFI/dc/grub.cfg

Kui tulemusena arvuti bootida dc valiku abil, siis küsib grub efi rakendus juurfailisüsteemi LUKS parooli selleks, et saada ligi juurfailisüsteemile sealt tuuma ja initrd kasutamiseks. Seejärel küsitakse enne juurfailisüsteemi monteerimist jällegi sama parooli.

  • genereerida secure boot võtmed, bootida arvuti setup keskkonda, juurutada sb võtmed ja lülitada sb sisse
  • moodustada objcopy
# cat 20170521/mk.sh 
objcopy \
    --add-section .osrel=/etc/os-release --change-section-vma .osrel=0x20000 \
    --add-section .cmdline="cmdline.txt" --change-section-vma .cmdline=0x30000 \
    --add-section .linux="vmlinuz-4.9.0-3-amd64" --change-section-vma .linux=0x40000 \
    --add-section .initrd="initrd.img-4.9.0-3-amd64" --change-section-vma .initrd=0x3000000 \
    /usr/lib/systemd/boot/efi/linuxx64.efi.stub /boot/efi/EFI/dc/grubx64.efi-objcopy
  • objcopy signeerimine
# sbsign --key db.key --cert db.crt --output /boot/efi/EFI/dc/grubx64.efi /boot/efi/EFI/dc/grubx64.efi-objcopy 
# sbverify --cert db.crt --verbose /boot/efi/EFI/dc/grubx64.efi

Misc

TODO

Kasulikud lisamaterjalid

Kasulikud lisamaterjalid