权限:修订间差异

来自tutorials.sdfcn.org - sdf中文html教程
跳转到导航 跳转到搜索
无编辑摘要
无编辑摘要
第199行: 第199行:
''user-classes  用户类别''
''user-classes  用户类别''


需要更改权限的用户类别。使用单字母类符号 <code>u</code>、<code>g</code>、<code>o</code> 或使用 <code>a</code> 指定所有类。可以指定多个类。
需要更改权限的用户类别。使用单字母类别符号 <code>u</code>、<code>g</code>、<code>o</code> 或使用 <code>a</code> 指定所有类。可以指定多个类。

2025年8月20日 (三) 05:48的版本

导言

Unix 是一个多用户操作系统。其设计初衷并非让所有人都能访问所有文件,而是允许文件所有者指定哪些用户应拥有何种访问权限。

权限

Unix 文件系统允许用户为其拥有的文件(包括目录:“在 Unix 中,一切皆为文件”)分配三种权限类型(rwx)的任意组合,适用于三类用户(ugo)。当用户请求访问文件时,Unix 首先确定请求者相对于目标文件的用户类别,然后检查所请求的权限类型是否已分配给该用户类别。

权限类型

三种权限类型的效果各不相同,取决于它们适用于文件还是目录。

类型 文件 目录
r 读取文件内容 列出目录中文件的名称、大小、修改日期等信息。 1
w 更改 (write) 文件内容。 从目录中添加或删除文件。2
x 如果在命令行中自行输入文件名,Shell 将尝试执行(execute)该文件。 访问(读取或写入)目录3或该目录及其子目录中的任何文件,或将该目录设置为用户的工作目录。
Notes:  备注
  1. 即使没有目录读取权限,只要指定了文件的完整名称,也可以获取文件信息。
  2. w 目录权限允许用户从目录中删除文件,即使用户对该文件本身没有 w(修改内容)权限。反之亦然:缺乏 w 目录权限的用户可能能够修改目录中文件的内容,但无法删除该文件。
  3. 不同实现对列出目录文件名所需的权限要求各不相同。SDF主机(运行NetBSD)在用户对目录具有r权限时会列出目录文件。其他实现则要求同时具备rx权限才能列出目录文件。

与其他一些文件系统(如NTFS)不同,目录的“读取”(r)或“写入”(w)权限不会影响该目录子树中任何子目录或文件的“读取”或“写入”权限。目录的“读取”或“写入”权限由系统为该目录分配给您的用户类所设定的权限决定,而不考虑文件系统树中更高层级目录的“读取”和“写入”权限。

然而,目录的x权限会影响目录子树中更深层目录和文件的权限。要访问一个文件,用户必须对该文件路径中的每个目录都拥有x权限。换句话说,如果某个目录缺乏x权限,实际上会阻止访问该目录子树中的任何文件。

用户类别

对于给定文件,Unix 文件系统将用户分为三类:

类别 用户
u User. 当前文件的所有者。
g Group. 该文件所属用户组的成员。
o Others. 不属于上述任何一类的用户。这是SDF的Web服务器在Web浏览器从您的网站请求文件时使用的用户类别。1
Notes:  备注
  1. 在网站上使用CGI程序会使权限检查变得复杂。对CGI程序文件本身的访问权限检查使用用户类 o 。许多Web服务器配置为对CGI程序发起的文件访问请求也使用用户类 o 进行检查。然而,SDF Web服务器已配置为使用程序文件所有者的权限执行CGI程序(对于您在SDF网站上安装的CGI程序,即您自己的权限)。因此,如果您的 CGI 程序访问您拥有的文件,权限将使用用户类 u 进行检查。不属于您的文件将使用用户类 o 进行检查。

举例说明

文件权限信息可以通过ls命令的长列表(long listing)选项获取:ls -l

drwxr-xr-x	2	papa	arpa	512	Sep 29 01:02	arpastuff
-rwxr-x---	1	papa	arpa	11402	Sep 29 01:02	hello
-rw-r-----	1	papa	arpa	13	Sep 29 01:02	hello.txt
      a           b       c

