AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 760670
Accepted
user000001
user000001
Asked: 2023-11-05 15:32:18 +0800 CST2023-11-05 15:32:18 +0800 CST 2023-11-05 15:32:18 +0800 CST

禁用 sysrq f (OOM-killer) 但保留其他 sysrq 键可操作

  • 772

我正在遵循一个在启动时自动解密硬盘驱动器的指南,使用自生成的密钥和 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
out-of-memory
  • 1 1 个回答
  • 203 Views

1 个回答

  • Voted
  1. Best Answer
    Stéphane Chazelas
    2023-11-05T17:29:44+08:002023-11-05T17:29:44+08:00

    如果自启动以来(包括在 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就是通过i将446写入. _jcltpwzm/proc/sys/kernel/sysrq

    但是,只有在调试某些与内核相关的问题时,您会失去对计算机的 shell 访问权限,或者没有非管理员能够物理访问连接到计算机的键盘或串行线,我才会偏离更安全的 438 默认值。


    还请注意sysrq_always_enabled绕过所有限制的内核命令行参数。

    • 6

相关问题

  • 是否可以为永远在线的紧急控制台预留资源?

  • 安装 MX Linux 期间系统内存不足

  • 是否有库调用或系统调用来设置 /proc/self/oom_score_adj?

  • OOM Killer 内存统计报告中的缩写是什么意思?

  • 为什么 linux out-of-memory (OOM) 杀手不能自动运行,而是在 sysrq-key 上运行?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve