202.3 Gerenciadores de Boot alternativos
Vamos conhecer outros tipos de Bootloaders que temos disponível para Linux. O Grub é o principal Bootloader hoje em dia, mas existem outros e alguns deles possuem finalidades bem específicas.
SYSLinux
O SYSLINUX é um conjunto de bootloaders desenvolvido especificamente para sistemas Linux que utilizam sistemas de arquivos FAT. Ele é muito útil em contextos onde se deseja inicializar sistemas operacionais a partir de mídias removíveis como disquetes, CDs, pendrives ou via rede (PXE).
O pacote SYSLINUX inclui diferentes variantes especializadas para ambientes, como veremos abaixo. O SYSLINUX (propriamente dito), foi projetado para discos com sistema de arquivos FAT, geralmente usado em mídias como pendrives.
EXTLinux
O EXTLinux é uma das variantes do pacote SYSLINUX, projetado para funcionar com sistemas de arquivos comuns em Linux, como ext2, ext3, ext4, btrfs, XFS, e até FAT. Diferente do SYSLINUX tradicional, que depende de sistemas FAT, o EXTLinux permite usar o bootloader em partições padrão de sistemas Linux, tornando-o adequado para discos rígidos e não apenas mídias removíveis.
Ele oferece uma estrutura modular e simples, onde o carregamento do kernel e o repasse de parâmetros ocorrem via arquivos de configuração como o extlinux.conf
, geralmente localizado em /boot/extlinux/
. A configuração é direta e lembra muito o estilo do LILO, com linhas definindo o kernel, initrd e os parâmetros de boot.
ISOLinux
O ISOLINUX é uma das variantes mais conhecidas do pacote SYSLINUX, projetada especificamente para ser usada em sistemas de arquivos ISO 9660, ou seja, em CDs, DVDs e imagens .iso
bootáveis. Ele é amplamente utilizado na criação de mídias de instalação de distribuições Linux.
O ISOLINUX é mencionado como uma das alternativas ao GRUB para ambientes de boot específicos, especialmente útil quando o objetivo é inicializar um sistema diretamente de um CD/DVD ou de uma imagem .iso
gravada em mídia removível.
O ISOLINUX opera com base em um conjunto mínimo de arquivos:
- O binário do bootloader, normalmente chamado
isolinux.bin
- O arquivo de configuração, chamado
isolinux.cfg
- Os arquivos do kernel (
vmlinuz
, por exemplo) e, se necessário, oinitrd
Um exemplo básico de isolinux.cfg
seria:
DEFAULT linux
LABEL linux
KERNEL /boot/vmlinuz
APPEND initrd=/boot/initrd.img root=/dev/sr0 ro quiet
Esse arquivo define qual kernel será carregado, quais parâmetros passar, e se há um initrd
(ramdisk) a ser incluído. O DEFAULT
define a entrada de boot padrão.
Para preparar uma imagem bootável com ISOLINUX, normalmente usamos a ferramenta mkisofs
ou xorriso
com parâmetros específicos para incluir isolinux.bin
como carregador inicial.
PXELinux - Pre-Execution Environment
É um Bootloader usado para fazer o boot de sistemas via Rede. Para que isso funcione, a placa de rede deve fornecer suporte a esse tipo de Bootloader, a configuração no cliente é feita via BIOS ou UEFI. O carregador de boot é enviado via rede ao cliente (pxelinux.0
).
Para usar o PXELinux algumas aplicações precisam funcionar em conjunto, essas aplicações são (obrigatóriamente): DHCP e TFTP.
O cliente vai inicializar via Rede e então obter um endereço IP (via DHCP), no meio das informações oferecidas pelo DHCP teremos também quem será o servidor TFTP para que o cliente possa baixar o bootloader (pxelinux.0
).
O PXELinux trabalha com 2 arquivos principais e normalmente esses arquivos ficam em /tftpboot/
(mas isso pode e provavelmente vai mudar), os arquivos são:
pxelinux.0
É o Bootloader usado.
pxelinux.cfg
Dependendo do tipo de configuração é um diretório que vai abrigar arquivo(s) de configuração do pxelinux.
Veja o link para ver como instalar/configurar um servidor PXELinux.
UEFI Secure Boot
Com o UEFI Secure Boot, o firmware UEFI só permite inicializar executáveis EFI assinados digitalmente com chaves autorizadas. No Linux, o processo geralmente começa com o carregamento do bootloader assinado shim.efi
(ou shimx64.efi
para sistemas x64), que contém uma chave assinada pela Microsoft (presente na maioria dos firmwares UEFI).
O shim
verifica a assinatura do próximo componente na cadeia de boot, normalmente o grubx64.efi
. O GRUB, por sua vez, carrega apenas kernels também assinados digitalmente (por exemplo, vmlinuz
com assinatura embutida ou acompanhada de .sig
).
O uso de kernels e bootloaders assinados protege contra a injeção de código malicioso no processo de boot, dificultando que um invasor inicialize um kernel modificado com funcionalidades indesejadas, como rootkits persistentes ou controle de hardware.
A maioria dos firmwares UEFI (em notebooks, servidores, desktops) vêm de fábrica com uma chave pública da Microsoft embutida na UEFI (conhecida como Microsoft UEFI CA). Para que um bootloader seja aceito pelo Secure Boot nesses sistemas, ele precisa estar assinado com a chave privada correspondente, ou seja, precisa ser reconhecido pela CA da Microsoft.
Como os fabricantes de hardware não adicionam chaves específicas de distribuições Linux, as distros optaram por uma solução prática:
O projeto Shim é um pequeno bootloader assinado pela Microsoft. Ele é mantido por desenvolvedores da comunidade Linux e por distribuições como Fedora, Ubuntu e Debian. Como o shim.efi
tem assinatura reconhecida pela firmware (por causa da chave da Microsoft), ele é aceito pelo Secure Boot. O shim
então verifica e carrega o GRUB (ou outro bootloader), e este por sua vez carrega o kernel, todos esses, também assinados com uma chave conhecida do shim
.
As distribuições gerenciam sua própria infraestrutura de chaves, e o shim
conhece essas chaves internas, mas ele só entra em cena porque foi assinado pela Microsoft, permitindo iniciar a cadeia de confiança.
SystemD-Boot
O systemd-boot é um bootloader leve e moderno, voltado exclusivamente para sistemas com UEFI. Ele faz parte do próprio systemd e se destaca pela simplicidade, velocidade e fácil integração com ferramentas como bootctl
. Usa arquivos de configuração simples em /boot/loader/
.
Não funciona com BIOS e só carrega kernels no formato EFI (*.efi
).
U-Boot (The Universal Boot Loader)
O U-Boot (Universal Bootloader) é um bootloader altamente configurável e voltado principalmente para sistemas embarcados, como dispositivos ARM (por exemplo, placas como BeagleBone, Raspberry Pi [modelos antigos], i.MX, etc). Diferente do GRUB, SYSLINUX ou systemd-boot, que são usados principalmente em servidores ou desktops, o U-Boot é pensado para dispositivos com hardware mais restrito e configurações muito específicas.
O U-Boot é uma alternativa de bootloader, especialmente em sistemas UEFI e embarcados. Mas assim como o systemd-boot
, o LPIC-2 apenas exige conhecimento da existência e do propósito geral do U-Boot, você não precisa saber como configurá-lo em detalhes para a prova.