Debian buster/sid でdmesgを一般ユーザで実行

※この方法だと全ユーザで dmesg が実行できてしまうので sudo を使ってグループを制限する次の方法のほうがいいかもしれない．

特定グループでのみ dmesg command を有効にする – matoken’s meme

Debian buster arm64 環境を作りました( Raspberry Pi 3 Model B の USB起動で Debian buster arm64 を動かす – matoken’s meme )が，dmesg でエラーとなります．sudo dmesg は動く．

$ dmesg
dmesg: read kernel buffer failed: Operation not permitted
$ LC_MESSAGES=ja_JP.UTF-8 dmesg
dmesg: read kernel buffer failed: 許可されていない操作です

そういえば以前 Debian sid amd64 でも起こった現象です．
Debian では Linux 4.8.0 から仕様が変わってroot 以外ではdmesg が読めないようになっています．log file の読める adm group のユーザも駄目．
これは kernelパラメータの kernel.dmesg_restrict で設定されていて以下のようなコマンドで確認できます．

$ sudo sysctl -a|grep dmesg
kernel.dmesg_restrict = 1
$ cat /proc/sys/kernel/dmesg_restrict
1

これを 1 から 0 に変更することで以前と同じ動作となります．sysctl コマンドや，

$ sudo sysctl -w kernel.dmesg_restrict=0

/proc/sys/kernel/dmesg_restrict を直接書き換えることで一時的に変更できます．

echo 0 | sudo tee /proc/sys/kernel/dmesg_restrict

動きました．

$ id | grep -o adm
$ echo hello | sudo tee /dev/kmsg
hello
[ 562.152729] hello
$ dmesg -H | tail
[ +0.019933] brcmfmac mmc1:0001:1: firmware: failed to load brcm/brcmfmac43430-sdio.clm_blob (-2)
[ +0.020182] firmware_class: See https://wiki.debian.org/Firmware for information about missing firmware
[ +0.020886] brcmfmac mmc1:0001:1: Direct firmware load for brcm/brcmfmac43430-sdio.clm_blob failed with error -2
[ +0.021916] brcmfmac: brcmf_c_process_clm_blob: no clm_blob available (err=-2), device may have limited channels available
[ +0.026818] brcmfmac: brcmf_c_preinit_dcmds: Firmware: BCM43430/1 wl0: Oct 23 2017 03:55:53 version 7.45.98.38 (r674442 CY) FWID 01-e58d219f
[ +0.077925] systemd-udevd[376]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
[ +0.537137] EXT4-fs (sda2): re-mounted. Opts: (null)
[ +2.001639] smsc95xx 1-1.1:1.0 eth0: hardware isn't capable of remote wakeup
[ +1.563625] smsc95xx 1-1.1:1.0 eth0: link up, 100Mbps, full-duplex, lpa 0xCDE1
[Mar 2 05:58] hello

再起動すると元に戻ってしまうので，/etc/sysctl.d/local.conf などに設定を書いてくと次回起動時以降も反映されます．

$ sudo install -m 644 -o root -g root /dev/null /etc/sysctl.d/local.conf
$ echo 'kernel.dmesg_restrict = 0' | sudo tee -a /etc/sysctl.d/local.conf
kernel.dmesg_restrict = 0

試した環境

$ dmesg --version
dmesg from util-linux 2.33.1
$ dpkg-query -W util-linux linux-image-*
linux-image-4.19.0-2-arm64 4.19.16-1
linux-image-4.19.0-2-arm64-unsigned
linux-image-arm64 4.19+102
util-linux 2.33.1-0.1
$ lsb_release -dr
Description: Debian GNU/Linux buster/sid
Release: testing
$ uname -a
Linux rpi3 4.19.0-2-arm64 #1 SMP Debian 4.19.16-1 (2019-01-17) aarch64 GNU/Linux
$ cat /proc/device-tree/model ;echo
Raspberry Pi 3 Model B Rev 1.2

dmesg – Debian Wiki