我正在遵循一个在启动时自动解密硬盘驱动器的指南,使用自生成的密钥和 tpm2 变量,接近尾声时,它使这一点似乎有意义:https://blastrock.github.io/fde-tpm-sb.html#disable-the-magic-sysrq-key
神奇的 SysRq 键允许运行一些特殊的内核操作。默认情况下,最危险的功能是禁用的,您应该保持这种状态以获得最大的安全性。
例如,其中之一 (f) 将调用 OOM-killer。此功能可能会杀死您的锁屏,从而使恶意用户能够完全访问您的桌面。
问题是我只找到了如何禁用全部sysrq 键,例如https://askubuntu.com/questions/911522/how-can-i-enable-the-magic-sysrq-key-on-ubuntu-desktop或者https://askubuntu.com/questions/11002/alt-sysrq-reisub-doesnt-reboot-my-laptop,使用/etc/sysctl.d/90-sysrq.conf
以下行添加文件:
kernel.sysrq=1
我希望如果可能的话能够使用所有其他键,例如 REISUB,以防系统崩溃,并且只禁用该F
键。
我还找到了这篇文章https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html,其中提到添加一个位掩码,例如:
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
但我不明白如何仅禁用 sysrq-f,而将所有其他键设置为其默认值。
我的笔记本电脑(debian 12)上的当前设置如下:
$ 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
答案1
如果自启动以来(包括在 initramfs 中)没有任何进程写入内容/proc/sys/kernel/sysrq
(可能通过命令),则默认值将按照内核编译时的配置进行。sysctl
您可以通过以下方式找到答案:
$ grep -i sysrq "/boot/config-$(uname -r)"
CONFIG_MAGIC_SYSRQ=y
CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x01b6
CONFIG_MAGIC_SYSRQ_SERIAL=y
CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE=""
对我来说(在 Debian 上也是如此),它是默认启用的,但使用 0x01b6,即 438 或 0b110110110 作为面具。
要检查当前值:
$ cat /proc/sys/kernel/sysrq
438
$ sysctl kernel.sysrq
kernel.sysrq = 438
那是 2|4|16|32|128|256 所以:
2 = 0x2 - enable control of console logging level
4 = 0x4 - enable control of keyboard (SAK, unraw)
16 = 0x10 - enable sync command
32 = 0x20 - enable remount read-only
128 = 0x80 - allow reboot/poweroff
256 = 0x100 - allow nicing of all RT tasks
所以除了:
8 = 0x8 - enable debugging dumps of processes etc.
64 = 0x40 - enable signalling of processes (term, kill, oom-kill)
您可以检查位掩码的哪一位允许哪个键输入drivers/tty/sysrq.c
在内核源代码中。
f被允许SYSRQ_ENABLE_SIGNAL
和值 0x0040,即上面的 64,毫不奇怪。
该位还控制e(结束所有任务)、j(解冻所有冻结的 FS)、i(杀死所有任务)。
因此不可能启用除 之外的所有内容f。您能做的最好的e事情就是f通过将446写入.ijcltpwzm/proc/sys/kernel/sysrq
但是,只有在调试某些与内核相关的问题时,您会失去对计算机的 shell 访问权限,或者没有非管理员能够物理访问连接到计算机的键盘或串行线,我才会偏离更安全的 438 默认值。
还请注意sysrq_always_enabled
绕过所有限制的内核命令行参数。