kmem 组成员对 /dev/mem 的非 root 读取访问失败

kmem 组成员对 /dev/mem 的非 root 读取访问失败

我正在尝试以非 root 用户身份使用/dev/mem.检查以下权限/dev/mem

~/w/e/setup ❯❯❯ ls -lha /dev/ | grep mem
crw-r-----   1 root kmem        1,     1 Oct 15 09:29 mem

根据我的理解,应该允许该组的成员kmem阅读/dev/mem.我检查我的组成员身份:

~/w/e/setup ❯❯❯ groups
docker users video uucp kmem wheel autologin

当前用户是该组的成员kmem,因此我尝试从中读取一些内容/dev/mem

~/w/e/setup ❯❯❯ head /dev/mem | hexdump -C
head: cannot open '/dev/mem' for reading: Operation not permitted

令我惊讶的是,该手术是不被允许的。当我以 root 身份登录时,可以进行相同的操作。

/dev/mem有人可以解释一下,为什么我不能作为小组成员阅读kmem?如何/dev/mem为特定用户启用非 root 只读访问权限?

答案1

/dev/mem只能打开通过进程CAP_SYS_RAWIO; head,不以 root 身份运行,不具备该功能。您可以使用以下方法“修复”此问题setcap(但只能在二进制文件的副本上执行此操作...):

cp /usr/bin/head .
sudo setcap cap_sys_rawio+ep head
./head /dev/mem | hexdump -C

因此,启用特定用户的访问权限/dev/mem涉及组成员身份(以便可以打开设备)和二进制功能。

相关内容