【问题标题】:reading from /proc/pid/mem without sudoing the whole python script从 /proc/pid/mem 读取而无需 sudo 整个 python 脚本
【发布时间】:2021-03-27 07:20:09
【问题描述】:

我正在通过打开 /proc/pid/mem 从 python 脚本读取其他进程内存:

reader = open(f'/proc/{pid}/mem', 'rb')

然后从随机位置读取:

reader.seek(address, 0)
memory_content = reader.read(length)

一切都很好,但事实上,要打开 /proc/pid/mem 我必须 sudo 整个 python 脚本。当然,为了理智,我不想那样做。我有哪些选择?

  • 如果我理解正确,我不能sudo chmod /proc/pid/mem 允许所有人从该进程内存中读取(请纠正我,如果我错了)
  • 我不能 open 来自非 root python 脚本的具有 root 权限的单个文件(再次,如果我错了,请纠正我)

也许我可以创建某种指向 /proc/pid/mem 的硬链接,它看起来像一个不需要 root 访问权限即可读取的文件?

或者也许最简单的方法是创建一个代理程序,该程序将从具有 root 权限的实际 python 脚本运行,该程序将从 /proc/pid/mem 读取,并且我会以某种方式与它进行跨进程交互?

【问题讨论】:

  • 权限在inode本身,所有链接都使用同一个inode。
  • 你最后描述的代理方法可能是最好的方法。

标签: python linux file root


【解决方案1】:

你需要代理。

  • 您的硬链接方法不起作用,因为权限保持不变。
  • 即使您可以授予每个人对 proc/mem 的读取权限,您究竟能从中获得什么?从安全的角度来看,最好让你的整个脚本以 root 身份运行,并希望你做对了。至少有一个变化。通过打开记忆供所有人阅读,您将允许任何人从记忆中收获秘密,使其对所有人免费。所以绝对不是这个。

如果你最终做了代理,如果你想在 Python 中做,你当然需要 sudo 来运行它,但这会起作用。我已经用 C 语言编写了这样的帮助程序,并将它们设为 suid root - 但这是一个偏好问题。

【讨论】:

    猜你喜欢
    • 2014-02-24
    • 2014-10-01
    • 1970-01-01
    • 2011-06-01
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-01
    相关资源
    最近更新 更多