![kmem 组成员对 /dev/mem 的非 root 读取访问失败](https://linux22.com/image/140669/kmem%20%E7%BB%84%E6%88%90%E5%91%98%E5%AF%B9%20%2Fdev%2Fmem%20%E7%9A%84%E9%9D%9E%20root%20%E8%AF%BB%E5%8F%96%E8%AE%BF%E9%97%AE%E5%A4%B1%E8%B4%A5.png)
我正在尝试以非 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
涉及组成员身份(以便可以打开设备)和二进制功能。