Bejelentkezés

Az UEFI - openSUSE ismertető

Olvasóink értékelése: 5 / 5

Csillag aktívCsillag aktívCsillag aktívCsillag aktívCsillag aktív
 

ÜLÜ! Most örülsz? :)

A leírás az openSUSE oldalán található cikk magyar átirata.

 

Az UEFI (Unified Extensible Firmware Interface) új ipari szabvány, ami a számítógép perifériái és az operációs rendszer közötti kapcsolatot teremti meg. Röviden az UEFI váltja le a régi BIOS firmware-t. Nem új dolog, a HP, illetve az Apple az 1990-es évektől árult EFI/UEFI-s eszközöket, csak a Windows 8-nál elvárás lett az UEFI-t használata.


Az UEFI specifikációit itt találhatod meg. A Linux 2000 óta képes kezelni az EFI-t, az openSUSE 12.2-nek már van UEFI támogatása és az openSUSE 12.3 pedig a Secure Boot-ot is kezeli. A Secure Boot az UEFI egy kiterjesztése, az UEFI kiterjeszthető tehát. Az UEFI-ben egy Virtuális gép dolgozik és a szabvány lehetővé teszi ezen virtuális gépnek, hogy különlegesen kódolt bináris fájlokat elfogadjon és végrehajtson. Ezek a binárisok lehetnek eszközmeghajtók, alkalmazások, vagy kiterjesztések. Az egész kicsit arra hasonlít, mintha egy kisebb operációs rendszer indulna bekapcsoláskor, aminek a feladata, hogy egy másik operációs rendszert találjon.


Hogy a gép UEFI-t tartalmaz-e úgy állapítható meg, hogy bekapcsoláskor az F1 (vagy gépfüggően az ESC) lenyomásával ellenőrizzük a firmware beállítását. Ha a menüben található „legacy" mód (régi BIOS), EFI mód és „hybrid" mód, akkor igen. Ha nincs UEFI támogatás, de tesztelnéd SUSE alatt, akkor használhatod a QEMU-t és az Intel referencia UEFI alkalmazását: UEFI és Secure Boot QEMU-val


GPT

UEFI új lemezparticionálást, a GUID Partitioning Table-t (GPT) is javasolja az MBR leváltására. Az MBR-nek van néhány fontos korlátozása pl. elsődleges és logikai partíciók száma tekintetében. A GPT 128 partíciót képes kezelni és 2^64-en méretű lemezterületet képes megcímezni. És amitől GUID, hogy minden partíciónak önálló UUID azonosítót ad, tehát elkerülhető a partíciók címzéséből eredő keveredés. (Ez itt a reklám helye: a SUSE Yast új telepítésnél, ha EFI módot észlel, akkor GPT partíciós táblát próbál készíteni. DE: GPT esetén a régi fdisk használhatatlanná válik, a gdisk-et, vagy gptfdisk-et kell használni. A felületük azonos az fdisk-ével. A YAST2 képes GPT eltávolítására az Expert Options alatt -> Create New Partition Table.)

 

EFI System Partition (rendszerpartíció)
Az EFI System Partition (ESP), ahol az UEFI a betöltéskor használható EFI programokat keresi, illetve itt lehetnek eszközmeghajtók és egyéb eszközök az EFI számára. Ez egy FAT rendszerpartíció, amit a YAST2 friss telepítésnél létrehoz. Pontosabban, ha korábban Windows volt a gépen és a YAST2 EFI-t érzékel, akkor azt a SUSE által használt új EFI bootloader-tide rakja és csatolja a /boot/efi alá.

EFI partíció csatolási pontja
A firmware a /EFI/BOOT/bootx64.efi-t keresi az operációs rendszer betöltéséhez. Windows-os gépen ez az /EFI/Microsoft/Boot/BCD.efi, openSUSE esetén /EFI/opensuse/grubx64.efi (vagy shim.efi, ha a Secure Boot használatban van).

Uefi-snapshot2

EFI partíció tartalma

 

A Boot Manager
A megfelelő operációs rendszert betöltő kiterjesztés kiválasztására az EFI egy belső boot manager-t használ. Az operációs rendszer dolga, hogy elkészítse a saját bejegyzését ide. A boot manager F9, vagy F12 lenyomásával érhető el, de használható az efibootmgr eszköz is a bejegyzések olvasására és szerkesztésére. Pl. az aktuális bejegyzések olvasására efibootmgr -v parancsot kell kiadni.

 

Boot manager tételek
A képernyőkép tanúsága alapján az openSUSE két bejegyzést készít, egyik a Secure Boot mellett, a másik anélküli indításra szolgál. Az elveszett bejegyzések újbóli elkészítéséhez # efibootmgr -c -L "openSUSE-alt" -l '\EFI\opensuse\grubx64.efi' parancsot kell kiadni.


EFI változók
Az UEFI szabvány meghatározza, hogy milyen változókat kell/lehet tárolni a firmware egy állandó részében. Telepítéskor, vagy a boot változtatásakor ezeket a változókat kezeljük és írjuk át. A változók lekérdezésére és elérésére az openSUSE-ban a Sysfs szolgál. Sysfs egy virtuális fájlrendszer, amit a kernel hoz létre belső információk felhasználói felületen történő megjelentésére. A változókat a /sys/firmware/efi/vars/ alatt találjuk meg. Pl. az utolsó boot loader beírás lekérdezése ezzel történik:
$ hexdump -C /sys/firmware/efi/vars/Boot0007-*/data

 

