Eu estava seguindo um guia para descriptografar automaticamente o disco rígido na inicialização, usando chaves autogeradas e variáveis tpm2, e perto do final ele destaca este ponto que parece fazer sentido: https://blastrock.github.io/fde- tpm-sb.html#disable-the-magic-sysrq-key
A chave mágica SysRq permite executar algumas ações especiais do kernel. Os mais perigosos estão desabilitados por padrão e você deve mantê-los assim para segurança máxima.
Por exemplo, um deles (f) invocará o OOM-killer. Esta função pode matar sua tela de bloqueio, dando acesso total à sua área de trabalho a um usuário mal-intencionado.
O problema é que só descobri como desabilitar todas as chaves sysrq, por exemplo https://askubuntu.com/questions/911522/how-can-i-enable-the-magic-sysrq-key-on-ubuntu-desktop ou https ://askubuntu.com/questions/11002/alt-sysrq-reisub-doesnt-reboot-my-laptop , usando algo adicionando um /etc/sysctl.d/90-sysrq.conf
arquivo com esta linha:
kernel.sysrq=1
Eu gostaria, se possível, de poder usar todas as outras chaves, por exemplo, REISUB, caso o sistema trave, e apenas ter a F
chave desativada.
Também encontrei este artigo https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html , que menciona a adição de uma máscara de bits como:
2 = 0x2 - enable control of console logging level
4 = 0x4 - enable control of keyboard (SAK, unraw)
8 = 0x8 - enable debugging dumps of processes etc.
16 = 0x10 - enable sync command
32 = 0x20 - enable remount read-only
64 = 0x40 - enable signalling of processes (term, kill, oom-kill)
128 = 0x80 - allow reboot/poweroff
256 = 0x100 - allow nicing of all RT tasks
mas não entendo como desabilitar apenas o sysrq-f e todas as outras chaves com seus valores padrão.
A configuração atual no meu laptop (debian 12) é a seguinte:
$ grep -IirF sysrq /etc/sysctl.*
/etc/sysctl.conf:# 0=disable, 1=enable all, >1 bitmask of sysrq functions
/etc/sysctl.conf:# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
/etc/sysctl.conf:#kernel.sysrq=438
$ grep -IirF sysrq /etc/sysctl.d/*
/etc/sysctl.d/99-sysctl.conf:# 0=disable, 1=enable all, >1 bitmask of sysrq functions
/etc/sysctl.d/99-sysctl.conf:# See https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html
/etc/sysctl.d/99-sysctl.conf:#kernel.sysrq=438
Na ausência de qualquer processo gravando algo
/proc/sys/kernel/sysrq
(possivelmente por meio dosysctl
comando) em qualquer ponto desde a inicialização (inclusive no initramfs)¹, o valor padrão será o configurado no momento da compilação do kernel.Você pode descobrir isso com:
Aqui para mim (também no Debian), está habilitado por padrão, mas com 0x01b6, que é 438 ou 0b110110110 como a máscara .
Para verificar o valor atual:
Isso é 2|4|16|32|128|256 então:
Então, tudo menos:
Você pode verificar qual parte da máscara de bits permite qual chave
drivers/tty/sysrq.c
no código-fonte do kernel .fé permitido
SYSRQ_ENABLE_SIGNAL
com valor 0x0040 , ou seja 64 acima sem surpresa.E esse bit também controla e(terminar todas as tarefas), j(descongelar todos os FS congelados), i(terminar todas as tarefas).
Portanto, não é possível ativar todos, exceto f. O melhor que você pode fazer é ativar todos, exceto e, f, i, jadicionando o bit 0x8 (SYSRQ_ENABLE_DUMP) que governa c, l, t, p, w, z, m(também bastante perigoso) ao padrão, escrevendo 446 em
/proc/sys/kernel/sysrq
.No entanto, eu só me desviaria do padrão 438 mais seguro ao depurar algum problema relacionado ao kernel em que você perde o acesso ao shell da máquina ou se nenhum não-administrador tiver acesso físico a um teclado ou linha serial conectada à máquina.
¹ observe também o
sysrq_always_enabled
parâmetro da linha de comando do kernel que ignora todas as restrições.