我有点知道答案,但我想知道的是实现细节:假设 root 已登录,并且我们有一个权限为 000 的文件。然后 root 可以写入和读取该文件。但我的问题是,这是如何实现的。它是否遵循通常的规则(所有者、组、其他;rwx),或者系统是否查看用户并说,好吧,这是 root,所以他拥有读取、写入、执行任何文件的特权?
我问这个问题是因为我正在编写一个rest-api应用程序,它模仿unix中的文件和用户(例如/galois/home/gauss的url被视为unix目录,而例如/galois/home/gauss/iris的url被视为unix目录)。 pfa 在 unix 中被视为(可执行)文件有关更多详细信息,请参阅此处的自述文件:https://github.com/orgesleka/unix-acl-sql)。现在我的问题是,我是否可以从 unix 的通常 acl 中推断出 root 是有特权的,或者我是否必须对此进行“硬编码”?
答案1
您无法使用 ACL 机制来推断这一点。您必须对旁路进行编码。
在某些操作系统内核代码库中,您会发现
如果(suser())或到处都有类似的测试。 (来自 OpenBSD 的示例) 这是一个测试相关进程的有效用户ID是否为零的函数。
在其他操作系统内核代码库中,您会发现它被替换为针对一组位标志的检查特权一组凭证所拥有的。 (来自 FreeBSD 的示例)但同样的考虑也适用:如果拥有特权,则会绕过访问检查,并且必须对显式绕过检查进行编码。
这两种模型都不是为了复制而复制的,尤其是面向 WWW 的代码。最好将这两个想法(即单个独特的魔法用户 ID 的想法和用户帐户可以拥有的魔法标志的想法)从您的设计和代码中保留下来。
同样,3 位权限模型也不是一个值得复制的模型。看看 NFS 风格的 ACL,其中标志不承担旧 3 位模型中的双重职责。现在它们已经存在了几十年了。