字段 a 表示文件模式,这是一个由十个单字符标志组成的字符串,用于指示文件的权限和其他信息。以下是按字符顺序排列的模式标志列表,以及每个标志可能的值的部分列表(partial list):

  1. 文件类型
    d
    目录
    -
    普通文件
  2. 文件所有者(用户组 u)的读取(r)权限.
    r
    -
  3. 文件所有者(用户组 u)的写入(w)权限.
    w
    -
  4. 文件所有者(用户组 u)的执行(x)权限.
    x
    -
  5. 文件用户组(用户组 g)的读取(r)权限.
    r
    -
  6. 文件用户组(用户组 g)的写入(w)权限.
    w
    -
  7. 文件用户组(用户组 g)的执行(x)权限.
    x
    -
  8. 其他用户(用户组 o)的读取(r)权限.
    r
    -
  9. 其他用户(用户组 o)的写入(w)权限.
    w
    -
  10. 其他用户(用户组 o)的执行(x)权限.
    x
    -

字段 b文件所有者的用户 ID。字段 c 是文件所属的用户组

因此,对于上述 ls 列出的三个文件:

目录arpastuff

        用户papa可以在arpastuff目录中列出、添加和删除文件,访问该目录的子目录结构,或将该目录设为工作目录。属于arpa组的用户及其他所有用户可以列出该目录中的文件,访问其子目录结构或将该目录设为工作目录,但无法添加或删除文件。

文件 hello

        用户 papa 可以读取或修改 hello 文件的内容,或从命令行执行该文件(文件内容为可能为可执行二进制文件或脚本)。arpa 组的用户可以查看或执行该文件,但无法修改它。其他用户无法访问该文件。

文件 hello.txt

        用户 papa 可以读取或修改 hello.txt 文件的内容。arpa 组中的用户可以查看该文件。其他用户无法访问该文件。

链接和权限

一般来说,上述讨论也适用于硬链接和符号链接。文件系统会自动维护链接,以确保链接与目标文件具有相同的有效权限。(对于符号链接,ls 命令会显示一个文件模式,其中所有用户类别的权限类型均已分配,但当通过链接请求文件访问时,将应用目标文件的权限。)

然而,在某些配置下,硬链接可以绕过目录 x 的权限限制。假设用户对文件 ./d1/f1 具有访问权限,而该文件在目录 d1 的子树之外有一个硬链接 ./h1。如果用户失去了对 d1x 权限,他将无法访问 ./d1/f1但仍可通过硬链接 ./h1 使用其原始权限访问同一文件

更改权限…

权限通过命令 chmod 更改:

chmod <permission-mode> <file-name>

让我们来看这个例子,

chmod 644 index.html

这个数字644代表什么?

…解释了

权限模式是九个文件模式权限标志的数字表示形式。如前所述,存在三种权限类型和三种用户类别。每个数字代表分配给特定用户类别的权限类型。

用户类别: u g o
权限代码: 6 4 4

每个用户类别的最终权限代码,是通过将该类别被授予的权限类型对应数值相加得出的:读权限(r)对应4,写权限(w)对应2,执行权限(x)对应1。

在上述示例中,我希望文件 index.html 对所有用户可读,但仅对我可写。因此权限代码应如下所示:

用户类别 权限类型 权限代码
u (我自己) r (4), w (2) 4 + 2 = 6
g (组) r (4) 4
o (其他) r (4) 4

因此:

chmod 644 index.html

即可!

…另一种方式

chmod 支持一种用于指定权限模式的替代语法,这种语法在一次更改一个或几个权限时更加方便,且比上文提到的数字模式编码稍易记忆。

<user-classes><operation><permission-types>[,<user-classes><operation><permission-types>]…

< 用户类别>< 操作>< 权限类型>[,< 用户类别>< 操作>< 权限类型>]…

user-classes  用户类别

需要更改权限的用户类别。使用单字母类别符号 ugo 或使用 a 指定所有类。可以指定多个类。