命令行快速提示:有关权限的更多信息

上一篇文章介绍了有关文件权限的一些基础知识 Fedora 系统。 本期文章向您展示了使用权限来管理文件访问和共享的其他方法。 它还建立在上一篇文章中的知识和示例的基础上,因此如果您还没有阅读那篇文章,请务必查看。

符号和八进制

在上一篇文章中,您看到了文件的三个不同权限集。 拥有该文件的用户有一个集合,拥有该文件的组的成员有一个集合,然后最后一个集合是给其他人的。 这些权限使用符号模式以长列表 (ls -l) 在屏幕上表示。

每套都有 r, w,X 特定用户(所有者、组成员或其他人)是否可以读取、写入或执行该文件的条目。 但是还有另一种方式来表达这些权限:在 八进制 模式。

你习惯了 十进制 编号系统,它有十个不同的值(0 到 9)。 另一方面,八进制系统有八个不同的值(0 到 7)。 在权限的情况下,八进制用作速记来显示 r, w,X 领域。 将每个字段视为具有值:

  • r = 4
  • = 2
  • X = 1

现在您可以用单个八进制值表示任意组合。 例如,读取和写入权限,但没有执行权限,其值为 6。读取和执行权限的值为 5。文件的 rwxr-xr-x 符号权限的八进制值为 755.

与符号值类似,您可以使用八进制值通过 chmod 命令设置文件权限。 以下两个命令对文件设置相同的权限:

chmod u=rw,g=r,o=r myfile1
chmod 644 myfile1

特殊权限位

文件上还有几个特殊权限位可用。 这些被称为 设置用户名 (或者 ), 设置标识符 (或者 sgid),以及 粘点 (或者 删除禁止)。 将此视为另一组八进制值:

  • 设置 id = 4
  • 设置标识符 = 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

相关阅读:

Posted in: LinuxTags: