04 - Modo de Recuperação (break=premount, rd.break)
video: https://youtu.be/... no frontmatter da nota.A robustez de um sistema operacional de classe corporativa exige mecanismos resilientes para recuperação de desastres. No ecossistema Linux, falhas críticas durante a transição do bootloader para o sistema de arquivos raiz — como corrupção da tabela de partições, erros sintáticos no /etc/fstab, ou perda de chaves LVM/LUKS — resultam invariavelmente em um Kernel Panic (especificamente, a incapacidade de montar o rootfs ou executar o /init).
Para diagnosticar e remediar essas falhas, a arquitetura do initramfs implementa pontos de interrupção (breakpoints) programáveis. Através da injeção de parâmetros específicos na linha de comando do kernel (via GRUB), o administrador pode "sequestrar" o fluxo de execução normal do processo /init, forçando o sistema a suspender a inicialização e abrir um shell de emergência diretamente no ambiente efêmero da memória RAM, antes que o desastre ou o travamento ocorra.
1. A Filosofia da Interrupção no Espaço Precoce
É fundamental distinguir a recuperação via initramfs de outras formas de recuperação de sistema, como o modo single-user (systemd.unit=rescue.target ou 1) ou a substituição direta do processo init (init=/bin/bash).
- Quando passamos
init=/bin/bash, o kernel ainda é obrigado a montar o disco físico real com sucesso; se a falha for na controladora de disco ou no LVM, este comando é inútil, pois o kernel não consegue alcançar o binário dobash. - Os parâmetros do
initramfs(break,rd.break) agem antes do toque no disco físico. Eles invocam um shell contido na própria imagemcpio(geralmente provido pelo BusyBox), garantindo acesso irrestrito de depuração, independentemente do estado catastrófico do armazenamento persistente.
Esses pontos de interrupção são implementados como instruções de verificação dentro dos scripts em shell (ou binários) que compõem o /init. Ao identificar a diretiva na linha do kernel (analisada a partir de /proc/cmdline), o script suspende a chamada das funções subsequentes e invoca uma sessão de terminal no /dev/console.
2. O Paradigma Debian / Ubuntu (break=)
Em sistemas cujos ambientes de inicialização são gerados pelo mkinitramfs (família Debian), o parâmetro manipulador é a diretiva break. O administrador pode especificar exatamente em qual microssistema lógico a interrupção deve ocorrer.
A sintaxe no GRUB adicionada ao final da linha que inicia com linux é: break=<estágio>
Os estágios cronológicos disponíveis são:
top: O ponto mais precoce possível. Ocorre imediatamente após o kernel lançar o/init. Nem mesmo oudevfoi iniciado. Útil apenas para depurar a carga do próprioinitramfs.modules: Interrompe após o carregamento inicial dos módulos estritos necessários, mas antes da ativação do gerenciador de dispositivos.premount: (O mais comum e útil). A interrupção ocorre após o carregamento dos drivers (controladoras AHCI, NVMe) e após o processamento doudev, mas estritamente antes de qualquer tentativa de montar o sistema de arquivos raiz real. Neste ponto, os dispositivos de bloco físicos (como/dev/sda1) já existem, permitindo que o administrador executefsck, ative volumes lógicos manualmente ou corrija problemas de criptografia sem que os discos estejam "ocupados" (busy).mount: Interrompe o processo imediatamente após a montagem da raiz real no diretório de transição (/rootou/sysroot), mas antes de processar hierarquias adicionais (como/usr).mountroot: Disparado caso o script de montagem da raiz falhe. Se oinitramfsnão conseguir achar o disco por um erro de UUID, ele automaticamente cai neste ponto de break.bottom: Interrompe no último milissegundo antes da invocação do utilitáriorun-init(que realiza oswitch_roote apaga a memória RAM).
Ao sair do shell do initramfs (executando exit ou Ctrl+D), o script retoma seu fluxo normal de onde parou, tentando finalizar o processo de inicialização com as correções aplicadas pelo administrador.
3. O Paradigma RHEL / Fedora / SUSE (rd.break)
Sistemas que utilizam o gerador dracut possuem uma abordagem ainda mais granular, guiada por eventos (event-driven), através do parâmetro rd.break.
Se o parâmetro for passado isoladamente (rd.break), ele padroniza para o estágio pre-pivot (imediatamente antes de entregar o controle ao disco real). Contudo, pode-se especificar o ponto exato com a sintaxe rd.break=<estágio>.
Estágios de interrupção no dracut:
cmdline: Antes dodracutler as opções do kernel ou iniciar processos, servindo para alterar a configuração da lógica do próprio script interno.pre-udev: Antes dosystemd-udevd(embutido no initramfs) iniciar a varredura do barramento PCIe/USB.pre-trigger: O daemon udev está rodando, mas ainda não injetou os eventos de frio (coldplug events) que forçam o carregamento dos.ko.initqueue: O ponto onde odracutaguarda todos os dispositivos de bloco (SATA, UUIDs requisitados) aparecerem e estabilizarem.pre-mount: Semelhante aopremountdo Debian, o hardware está estabilizado, mas a montagem não começou.mount: Após o sistema de arquivos alvo (/sysroot) ser montado.pre-pivot: (Alvo primário de recuperação administrativa). A raiz já foi descoberta e montada em modo somente leitura (RO) no/sysroot. Este é o local exato para redefinir senhas, pois o sistema de arquivos já está exposto, bastando remontá-lo.cleanup: Imediatamente antes de invocar o binárioswitch_rootfinal.
4. O Ambiente de Shell Restrito e Volátil
Independentemente da distribuição, o administrador será saudado com um prompt primitivo (frequentemente (initramfs) ou sh-5.1#). Este ambiente exige perícia técnica aguçada, dadas as suas severas restrições arquiteturais:
- Ausência da Glibc Completa: Os binários dependem de bibliotecas mínimas. Ferramentas como o
awkougreppossuem funcionalidades reduzidas (são frequentemente applets do BusyBox). - Sem Resolução de Nomes: A rede geralmente não está configurada e não há
/etc/resolv.conf. - Volatilidade Total: Qualquer arquivo criado na raiz
/deste ambiente é armazenado na memória RAM (viatmpfs) e será completamente aniquilado no instante em que o sistema executar oswitch_root. Correções permanentes devem ser aplicadas nos dispositivos físicos (ex:/dev/sda1ou/sysroot/etc/). - Variáveis de Ambiente Mínimas: Não há
$PATHrobusto, requerendo frequentemente invocações por caminhos absolutos (/usr/sbin/lvm,/sbin/cryptsetup).
5. Fluxos de Trabalho de Recuperação Avançada (Use Cases)
A manipulação dos estágios de break possibilita o reparo profundo da máquina. Abaixo são detalhados os dois fluxos primários de engenharia de recuperação.
Caso 1: Redefinição de Senha do Root (Bypassing SysAdmin Lockout)
Este é o fluxo clássico empregado em servidores RHEL/CentOS.
- No menu do GRUB, edita-se a linha do kernel anexando:
rd.break. - O sistema interrompe no estágio
pre-pivot. A raiz física real está montada em/sysroot, porém comoro(somente leitura). - O administrador remonta a raiz com permissão de escrita e leitura:
mount -o remount,rw /sysroot
- Aplica-se o comando de isolamento
chrootpara alterar a raiz lógica da sessão de terminal atual para dentro do disco físico:
chroot /sysroot
- Agora operando virtualmente dentro do sistema real, o administrador altera a senha com o comando
passwd root. - A Armadilha do SELinux: A modificação do
/etc/shadowa partir de um ambiente que não carrega as políticas ativas do SELinux deixará o arquivo com contextos de segurança incorretos, o que impedirá o login futuro. É obrigatório agendar a reetiquetagem estática do sistema (autorelabeling) instruindo o processo PID 1 posterior:
touch /.autorelabel
- Executa-se
exitduas vezes (uma para sair dochroot, outra para sair do shell do initramfs). O sistema retoma o boot.
Caso 2: Falha de Montagem por Corrupção no /etc/fstab
Se um disco secundário listado em /etc/fstab for fisicamente removido sem ser comentado no arquivo, o sistema se recusará a finalizar o boot, caindo em um estado de emergência cíclico.
- Utiliza-se
break=premountourd.break=pre-mount. - Como a raiz falhou ao montar, o administrador deve montá-la manualmente no ponto de transição:
mkdir -p /mnt/root
mount -t ext4 /dev/mapper/vg0-root /mnt/root
- Edita-se o arquivo defeituoso usando as ferramentas reduzidas (como o
vido BusyBox):
vi /mnt/root/etc/fstab
- Após deletar a linha problemática, o sistema é reiniciado ou a montagem é liberada para a retomada do fluxo.
6. Considerações Arquiteturais de Segurança (Threat Modeling)
A mera existência da funcionalidade de injeção de breakpoints demonstra um axioma inviolável da segurança de TI: acesso físico é igual a acesso de superusuário. A capacidade de anexar rd.break permite ignorar senhas locais, burlar restrições de PAM (Pluggable Authentication Modules) e ler dados do banco de dados em texto claro.
Para mitigar esta vulnerabilidade arquitetural em servidores e laptops de missão crítica, a infraestrutura exige uma sobreposição de tecnologias defensivas:
- Senhas no Bootloader (GRUB Password): Requer PBKDF2 (derivação de chave criptográfica) para bloquear qualquer tentativa de pressionar a tecla
e(edit) no menu do GRUB. Se o invasor não pode editar a linha do kernel, não pode injetar a stringrd.break. - Secure Boot e UEFI Locked: Impede que o invasor inicialize um kernel malicioso externo (via pendrive) para acessar os discos. Contudo, o Secure Boot tradicional confia no GRUB assinado, não protegendo contra a edição arbitrária da cmdline. Para proteção verdadeira da linha de comando, utiliza-se UKIs (Unified Kernel Images), onde a imagem do kernel, o
initramfse os parâmetros de cmdline são empacotados em um único binário e assinados digitalmente em bloco; qualquer adulteração na linha de comando invalida a assinatura UEFI. - FDE (Full Disk Encryption - LUKS): A linha de defesa absoluta. Mesmo que um invasor consiga aplicar o
rd.breake caia no shell doinitramfs, o disco físico/dev/nvme0n1p2exibirá entropia caótica (criptografada). Sem a senha de Volume Mestre ou acesso ao chip TPM, a montagem para leitura e a injeção do chroot são criptograficamente impossíveis, neutralizando o vetor de ataque doinitramfs.