open /dev/mem - Operation not permitted
我正在研究ubuntu。
我正在尝试打开/dev/mem,并且正在获取permission denied
1 2 3 4 5 6 7 8 9 10 11 12 13
| int32_t open_memdev ()
{
int32_t fd ;
fd = open ("/dev/mem", O_RDONLY );
if (fd < 0) {
printf("Failed to open /dev/mem : %s\
", strerror(errno ));
return -EINVAL ;
}
return fd ;
} |
此代码始终打印"Failed to open /dev/mem : Operation not permitted"
我在SO
上搜索了此内容
dev-mem的访问权限
访问-mmaped-dev-mem
这些q似乎在讨论无法访问1 MB以上的问题,但是我的问题是我什至无法打开一次。
其他详细信息(如果有帮助的话):
1)我检查了配置是否启用了CONFIG_STRICT_DEVMEM。
1 2
| 2) ls -l /dev/mem
crw-r----- 1 root kmem 1, 1 2014-03-13 13:57 /dev/mem |
如果需要其他信息,请告诉我。
- 您的" id "是什么,您是root?
-
/ dev / mem的访问权限的可能重复
-
@osgx我澄清了这个问题的重点是您提到的那个问题的重复部分。请您看看我的问题中的那部分。不,我不是root。有了root我就能阅读了。我想以普通用户身份而不是以root身份阅读
-
@很多你不能。这就是权限的用途。
-
请解释为什么您需要从普通ID访问/dev/mem。
如果您不是root用户,则无法阅读/dev/mem。
由于应用程序在虚拟内存中运行,因此普通应用程序没有理由访问/dev/mem,即物理RAM!
如果更改/dev/mem的权限以启用该权限(不应这样做),则会在系统中打开一个巨大的安全漏洞。仅受信任的根进程应访问/dev/mem。参见mem(4)
(如果需要,可以使用setuid技术,或者使用sudo运行程序)
如果您需要在其他进程的地址空间中访问虚拟内存,请考虑使用proc(5)例如。 /proc/1234/mem用于pid 1234的处理。
- 好的,假设我要打开巨大的安全漏洞。如何设置dev / mem,以便每个用户都可以使用它? (我需要测试)
-
@Zibri:使用sudo以root身份运行您的程序,或将您的程序设置为setuid
-
我知道我正在寻找一种使/ dev / mem免费供所有人使用的方法(用于测试研究)。无论如何,我找到了。我只需要在mem.c中注释一行并添加return 0;反而。
-
由于某些原因,即使以root用户身份,我也无法打开它。
-
即使用户是root用户,对/ dev / mem的访问也经常受到其他限制,例如从SELinux的memory_device_t或从内核锁定(通常是从安全启动自动启动),请参阅github.com/torvalds/linux/commit/…