dmesg:读取内核缓冲区失败:权限被拒绝

mal*_*lat 33 linux debian sysctl dmesg

由于最近 Debian 更改了默认行为dmesg,我不能简单地从本地用户使用它。

% dmesg
dmesg: read kernel buffer failed: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

同样适用于:

% cat /dev/kmsg                      
cat: /dev/kmsg: Operation not permitted
Run Code Online (Sandbox Code Playgroud)

以错误跟踪器为主角,这导致:

如何将此行为改回前一个行为,其中允许本地用户使用 dmesg。我找不到它的特定组(例如 sudoers 或类似的东西)。

mal*_*lat 49

所以这实际上是微不足道的,看看错误报告中的最后一条消息:

来自上述内核的部分变更日志: * security,printk: Enable SECURITY_DMESG_RESTRICT,防止非root用户默认读取内核日志(sysctl:kernel.dmesg_restrict)

所以解决方案只是运行一次:

% sudo sysctl kernel.dmesg_restrict=0
kernel.dmesg_restrict = 0
Run Code Online (Sandbox Code Playgroud)

然后您的本地用户可以dmesg再次开始使用。这适用于任何用户,而不是我最初假设的组。

一切都回到了我想要的样子:

% dmesg|wc
   1307   11745   93652
Run Code Online (Sandbox Code Playgroud)

% cat /dev/kmsg|head|wc
     10      82     857
Run Code Online (Sandbox Code Playgroud)

为了让它在重新启动后仍然存在,只需将其保存为 conf 文件:

$ cat /etc/sysctl.d/10-local.conf 
kernel.dmesg_restrict = 0
Run Code Online (Sandbox Code Playgroud)

  • 通过将 `kernel.dmesg_restrict = 0` 添加到 `/etc/sysctl.conf` 更容易使其永久化 (2认同)
  • 在 Ubuntu 20.10 中,`/etc/sysctl.d/10-kernel-hardening.conf` 中已经有一行。更改文件后,用户应运行“sudo service procps restart”以允许再次查看 dmesg。 (2认同)