我正在尝试以非 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
涉及组成员身份(以便可以打开设备)和二进制功能。