Linux 是一个真正的多用户环境。在多用户环境中,用户和系统数据的安全性至关重要。数据访问权限应仅授予需要访问该数据的用户。由于 Linux 本质上是一个服务器操作系统,因此它内置了良好且高效的文件安全机制。当然,这种安全性确实会给用户带来麻烦,尤其是新手用户。许多用户的问题都是由于文件权限不正确,或者仅仅是因为用户忽略了文件权限不允许访问这一事实。
首先,我们来了解一下文件权限。文件权限是针对用户(User)、组(Group)和其他用户(Others)定义的。User 是指你当前登录的用户名。此外,为了更好地进行管理和控制,可以将用户组织成组。每个用户至少属于一个默认组。Others 包括上述类别之外的任何人。
进入到某个文件路径,执行 ls -l 命令,运行结果如下:
drwxr-x--- 2 mayank freeos 4096 Dec 28 04:09 tmp-rw-r--r-- 1 mayank freeos 969 Dec 21 02:32 foo-rwxr-xr-x 1 mayank freeos 345 Sep 1 04:12 somefile
这里第一列的相关信息是文件类型,后面紧跟着文件权限,第三列和第四列显示文件的所有者以及文件所属的组。
第一个条目是 tmp,其中第一列的第一个字符是 d,这意味着 tmp 是一个目录,其他条目是文件,由 - 表示:
d rwx r-x ---| | | || | | +-- 其他用户 (Others)| | +------- 组 (Group)| +------------ 用户 (User)+--------------- 文件类型 (File Type)
接下来的 9 个字符定义了文件权限。这些权限每 3 个为一组。前 3 个字符是文件或目录所有者的权限。接下来的 3 个是文件所属组的权限,最后 3 个字符定义了非该组成员的其他所有人的访问权限。构成文件访问权限的属性有 3 种可能:
r (Read) - 读权限。表示文件是否可以被读取。对于目录,这意味着能否列出目录内容(即执行 ls 命令)。
w (Write) - 写权限。表示文件是否可以被写入或修改。对于目录,这定义了你是否可以对目录内容进行任何更改。如果未设置写权限,你将无法删除、重命名或创建文件。
x (Execute) - 执行权限。表示文件是否可以被执行。对于目录,该属性决定了你是否有权进入该目录(即执行 cd 命令)、在该目录中进行搜索或从该目录执行某些程序。
以 tmp 的权限 drwxr-x--- 为例。该目录的所有者是用户 mayank,目录的组所有者是 freeos。前 3 个权限属性是 rwx。此权限允许用户 mayank对该目录拥有完全的读、写和执行访问权限。因此,mayank 在这里拥有完全访问权。组权限是 r-x。这里没有写权限,因此虽然 freeos 组的成员可以进入该目录并列出其内容,但他们无法创建新文件或子目录。他们也无法以任何方式删除任何文件或更改目录内容。其他人没有任何访问权限,因为 “其他用户” 的访问属性为空 (---)。
对于 foo,权限是 -rw-r--r--。应用上述规则,你会发现文件所有者 (mayank) 可以读取和修改该文件(读和写访问)。freeos 组的成员可以读取该文件,但不能修改它。其他所有人也可以读取该文件,但不能对其进行任何更改。
以上我们介绍了如何读取文件权限,那么接下来了解下如何设置或修改权限,这里需要使用 chmod 程序来完成此操作。要更改文件权限,需要是该文件的所有者或 root 用户。chmod 命令的语法非常简单。可以为用户 (u)、组 (g) 和其他用户 (o) 定义权限。
chmod 命令的一个示例如下:
chmod u-x,g+w,o+rw somefile
这里的 chmod 命令取消了用户的执行权限,为组设置了写权限,并授予其他所有人读和写的权限。执行此命令之前,文件权限是 -rwxr-xr--。执行此命令后,文件权限变为 -rw-rwxrw-。
使用方法是:首先选择使用 u、g 或 o,后跟 + 来添加权限,- 来移除权限,以及 = 来重新设置权限,也可以使用 a 为所有用户设置权限。
下面我们以 somefile 的权限 -rwxrwxrwx 为例进行操作:
我们正在移除组的写和执行权限,该文件现在的属性将是 -rwxr--rwx。
也可以在同一个命令中指定用户、组或其他用户的权限,用逗号分隔:
chmod g+wx,o-rwx somefile
组成员被赋予了写和执行访问权限,但非该组成员的用户的所有访问权限都被移除了。文件权限现在是 -rwxrwx---。
赋予每个人执行权限,权限现在是 -rwxrwxr-x。这里指定 a 并不是必须的。你可以简单地说 +x;默认情况下会假定为 all。因此,命令 chmod +x somefile 等同于上面的命令。
如果要为组和其他用户设置 / 取消相同的权限位,可以像上面那样将它们组合在一起,文件权限现在是 -rwx------。
这会将文件权限精确设置为指定的值。现在,文件权限变为 -rwxrwx---。
将其他用户的文件权限设置为与组的权限相同。权限现在是 -rwxrwxrwx。
还有另一种指定文件权限的方法。权限位 r、w 和 x 被分配了一个数字:
现在你可以使用数字,这些数字是各种权限位的总和。例如,rwx 将是 4+2+1 = 7。rx 变为 4+1 = 5。chmod 命令现在变为:
其中 x、y 和 z 分别代表用户、组和其他用户的权限数字。每个数字是要设置的权限的总和,计算方法如上所述。
6 = 4 + 2 = rw- (用户权限)
4 = r-- (组权限)
4 = r-- (其他用户权限)
如你所见,somefile 的权限被设置为 -rw-r--r--。这是一种更简单、更快捷的设置文件权限的方法。请参考下表作为快速参考:
0 - ---
1 - --x
2 - -w-
3 - -wx
4 - r--
5 - r-x
6 - rw-
7 - rwx
除了文件权限,你还可以修改文件的所有者和组。这里使用 chown 程序,其语法非常简单。你需要是文件的所有者或 root 才能执行此操作。
chown new-owner somefilechown newbie somefile
要更改用户组,可使用 chgrp 命令。语法与 chown 类似,需要是文件的所有者,并且属于与该文件相同的组,或者是 root:
以上是对 Linux 下文件权限的快速浏览。如果你在 Linux 下遇到问题,只需查看文件权限。无论如何,我们都无法避免遇到文件权限问题。这是所有 Linux 用户都必须掌握的基本知识。我们应该使用正确的文件权限,不要为了省事而让每个人都能访问文件,即使在单用户桌面环境中,也要确保遵循良好的安全实践。