GRUB2 alglaaduri kasutamine operatsioonisüsteemiga Debian Squeeze
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
- http://www.ibm.com/developerworks/linux/library/l-4kb-sector-disks/
- http://www.johannes-bauer.com/linux/wdc/?menuid=3
- http://grub.enbug.org/BIOS_Boot_Partition
- http://wiki.archlinux.org/index.php/User:Skodabenz/GPT
- http://jamie.mayfirst.org/posts/2010/two-tb-disks/
- http://www.wensley.org.uk/gpt
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
- http://blog.devork.be/2016/12/encrypted-root-on-debian-with.html
- https://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/
Kasulikud lisamaterjalid
- https://askubuntu.com/questions/729673/ubuntu-full-disk-encryption-with-encrypted-boot
- http://dustymabe.com/2015/07/06/encrypting-more-boot-joins-the-party/
- http://www.pavelkogan.com/2014/05/23/luks-full-disk-encryption/
- http://blog.attackzero.net/2016/08/full-disk-encryption-fde-including-most.html
Kasulikud lisamaterjalid
- https://help.ubuntu.com/community/Grub2
- http://www.gnu.org/software/grub/
- https://wiki.archlinux.org/index.php/GRUB2
- http://www.auul.pri.ee/wiki/Operatsioonis%C3%BCsteemi_Debian_GNU/Linux_kasutamine#GPT_kasutamine
- Tarkvaralise mdadm RAID kasutamine operatsioonisüsteemiga Debian Squeeze
- http://www.supergrubdisk.org/super-grub2-disk/