我遇到了一个linux内核教程他们在那里讨论了 4 对标识符,其中一对是文件系统 uid 和 gid。
有人可以解释一下它是什么以及它与uid 和 gid?
答案1
谁会想到这个问题会拖出这么多过于自信和信息不足的回答!
这文件系统uid或者FSUID是一项旨在帮助 NFS 服务器实现的 Linux 功能。它是一个额外的(非 POSIX)uid,仅用于文件权限检查。对于任何不调用的进程setfsuid
(基本上是任何不尝试成为 NFS 服务器的进程),fsuid 与有效 uid 相同。
甚至还有一个手册页对于它,所以有借口声称它不存在。
更新:我受到启发去寻找fsuid的起源。当它被添加到 Linux 1.1.44 中时,这个注释被放在新sys_setfsuid
函数的上面:
+/*
+ * "setfsuid()" sets the fsuid - the uid used for filesystem checks. This
+ * is used for "access()" and for the NFS daemon (letting nfsd stay at
+ * whatever uid it wants to). It normally shadows "euid", except when
+ * explicitly set by setfsuid() or for access..
+ */
这一更改是在上面的评论中进行的sys_access
:
- * XXX we should use the real ids for checking _all_ components of the
- * path. Now we only use them for the final component of the path.
+ * access() needs to use the real uid/gid, not the effective uid/gid.
+ * We do this by temporarily setting fsuid/fsgid to the wanted values
所以NFS是最初的两个目的之一。另一个正在access
正确地工作。access
setuid 程序使用它来确定真实用户是否可以在没有 setuid 附加权限的情况下访问文件。在 1.1.44 之前,它是有问题的。从那时起,它一直使用临时更改的 fsuid 来完成这项工作。由于 fsuid 在access
系统调用返回之前恢复,因此您永远不会真正看到用户空间的更改。