Secure Boot
Az UEFI Secure Boot feladata meghatározni, hogy mely binárisok futhassanak le a rendszer betöltése során. A firmware csak azokat a betöltőket futtatja le, amiknek a biztonsági aláírását (cryptographic signature) ismeri. A tételek azonosítására a Secure Boot az X.509 tanúsítványt használja. Napjainkban a legtöbb, bekapcsolt Secur Boot-os PC hardver Microsoft Windows 8-cal fut, így a firmware számára csak a Microsoft az elismert bejegyzés. Hogy ne kelljen az ismert aláírások listáját átállítani az openSUSE-nek Microsoft-os aláírással kell rendelkeznie.


Alkalmazása openSUSE 12.3 esetén
Az openSUSE 12.3 UEFI rendszeren használt betöltője a grub2. Secure Boot módban egy további betöltő, a „shim" is használatra kerül. A shim rendelkezik Microsoft-os aláírással és ismeri az aláírást is, amivel az openSUSE grub2-t hitelesíti. A grub2 ezután betölti a Linux kernelt, ami szintén rendelkezik openSUSE hitelesítésével. Ekkor a Secure Boot bevégezte feladatát, az openSUSE-ben további megszorítások nincsenek. Más betöltők és kernelek eléréséhez a shim képes aláírásokat importálni a „MokManager" program segítségével.

A Secure Boot támogatás be- és kikapcsolása
Secure Boot támogatás az openSUSE 12.3-ben csak kísérleti jellegű. A YaST nem érzékeli automatikusan, hogy a Secure boot be van-e kapcsolva, de telepítéskor felajánlja a kézzel ki-, vagy bekapcsolást. Ehhez telepített shim kell. Telepített rendszer esetén ehhez a YaST bootloader modult lehet használni.

A Secure boot állapotának lekérdezése
Root-ként a Linux shell-ben a következő parancsot kell kiadni:
# od -An -t u1 /sys/firmware/efi/vars/SecureBoot-8be4df61-93ca-11d2-aa0d-00e098032b8c/data
Ha a válaszul kapott érték 1, a Secure Boot él. Néhány firmware-ről tudott, hogy akkor is 0-t ad vissza, amikor a Secure Boot be van kapcsolva.

Tetszőleges kernel betöltése
A Secure Boot nem akadályozza meg, hogy saját magad fordította kernelt használd, csak hitelesítened kell úgy, hogy a firmware, vagy a MOK felismerje:

  1. készíts egy X.509-es kulcsot és tanúsítványt az aláíráshoz
    openssl req -new -x509 -newkey rsa:2048 -sha256 -keyout key.asc -out cert.pem -nodes -days 666 -subj "/CN=$USER/"
  2. csomagold be a kulcsot és a tanúsítványt PKCS#12 szerkezetben
    openssl pkcs12 -export -inkey key.asc -in cert.pem -name kernel_cert -out cert.p12
  3. generálj NSS adatbázist a pesign számára
    certutil -d . -N
  4. importáld a PKCS#12-ben található kulcsot és tanúsítványt az NSS adatbázisba
    pk12util -d . -i cert.p12
  5. lásd el a kernelt az új aláírással
    pesign -n . -c kernel_cert -i arch/x86/boot/bzImage -o vmlinuz.signed -s
  6. kernelkép is kapja meg az aláírást
    pesign -n . -S -i vmlinuz.signed

Ezután a kernelt a szokásos módon telepítheted a /boot-ba. Ezt követően az aláírást a firmware-be, vagy a MOK-ba is importálni kell:

  1. konvertáld a tanúsítványt DER formátumba
    openssl x509 -in cert.pem -outform der -out cert.der
  2. a könnyebb eléréshez másold az ESP-be a tanúsítványt
    sudo cp cert.der /boot/efi/

Az openSUSE-ben használt mokutil még nem jó, így nincs egyszerű módszer a MOK automatikus indítására. A kézi indítás menete:

  • újraindítás
  • a grub menüben nyomj „c"-t
  • feltételezve, hogy az ESP a „gpt1" a „hd0"-n írd be:
  • chainloader (hd0,gpt1)/EFI/opensuse/MokManager.efi
  • boot
  • válaszd az „Enroll key from disk"-et
  • menj a cert.der fájlra és nyomj Enter-t
  • kövesd az instrukciókat a kulcs felvételéhez (általában „0"-t, majd „y"-t kell nyomni).
    A firmware akár az új kulcs-nak az adatbázisba való felvételét is felajánlhatja.

Gép indítása gyári kulcs nélkül
Ha a firmware lehetővé teszi, akkor törölheted a Secure Boot által használt kulcsokat és új PK-t és KEK-et telepíthetsz Microsoft-kulcs nélkül. Importáld a /usr/lib64/efi/shim-opensuse.der-t az adatbázisba, hogy az openSUSE kernel betöltődhessen. Ha a firmware (van ilyen) nem támogatja a dupla aláírást, akkor telepítsd a /usr/lib64/efi/shim-opensuse.efi-t, amiben csak az openSUSE aláírása van /boot/efi/EFI/opensuse/shim.efi formában.

Rövidítések
PK - „Platform Key" kifejezést a szállító által telepített tanúsítványra használják. A KEK módosításához érvényes PK kell.
KEK - Érvényes „Key Exchange Key" (kulcs cserélő kulcs) kell az adatbázis frissítéséhez.
db - Az ismert tanúsítványokat, aláírásokat tartalmazó aláírási adatbázis.
dbx - A „db" ellentettje. A tiltott aláírások adatbázisa.
MOK - Machine Owner Keys (géptulajdonos kulcsa) a MokManager által használt, tanúsítványokat és kulcsokat tartalmazó külön adatbázis.

Hozzászólások   

+2 # ÜLÜ 2014-03-27 13:11
Szia :)

Igen, örülök köszönöm. :lol:

Üdv:ÜLÜ

You have no rights to post comments