【问题标题】:open /dev/mem - Operation not permitted打开 /dev/mem - 不允许操作
【发布时间】:2014-03-13 05:24:13
【问题描述】:

我正在开发 ubuntu。

我正在尝试打开 /dev/mem 并收到 permission denied

int32_t open_memdev()
{
        int32_t fd;

        fd = open("/dev/mem", O_RDONLY);
        if (fd < 0) {
                printf("Failed to open /dev/mem : %s\n", strerror(errno));
                return-EINVAL;
        }

        return fd;
}

这段代码总是打印"Failed to open /dev/mem : Operation not permitted"

我在 SO 上搜索过这个

  1. access-permissions-of-dev-mem

  2. accessing-mmaped-dev-mem

这些q似乎在讨论无法访问1 MB以上的问题,但我的问题是我什至无法打开一次。

如果有帮助,请提供其他详细信息:

1) 我检查了配置是否启用了 CONFIG_STRICT_DEVMEM。

2) ls -l /dev/mem
crw-r----- 1 root kmem 1, 1 2014-03-13 13:57 /dev/mem

如果需要更多信息,请告诉我。

【问题讨论】:

  • 你的"id"是什么,你是root吗?
  • @osgx 我澄清了这个 Q 是你提到的那个的副本。请您查看我的问题中的那部分。不,我不是根。有了root,我可以阅读。我想以普通用户身份阅读而不是root
  • @Manty 你不能。这就是权限的用途。
  • 请解释一下为什么需要用普通的id访问/dev/mem ....

标签: c linux memory-management


【解决方案1】:

如果您不是root,则无法读取/dev/mem

普通应用程序没有理由访问/dev/mem,即物理 RAM,因为应用程序在虚拟内存中运行!

如果您更改/dev/mem 的权限以启用它(您不应该),您将在您的系统中打开一个巨大的安全漏洞。只有受信任的根进程才能访问/dev/mem。见mem(4)

(如果需要,您可以使用setuid 技术,或者使用sudo 运行您的程序)

如果您需要在其他processaddress space 中访问virtual memory,请考虑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/…
猜你喜欢
  • 2018-06-07
  • 2017-12-06
  • 1970-01-01
  • 2017-03-20
  • 2021-08-18
  • 1970-01-01
  • 2022-07-18
  • 2022-11-08
  • 2016-01-29
相关资源
最近更新 更多