类Unix系统中的文件权限机制

类Unix系统中的文件权限机制

有人可以用一个例子解释Linux和其他类Unix系统中的文件权限机制吗?这九位有什么用?为什么我们有一个用户和文件的组 ID?这两个有关系吗?

答案1

所有权和访问权限基本上是协同作用的。所有权告诉系统WHO可以访问该文件,文件权限说如何

所有权将访问权限分为三组:用户(拥有该文件的单个用户)、组(用户)、其他人(世界其他地方)。

权限为: r- 允许读取,w- 允许写入,x- 允许执行

对于目录,含义略有不同:x允许您输入目录,同时r列出其内容(并w允许您更新它) - 这意味着,如果您知道确切的文件名,则不需要对其所在目录的读取权限中,x就够了。不过你需要r文件。

然后还有一个额外的位三元组:setuid、setgid、sticky。前两个导致(在可执行文件上)程序作为拥有该文件的用户/组运行(取决于设置了这两个位中的哪一个)。粘滞位取决于实现。对于可执行文件来说,它过去意味着程序代码应该缓存在交换区中,以加快下次加载速度。对于目录,它会阻止非特权用户删除不拥有该文件的文件,即使他们有权这样做 - 这就是为什么它通常设置在世界可写目录(例如/tmp.

除此之外,许多文件系统还支持额外的访问控制列表(ACL),它允许更细粒度的访问控制。这些可以使用getfacl/setfacl而不是使用 来访问chmod

附带说明一下,类似的权限系统通常是针对具有页面粒度的内存 (RAM) 实现的。主要目标是遵守“W^X”原则:要么可以写入内存,要么可以执行它,但不能同时执行两者。虽然通常是一个好主意,但它不适用于解释的即时编译代码 - 例如 Java,因为解释器需要编译/优化生成的代码(即编写页面)然后执行它,通常是增量式的(并且每次都更改权限没有多大意义)。

相关内容