【问题标题】:In a setuid root program, how to check that the current user (that root is doing the work for) owns a file?在 setuid root 程序中,如何检查当前用户(该 root 正在为其工作)是否拥有文件?
【发布时间】:2015-08-01 05:53:00
【问题描述】:

用例是一个挂载工具,我想将挂载(unionfs(r+x dir, squashfs))限制为调用者拥有的文件。

我知道 fusefs,但我想在内核中使用 overlayfs 和 squashfs。

【问题讨论】:

  • 不要把你的问题放在标题里。

标签: linux permissions setuid


【解决方案1】:

只要您还没有调用setuid()setreuid(),您就可以使用getuid() 来获取执行您的程序的用户的用户ID。完成后,您可以使用 stat() 获取文件的所有者。

或者,您可以使用access() 系统调用来检查用户是否可以读取、写入和/或执行指定路径。 access() 使用的是真实用户 ID,而不是有效用户 ID,因此不会使用 root 的权限来执行此访问检查。

在任何一种情况下,请注意不要在此检查中引入检查时间/使用时间 (TOCTOU) 漏洞。请记住,路径指向的对象可能随时更改,即使在您的应用程序正在运行时也是如此。符号链接在这里特别危险!

【讨论】:

  • 是的,我想我最终可能会使用保险丝。这东西很吓人。我读过最好在子程序中隔离需要操作的根并仔细否决其参数,但这可能会在这种情况下为 TOCTOU 引入另一个窗口,实际上,我不知道如何确定这样一个最小的程序只能被我的“有福”的人打电话。遗憾的是,将内核中更高效的文件系统用作普通 joe 用户的普通 joe 程序员是如此不切实际。
猜你喜欢
  • 1970-01-01
  • 2015-04-08
  • 2011-06-10
  • 1970-01-01
  • 2011-07-04
  • 2011-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多