Linux 文件所有权与权限设置指南
1. 文件所有权设置
在 Linux 系统中,文件所有权的管理是保障系统安全和数据访问控制的重要部分。下面将介绍如何在文件管理器和文本模式 shell 中设置文件所有权。
1.1 在文件管理器中设置所有权
以 GNOME 桌面默认的文件管理器 Nautilus 为例。若要更改文件所有者,需以 root 身份运行 Nautilus;若仅更改文件所属组,普通用户可将文件所属组更改为自己所在的组。以 root 身份更改所有权的步骤如下:
1. 打开终端窗口。
2. 在终端窗口中输入
su
以获取 root 权限。
3. 在终端窗口中输入
nautilus
启动 Nautilus。可选择指定 Nautilus 启动的目录路径,若不指定,Nautilus 将显示
/root
目录的内容。
4. 找到要调整所有权的文件并右键单击它。
5. 在弹出的菜单中选择“属性”,会弹出属性对话框。
6. 点击属性对话框中的“权限”标签。
7. 若要更改文件所有者,在“所有者”字段中选择新的所有者(此操作仅在以 root 身份运行 Nautilus 时可行)。
8. 若要更改文件所属组,在“组”字段中选择新的组。普通用户只能选择自己所在的组,而 root 用户可以选择任何组。
9. 调整完要更改的设置后,点击“关闭”。
若只想更改文件所属组而不更改所有者,且你是目标组的成员,可作为普通用户启动 Nautilus,然后从步骤 4 开始操作。如果你使用的是 Ubuntu 系统,可能需要使用
sudo
来启动 Nautilus。
需要注意的是,以 root 身份运行 Nautilus 时要格外小心。若忘记自己是以 root 身份运行,可能会以 root 身份创建新文件,这需要额外的 root 权限操作来更改文件所有权。此外,还可能意外删除关键系统文件,而普通用户无法进行此类删除操作。因此,建议使用文本模式 shell 来调整文件所有权,因为提示符的变化能让你更容易注意到自己是以 root 身份运行,且相比从 Nautilus 启动程序,从文本模式 shell 以 root 身份启动其他程序的可能性更小。
1.2 在 shell 中设置所有权
在文本模式 shell 中,可使用
chown
命令更改文件的所有权。其基本形式是在命令后依次跟上文件名和用户名,例如:
# chown bob targetfile.odf
此命令将
targetfile.odf
的所有权赋予用户
bob
。还可以使用冒号
:
分隔所有者和组名,通过一个命令同时更改文件的主要所有者和所属组,示例如下:
# chown bob:users targetfile.odf
该命令将
targetfile.odf
的所有权赋予
bob
,并将文件与
users
组关联。若只想更改组而不更改所有者,可省略所有者,只保留冒号和组名,如下:
$ chown:users targetfile.odf
另外,也可使用
chgrp
命令,它的作用与上述操作类似,但仅用于更改组,且在组名前不需要冒号:
$ chgrp users targetfile.odf
需要注意的是,更改所有者的命令需要 root 权限,而普通用户可以更改文件所属组,但前提是该用户拥有该文件且属于目标组。
chown
和
chgrp
命令都支持一些可修改其操作的选项,其中最有用的是
-R
(或
--recursive
)选项,它可使命令对整个目录树中的所有文件进行所有权更改。例如,假设用户
mary
已离职,现有员工
bob
需要访问她的文件。若
mary
的主目录是
/home/mary
,可输入以下命令:
# chown -R bob /home/mary
此命令将
/home/mary
目录及其所有子目录和文件的所有权赋予
bob
。为了让
bob
更方便地过渡,还可以将
mary
原来的主目录移动到
bob
的主目录中。
2. 文件权限设置
文件所有权若没有相应的权限设置,就无法明确特定用户对自己或其他用户文件的操作权限,因此权限设置至关重要。Linux 的权限结构借鉴了 Unix,在处理权限问题之前,需要对其进行一定的了解。掌握基础知识后,就可以使用图形界面文件管理器或文本模式 shell 来修改权限,还能为新创建的文件设置默认权限。
2.1 理解权限
要理解 Unix(以及 Linux)的权限,可从
ls
命令的输出开始。结合
-l
选项使用
ls
命令,可生成包含文件权限信息的长目录列表。例如,要查看文件
test
的长列表,可输入:
$ ls -l test
-rwxr-xr-x 1 rich users 111 Apr 13 13:48 test
这一行输出由几个部分组成,分别提供了文件的各种信息:
|部分|含义|
| ---- | ---- |
|权限|第一列(此例中为
-rwxr-xr-x
)是文件的权限,这是当前关注的重点。|
|链接数|下一列(此例中为
1
)显示文件的硬链接数量,即可用于访问该文件的唯一文件名数量。|
|用户名|再下一列(此例中为
rich
)通过用户名标识文件的所有者。|
|组名|文件所属的组(此例中为
users
)随后显示。|
|文件大小|此例中文件大小较小,为 111 字节。|
|时间戳|时间戳(此例中为
Apr 13 13:48
)标识文件最后一次修改的时间。|
|文件名|最后,
ls -l
显示文件的名称,此例中为
test
。|
输出开头的字符串(此例中为
-rwxr-xr-x
)是权限字符串的符号表示,可分为四个部分:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(文件类型代码):::process --> B(所有者权限):::process
B --> C(组权限):::process
C --> D(其他用户权限):::process
-
文件类型代码
:第一个字符是文件类型代码,它表示文件的类型,具体含义如下表所示。在文件类型无关紧要或通过其他方式已明确时,此类型字符有时会在描述中省略。
|代码|名称|含义|
| ---- | ---- | ---- |
|-|普通数据文件|可以是文本、可执行程序、图形、压缩数据或几乎任何其他类型的数据。|
|d|目录|磁盘目录也是文件,但它们包含文件名和指向这些命名文件数据结构的指针。|
|l|符号链接|文件包含另一个文件或目录的名称。当 Linux 访问符号链接时,会尝试读取链接到的文件。|
|p|命名管道|管道允许两个正在运行的 Linux 程序以单向方式相互通信。|
|s|套接字|套接字类似于命名管道,但它允许网络和双向链接。|
|b|块设备|对应于以大于 1 字节的数据块进行数据传输的硬件设备的文件。磁盘设备(如硬盘、USB 闪存驱动器、CD - ROM 等)是常见的块设备。|
|c|字符设备|对应于以 1 字节为单位进行数据传输的硬件设备的文件。例如并行和 RS - 232 串行端口设备。| - 所有者权限 :这些权限决定了文件所有者对文件的操作权限。
- 组权限 :这些权限决定了文件所属组中(非所有者)成员对文件的操作权限。
- 其他用户权限 :这些权限决定了既不是文件所有者也不是文件所属组成员的用户对文件的操作权限。
在这三组权限中,每个字符串通过字符标识三种访问权限(读、写、执行)的存在或缺失。读和写权限比较容易理解,若存在执行权限,则表示该文件可以作为程序运行。权限缺失用破折号
-
表示,权限存在则用字母
r
(读)、
w
(写)或
x
(执行)表示。
例如,权限字符串
-rwxr-xr-x
表示该文件是普通数据文件,文件所有者、所属组成员和其他所有用户都可以读取和执行该文件,但只有文件所有者有写入权限。
权限还有另一种表示方式,它更紧凑但有点复杂。将权限字符串的三组权限(不包括文件类型代码)分别转换为 0 到 7 的数字(即八进制数),结果是一个三位八进制数。每个数字的计算方法是从 0 开始,若存在读权限则加 4,若存在写权限则加 2,若存在执行权限则加 1。得到的三位代码分别代表所有者、组和其他用户的权限。以下是一些常见权限及其含义的示例:
|权限字符串|八进制代码|含义|
| ---- | ---- | ---- |
|rwxrwxrwx|777|所有用户都有读、写和执行权限。|
|rwxr - xr - x|755|所有用户都有读和执行权限,文件所有者还有写权限。|
|rwxr - x—|750|所有者和组有读和执行权限,文件所有者还有写权限,其他用户无访问权限。|
|rwx------|700|只有文件所有者有读、写和执行权限,其他用户无访问权限。|
|rw - rw - rw -|666|所有用户都有读和写权限,无执行权限。|
|rw - rw - r–|664|所有者和组有读和写权限,其他用户只有读权限。|
|rw - rw----|660|所有者和组有读和写权限,其他用户无权限。|
|rw - r–r–|644|所有者有读和写权限,其他用户只有读权限。|
|rw - r----|640|所有者有读和写权限,组只有读权限,其他用户无权限。|
|rw------|600|只有文件所有者有读和写权限,其他用户无权限。|
|r--------|400|只有文件所有者有读权限,其他用户无权限。|
权限还有一些特殊情况:
-
目录执行位
:目录使用执行位来授予搜索目录的权限。对于目录来说,这是一个非常有用的特性,因此当读位被设置时,几乎总是会看到执行位也被设置。
-
目录写入权限
:目录是一种特殊的文件。如果用户可以写入目录,那么该用户可以在目录中创建、删除或重命名文件,即使该用户不是这些文件的所有者,也没有对这些文件的写入权限。
-
符号链接
:符号链接的权限始终为 777(
rwxrwxrwx
,若包含文件类型代码则为
lrwxrwxrwx
)。此访问权限仅适用于链接文件本身,而不适用于链接到的文件。也就是说,所有用户都可以读取链接的内容以发现它指向的文件名称,但链接到的文件的权限决定了对该文件的访问权限。更改符号链接的权限会影响链接到的文件。
-
root 用户
:许多权限规则对 root 用户不适用。超级用户可以读取或写入计算机上的任何文件,即使是那些对任何人都没有访问权限(即权限为 000)的文件。不过,超级用户运行程序文件仍需要设置执行位。
2.2 在文件管理器中设置权限
在文件管理器中设置权限的过程与设置文件所有权类似:
- 通常使用与调整所有权相同的对话框来调整这些设置,例如前面提到的 Nautilus 对话框。
- 不需要以 root 身份来调整自己拥有的文件的权限。
- 仅在处理非自己拥有的文件时,才应使用 root 访问权限。
如在 Nautilus 中,有与所有者、组和其他用户相关的三个“访问”项:
- 所有者项提供两个选项:“只读”和“读和写”。
- 组和其他用户项都提供“只读”、“读和写”以及“无”选项。可以使用这些选项设置文件的读和写权限位。
Nautilus 需要单独设置执行位,通过选择“允许将文件作为程序执行”复选框来实现。该复选框会设置所有三个执行权限位,无法使用 Nautilus 更精确地控制执行权限,也无法使用 Nautilus 调整目录的执行权限。
2.3 在 shell 中设置权限
在文本模式 shell 中,可以使用
chmod
命令更改权限。该命令相当复杂,主要是因为权限更改的方式多种多样。可以用两种形式指定权限:八进制数或符号形式,符号形式是与权限字符串表示相关的一组代码。
八进制表示的权限模式与前面描述的相同,总结在下面的表格中。例如,要将
report.tex
的权限更改为
rw - r--r--
,可以执行以下命令:
$ chmod 644 report.tex
符号模式由三个部分组成:
- 一个代码,指示要修改的权限集:
u
表示用户(即所有者),
g
表示组,
o
表示其他用户,
a
表示所有权限。
- 一个符号,指示是要添加(
+
)、删除(
-
)还是将模式设置为(
=
)指定的值。
- 一个代码,指定权限应该是什么,例如常见的
r
、
w
或
x
符号,或用于更高级操作的各种其他符号。
使用
chmod
的符号模式可能会让人困惑,下面是一些常见用法的示例:
|命令|初始权限|最终权限|
| ---- | ---- | ---- |
|
chmod a+x bigprogram
|
rw - r--r--
|
rwxr - xr - x
|
|
chmod ug = rw report.tex
|
r--------
|
rw - rw----
|
|
chmod o - rwx bigprogram
|
rwxrwxr - x
|
rwxrwx---
|
|
chmod g - w,o - rw report.tex
|
rw - rw - rw -
|
rw - r----
|
符号模式比八进制模式更灵活,因为可以指定修改现有权限的符号模式,例如在不影响其他权限的情况下添加或删除执行权限,还可以只设置用户、组或其他用户的权限而不影响其他权限。而使用八进制模式时,必须将所有三个权限位都设置为指定的值。
与
chown
和
chgrp
命令一样,可以使用
-R
(或
--recursive
)选项让
chmod
对整个目录树进行操作。
2.4 设置 umask
用户掩码(umask)决定了新文件的默认权限。umask 是在创建新文件时从 666(
rw - rw - rw -
)权限中减去的值,或者在创建新目录时从 777(
rwxrwxrwx
)中减去的值。以下是一个简单的流程说明如何理解 umask 的作用:
graph LR
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A(创建新文件):::process --> B(初始权限 666):::process
B --> C(减去 umask 值):::process
C --> D(得到最终默认权限):::process
E(创建新目录):::process --> F(初始权限 777):::process
F --> C
例如,如果 umask 设置为 022,那么创建新文件时的默认权限将是 644(666 - 022),创建新目录时的默认权限将是 755(777 - 022)。通过合理设置 umask,可以确保新创建的文件和目录具有合适的默认权限,从而提高系统的安全性和管理效率。
总之,Linux 文件所有权和权限的设置是系统管理中的重要环节。通过掌握在文件管理器和 shell 中设置所有权和权限的方法,以及理解权限的表示和特殊情况,能够更好地管理文件和目录,保障系统的安全和稳定运行。同时,合理设置 umask 可以为新创建的文件和目录提供合适的默认权限,减少不必要的权限管理工作。
超级会员免费看
8

被折叠的 条评论
为什么被折叠?



