Linux 文件权限

Linux 是 UNIX 的一个副本,它是多用户操作系统,可以被许多用户同时访问。Linux 也可以在大型机和服务器中使用而无需任何修改。但这会引发安全问题,因为恶意的用户可能会损坏、更改或删除关键数据。为了有效的安全性,Linux 将授权分为两个级别。

  1. 所有权
  2. 许可

权限所有权的概念在 Linux 中至关重要。在这里,我们将学习它们。让我们从所有权开始。

Linux 文件的所有权

Unix/Linux 系统上的每个文件和目录都分配了 3 种类型的所有者,如下所示。

用户

用户是文件的所有者。默认情况下,创建文件的人将成为其所有者。因此,用户有时也被称为所有者。

用户组

用户组可以包含多个用户。属于某个组的所有用户对该文件具有相同的访问权限。假设你有一个项目,许多人需要访问文件。你可以将所有用户添加到组中,而不是手动为每个用户分配权限,并将组权限分配给文件,以便只有该组成员才能读取或修改文件。

其他

有权访问文件的任何其他用户。此人既没有创建文件,也没有属于可以拥有该文件的用户组。实际上,它意味着其他所有人。

现在,最大的问题是 Linux 如何区分这三种用户类型,这样用户 A 就不会影响其他用户 B 重要信息/数据的文件。这是权限设置的地方,它们定义用户行为

让我们了解 Linux 上的权限系统

权限

UNIX/Linux 系统中的每个文件和目录都具有为上面讨论的所有 3 个所有者定义的以下 3 个权限。

  • 此权限授予你打开和读取文件的权限。你有目录的读取权限的话,你就能够列出其内容。
  • 写权限授予你修改文件内容的权限。对目录的写入权限使你有权添加、删除和重命名存储在目录中的文件。假如你必须在文件上写入权限,但对存储文件的目录没有写入权限。你将能够修改文件内容。但是你将无法从目录重命名、移动或删除该文件。
  • 执行在 Windows 中,可执行程序通常具有扩展名 .exe,你可以轻松运行它们。在 Unix/Linux 中,除非设置了执行权限,否则无法运行程序。如果未设置执行权限,你仍可以查看/修改程序代码(提供读写权限),但不能运行它。

ls -l 在终端上会列出文件和文件夹的权限信息,

dishan@vultr:~$ ls - l
-rw-rw-r-- 1 home home 0 2018-09-14 18:35 TestFile

在这里,-rw-rw-r-- 代码是告诉我们所有者、用户组和其他人对文件的权限代码。

这里,第一个 - 表示我们选择了一个文件,

否则,如果是目录,则会显示 d

drw-rw-r-- 2 home home 80 2018-09-14 18:35 Desktop

权限代码字母也很容易记住。

权限代码 说明
r 读取权限
w 写入权限
x 执行权限
- 没有权限

让我们这样来看看刚才的例子,

代码的第一部分是 rw-。这表明所有者 Home 可以:

  • 读文件
  • 编写或编辑文件
  • 由于执行位设置为 -,因此无法执行该文件。

根据设计,许多 Linux 发行版如 Fedora,CentOS,Ubuntu 等都会将用户添加到与用户名相同的组名中。因此,用户 tom 被添加到名为 tom 的组中。

第二部分是 rw-。用户组 Home 和组成员可以:

  • 读文件
  • 编写或编辑文件

第三部分是其他任何用户。r--。这意味着用户只能:

  • 读文件

使用 chmod 命令更改文件/目录权限

假设你不希望其他用户访问某些文件,这可以通过更改文件权限来实现。

我们可以使用 chmod 命令代表 change mode。使用该命令,我们可以在所有者、用户组和其他用户的文件/目录上设置权限(读,写,执行)。语法如下,

chmod permissions filename

有两种方法可以使用该命令 -

  1. 绝对模式
  2. 符号模式

绝对(数字)模式

在此模式下,文件权限不用字符表示,而是三位八进制数。

下表给出了所有权限类型的数字。

数字 许可类型 符号
0 没有许可 ---
1 执行 --x
2 -w-
3 执行+写入 -wx
4 r--
5 读+执行 r-x
6 读+写 rw-
7 读+写+执行 rwx

让我们看看 chmod 命令的运行情况。

在上面给出的终端窗口中,我们已将文件 sample 的权限更改为 764

764 绝对代码说明如下:

  • 所有者可以读,写和执行
  • 用户组可以读写
  • 其他用户只读

这是通过分配绝对数字来更改文件权限的方法。

符号模式

在绝对模式下,你可以更改所有 3 个所有者的权限。在符号模式下,你可以修改特定所有者的权限。它利用数学符号来修改文件权限。

操作符 说明
+ 添加文件或目录的权限
- 删除权限
= 设置权限并覆盖先前设置的权限

不同的用户用不同的字母来表示,

用户符号
u 用户/所有者
g 小组
o 其他
a 所有用户

我们不会在像 755 这样的数字中使用权限,而是使用像 rwx 这样的字符。比如,

dishan@vultr:~$ chmod o=rwx test
dishan@vultr:~$ chmod g+x test
dishan@vultr:~$ chmod u-r test

改变所有权和用户组

要更改文件/目录的所有权,可以使用以下命令:

chown user

如果要更改用户以及文件或目录的用户组,可以用以下命令,

chown user:group filename

让我们看看例子,

下面命令将文件所有者更改为 testuser

dishan@vultr:~$ sudo chown testuser sample.txt

下面命令将文件所有者和用户组更改为 root

dishan@vultr:~$ sudo chown root:root sample.txt

如果你只想更改组所有者,请使用下面的命令

chgrp group_name filename

chgrp 代表 change group

提示

  • 文件 /etc/group 包含系统中定义的所有组
  • 你可以使用命令 groups 查找你所属的所有组
  • 你可以使用命令 newgrp 作为默认组以外的组的成员
  • 你不能拥有 2 个拥有相同文件的组。
  • 你在 Linux 中没有嵌套组。其中一组不能成为其他组的子组

复习

  • 作为多用户系统的 Linux 使用权限和所有权来实现安全性。
  • Linux 系统上有三种用户类型即。用户,用户组和其他用户
  • Linux 将文件权限分为读,写和执行,由 rwx 表示
  • 可以通过 chmod 命令更改文件的权限,该命令可以进一步分为绝对模式和符号模式
  • chown 命令可以更改文件/目录的所有权。使用以下命令:chown user filechown user:group file
  • chgrp 命令可以更改组所有权 chrgrp group filename