首页 > 编程笔记 > Linux笔记 阅读:5

Linux文件权限详解(新手必看)

文件权限是 Linux 资源访问概念的核心,因为在 Linux 中或多或少都是一个文件。

让我们首先回顾一些术语,然后详细讨论围绕文件访问和权限的元数据表示。

有三种类型或权限范围,从窄到宽:

此外,有三种类型的访问:
我们列出了 r/w/x 作为三种文件访问类型,但在实践中,当你执行 ls 时,会发现其他的文件访问类型:
Linux 中还有一些特殊的设置可以通过 chattr(change 属性)命令来实现。

让我们来看看文件权限的作用(注意,为了更好的可读性,ls 命令输出中的空格已经被扩展了):


当放大文件模式时,也就是说,文件类型和权限在前面的代码段中的 ❼,我们有以下含义的字段:


❶ 其他人的权限;
❷ 组的权限;
❸ 文件所有者的权限;
❹ 文件类型。

文件模式中的第一个字段表示文件类型,具体请参见下表:

表 1:模式下使用的文件类型
象征 语义
- 一个常规文件(比如当你 touch abc 时)
b 块专用文件
c 字符特殊文件
C 高性能(连续数据)文件
d 目录
l 符号链接
p 命名管道(用 mkfifo 创建)的套接字
s 套接字
? 其他(未知)文件类型

文件模式的其余部分编码了各种目标的权限集,从所有者到所有人,如下表所示:

表 2:文件权限
模式 有效权限 十进制
--- 0
--x 执行 1
-w- 2
-wx 写和执行 3
r-- 4
r-x 读和执行 5
rw- 读和写 6
rwx 读写执行 7

还有一些其他(旧的或过时的)字符,如 M 或 P,用于 0 的位置,你可以基本上忽略。如果你对它们的意思感兴趣,则运行 info ls -n"What information is listed"。

结合起来,文件模式中的这些权限定义了目标集的每个元素(用户、组、其他)所允许的内容,如表所示,通过访问检查和强制执行。

让我们来看几个例子:
664 在我的系统中有特殊的意义。当我创建一个文件时,这是它被分配的默认权限。你可以使用 umask 命令进行检查。

setuid 权限用于告诉系统以所有者的身份运行可执行文件,并具有所有者的权限。如果文件由 root 拥有,就会出现问题。

可以使用 chmod 修改文件的权限。你可以显式地指定所需的权限设置(例如 644),也可以使用快捷方式(例如,+x 使其可执行)。但实际情况如何呢?

让我们用 chmod 创建一个可执行文件:
$ ls -al /tmp/masktest
-rw-r--r-- 1 mh9 dev 0 Aug 28 13:07 /tmp/masktest ①
$ chmod +x /tmp/masktest ②
$ ls -al /tmp/masktest
-rwxr-xr-x 1 mh9 dev 0 Aug 28 13:07 /tmp/masktest ③


图 3 使文件可执行以及文件权限如何随其变化

在上图中,你可以看到背后发生了什么。请注意,你可能不想赋予每个人执行该文件的权限,因此在这里使用 chmod 744 可能会更好,只给所有者正确的权限,而不更改其他权限。

你也可以使用 chown(和组的 chgrp)改变所有权:
$ touch myfile
$ ls -al myfile
-rw-rw-r-- 1 mh9 mh9 0 Sep 4 09:26 myfile ①
$ sudo chown root myfile ②
-rw-rw-r-- 1 root mh9 0 Sep 4 09:26 myfile

相关文章