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

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

由于最近 Debian 更改了默认行为dmesg,我无法仅从本地用户使用它。

% dmesg
dmesg: read kernel buffer failed: Operation not permitted

同样适用于:

% cat /dev/kmsg                      
cat: /dev/kmsg: Operation not permitted

在错误跟踪器中担任主角,这会导致:

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

答案1

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

上述内核的部分变更日志:

  • security,printk:启用SECURITY_DMESG_RESTRICT,默认防止非root用户读取内核日志(sysctl:kernel.dmesg_restrict)

所以解决方案很简单,运行一次:

% sudo sysctl kernel.dmesg_restrict=0
kernel.dmesg_restrict = 0

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

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

% dmesg|wc
   1307   11745   93652

% cat /dev/kmsg|head|wc
     10      82     857

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

$ echo kernel.dmesg_restrict = 0 | sudo tee -a /etc/sysctl.d/10-local.conf >/dev/null
$ cat /etc/sysctl.d/10-local.conf 
kernel.dmesg_restrict = 0

如果您使用的是 Ubuntu,则对于 20.10 版及更高版本,已经有一行可以在/etc/sysctl.d/10-kernel-hardening.conf.更改文件后,为了使更改生效,用户需要重新启动或运行sudo service procps restart.

答案2

这对我来说是这样的。

chown root `which dmesg` 
chmod u+s `which dmesg`

相关内容