上一篇文章介绍了有关您的文件权限的一些基础知识 Fedora 系统。 本期向您展示了使用权限管理文件访问和共享的其他方法。 它还建立在上一篇文章中的知识和示例的基础上,因此,如果您还没有阅读过那篇文章,请检查一下。
符号和八进制
在上一篇文章中,您看到了文件的三个不同权限集。 拥有文件的用户有一个集合,拥有该文件的组的成员有一个集合,最后一个集合是给其他人的。 这些权限使用符号模式在屏幕上以长列表 (ls -l) 的形式表示。
每套都有 r,w, 和 X 特定用户(所有者、组成员或其他)是否可以读取、写入或执行该文件的条目。 但是还有另一种表达这些权限的方式:在 八进制 模式。
你习惯了 十进制 编号系统,它有十个不同的值(0 到 9)。 另一方面,八进制系统有八个不同的值(0 到 7)。 在权限的情况下,八进制用作简写来显示 r,w, 和 X 字段。 将每个字段视为具有值:
- r = 4
- w = 2
- X = 1
现在您可以用单个八进制值表达任何组合。 例如,读取和写入权限,但没有执行权限,其值为 6。只有读取和执行权限的值为 5。文件的 rwxr-xr-x 符号权限的八进制值为 755.
您可以使用八进制值通过 chmod 命令设置文件权限,类似于符号值。 以下两个命令对文件设置相同的权限:
chmod u=rw,g=r,o=r myfile1
chmod 644 myfile1
特殊权限位
文件上还有几个特殊权限位可用。 这些被称为 设置 (或者 自杀), 设置标识 (或者 sgid) 和 粘性位 (或者 删除禁止)。 将其视为另一组八进制值:
- setuid = 4
- setgid = 2
- 粘性 = 1
这 设置 除非文件是可执行的,否则忽略该位。 如果是这种情况,则文件(可能是应用程序或脚本)会像由拥有该文件的用户启动一样运行。 一个好的 example setuid 是 /bin/passwd 实用程序,它允许用户设置或更改密码。 此实用程序必须能够写入不允许用户更改的文件。 因此,它是经过精心编写的,由 root 用户拥有,并且有一个 setuid 位,因此它可以更改与密码相关的文件。
这 设置标识 bit 对可执行文件的工作方式类似。 该文件将以拥有它的组的权限运行。 但是,setgid 还可以用于目录。 如果在具有 setgid 权限的目录中创建文件,则该文件的组所有者将设置为该目录的组所有者。
最后,粘性位虽然对文件忽略,但对目录很有用。 在目录上设置的粘性位将防止用户删除该目录中其他用户拥有的文件。
在八进制模式下使用 chmod 设置这些位的方法是添加一个值前缀,例如 4755 将 setuid 添加到可执行文件中。 在符号模式下, 你 和 G 可用于设置或移除 setuid 和 setgid,如 u+s,g+s. 粘性位是使用设置的 o+t. (其他组合,如 o+s 或者 u+t无意义且被忽略。)
共享和特殊权限
回想一下 example 来自上一篇关于需要共享文件的财务团队的文章。 可以想象,特殊权限位有助于更有效地解决他们的问题。 最初的解决方案只是创建了一个整个小组都可以写入的目录:
drwxrwx---. 2 root finance 4096 Jul 6 15:35 finance
此目录的一个问题是,同为财务组成员的用户 dwayne 和 jill 可以删除彼此的文件。 这对于共享空间来说并不是最佳选择。 它在某些情况下可能有用,但在处理财务记录时可能没有用!
另一个问题是这个目录中的文件可能不是真正共享的,因为它们将归默认组 dwayne 和 jill 所有——很可能是用户私有组也命名为 dwayne 和 jill。
解决此问题的更好方法是在文件夹上同时设置 setgid 和粘性位。 这将做两件事——使文件夹中创建的文件自动归财务组所有,并防止 dwayne 和 jill 删除彼此的文件。 这些命令中的任何一个都可以工作:
sudo chmod 3770 finance
sudo chmod u+rwx,g+rwxs,o+t finance
该文件的长列表现在显示应用的新特殊权限。 粘性位显示为 吨 并不是 吨 因为财务组以外的用户无法搜索该文件夹。
drwxrws--T. 2 root finance 4096 Jul 6 15:35 finance