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:root以外のユーザーがデフォルトでカーネルログを読み取るのを防ぐSECURITY_DMESG_RESTRICTを有効にします(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`

関連情報