在setuid根程序中,如何检查当前用户(该root用户是否正在工作)拥有一个文件?

时间:2015-08-01 05:53:00

标签: linux permissions setuid

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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