dmesg のアクセス制限を外す方法

dmesg を実行するとエラーが出る場合があります

$ dmesg 
dmesg: read kernel buffer failed: 許可されていない操作です

これは,Linuxカーネルの設定でアクセス制限を掛けているためです.

アクセス制限の設定

アクセス制限を外すには sysctl を使います./etc/sysctl.d/dmesg.conf というファイルを作成して以下の内容を書きます

kernel.dmesg_restrict=0

restrict (制限)を無効にする場合は"0"を設定します.有効にする場合は"1"です.

/etc/sysctl.d 以下の設定ファイルはシステム起動時に /sbin/sysctrl が自動で読み込みます.
設定を反映させるには,システムを再起動するか,root権限で以下のコマンドを実行します.

$ sudo /sbin/sysctl --system

アクセス制限のデフォルト設定

kernel.dmesg_restrictのデフォルト値は,カーネルのビルド時に決定されます.設定は CONFIG_SECURITY_DMESG_RESTRICT です.

動作のしくみ

Linuxカーネルソースコードを読んで動作の仕組みをしらべてみました.長くなったので別記事にしています

pyopyopyo.hatenablog.com