Unix / Linux - 文件权限/访问模式

在本章中,我们将详细讨论 Unix 中的文件权限和访问模式。 文件所有权是 Unix 的一个重要组成部分,它提供了一种安全的文件存储方法。 Unix 中的每个文件都具有以下属性 −

  • 所有者权限 − 所有者的权限决定文件的所有者可以对文件执行哪些操作。

  • 群组权限 − 组的权限决定了作为文件所属组成员的用户可以对文件执行哪些操作。

  • 其他(Other)权限 − 其他人的权限指示所有其他用户可以对该文件执行的操作。


权限指示符

在使用ls -l命令时,会显示与文件权限相关的各种信息如下 −

$ls -l /home/amrood
-rwxr-xr--  1 amrood   users 1024  Nov 2 00:10  myfile
drwxr-xr--- 1 amrood   users 1024  Nov 2 00:10  mydir

这里,第一列代表不同的访问模式,即与文件或目录相关联的权限。

权限分为三个一组,组中的每个位置表示一个特定的权限,按此顺序: read (r), write (w), execute (x) −

  • 前三个字符 (2-4) 代表文件所有者的权限。 例如,-rwxr-xr--代表拥有者有读(r)、写(w)、执行(x)权限。

  • 第二组三个字符 (5-7) 包含文件所属组的权限。 例如,-rwxr-xr--表示该组有读(r)和执行(x)权限,但没有写权限。

  • 最后一组三个字符 (8-10) 代表其他人的权限。 例如,-rwxr-xr-- 表示只有读 (r) 权限。


文件访问模式

文件的权限是Unix系统安全的第一道防线。 Unix 权限的基本组成部分是读取写入执行 权限,如下所述 −

读取

授予读取的能力,即查看文件的内容。

写入

授予修改或删除文件内容的能力。

执行

具有执行权限的用户可以将文件作为程序运行。


目录访问模式

目录访问模式的列出和组织方式与任何其他文件相同。 有一些差异需要提及 −

读取

访问目录意味着用户可以阅读内容。 用户可以查看目录中的filenames

写入

访问意味着用户可以从目录中添加或删除文件。

执行

执行一个目录并没有什么实际意义,所以把它看作是一个遍历权限。

用户必须对bin 目录具有执行 权限才能执行lscd 命令。


更改权限

要更改文件或目录权限,您可以使用chmod(更改模式)命令。 有两种使用 chmod 的方法——符号模式和绝对模式。

在符号模式下使用 chmod

初学者修改文件或目录权限的最简单方法是使用符号模式。 使用符号权限,您可以使用下表中的运算符添加、删除或指定所需的权限集。

这是一个使用 testfile 的例子。 对测试文件运行ls -1 可以看到该文件的权限如下 −

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

然后在测试文件上运行上表中的每个示例 chmod 命令,然后是 ls –l,因此您可以看到权限更改 −

$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod g = rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

以下是将这些命令组合在一行中的方法 −

$chmod o+wx,u-x,g = rx testfile
$ls -l testfile
-rw-r-xrwx  1 amrood   users 1024  Nov 2 00:10  testfile

使用具有绝对权限的 chmod

用chmod 命令修改权限的第二种方法是使用一个数字来指定文件的每组权限。

每个权限都分配了一个值,如下表所示,每组权限的总和为该组提供了一个数字。

序号 Chmod 运算符 & 描述
1

+

将指定权限添加到文件或目录。

2

-

从文件或目录中删除指定的权限。

3

=

设置指定权限。

数字 八进制权限表示 Ref
0 没有权限 ---
1 执行权限 --x
2 写权限 -w-
3 执行和写入权限:1(执行)+ 2(写入)= 3 -wx
4 读取权限 r--
5 读取和执行权限:4 (read) + 1 (execute) = 5 r-x
6 读取和写入权限: 4 (read) + 2 (write) = 6 rw-
7 所有权限: 4 (read) + 2 (write) + 1 (execute) = 7 rwx

这是一个使用测试文件的例子。 对测试文件运行ls -1 可以看到该文件的权限如下 −

$ls -l testfile
-rwxrwxr--  1 amrood   users 1024  Nov 2 00:10  testfile

然后在测试文件上运行上表中的每个示例 chmod 命令,然后是 ls –l,因此您可以看到权限更改 −

$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx  1 amrood   users 1024  Nov 2 00:10  testfile
$chmod 043 testfile
$ls -l testfile
----r---wx  1 amrood   users 1024  Nov 2 00:10  testfile

更改所有者和组

在 Unix 上创建帐户时,它会为每个用户分配一个所有者 ID 和一个组 ID。 上面提到的所有权限也是根据所有者和组分配的。

可以使用两个命令来更改所有者和文件组 −

  • chownchown 命令代表"change owner(更改所有者)",用于更改文件的所有者。

  • chgrpchgrp 命令代表"change group(更改组)",用于更改文件的组。


改变所有权

chown 命令更改文件的所有权。 基本语法如下 −

$ chown user filelist

用户的值可以是系统上的用户名,也可以是系统上用户的用户ID (uid)

下面的例子将帮助你理解这个概念 −

$ chown amrood testfile
$

将给定文件的所有者更改为用户 amrood

注意 − 超级用户 root 可以不受限制地更改任何文件的所有权,但普通用户只能更改他们拥有的那些文件的所有权。


更改组所有权

chgrp 命令更改文件的组所有权。 基本语法如下 −

$ chgrp group filelist

组的值可以是系统上的组名称或系统上组的组ID (GID)

下面的例子可以帮助你理解这个概念 −

$ chgrp special testfile
$

将给定文件的组更改为特殊组。


SUID 和 SGID 文件权限

通常在执行命令时,必须以特殊权限执行才能完成其任务。

例如,当您使用 passwd 命令更改密码时,您的新密码将存储在文件 /etc/shadow 中。

作为普通用户,出于安全原因,您没有对此文件的读取写入权限,但是当您更改密码时,您需要对此文件具有写入权限 文件。这意味着 passwd 程序必须给您额外的权限,以便您可以写入文件 /etc/shadow

通过称为设置用户 ID (SUID)设置组 ID (SGID) 位的机制向程序授予额外的权限。

当您执行启用了 SUID 位的程序时,您将继承该程序所有者的权限。 未设置 SUID 位的程序以启动该程序的用户的权限运行。

SGID 也是如此。 通常,程序以您的组权限执行,但您的组将仅为该程序更改为该程序的组所有者。

如果权限可用,SUID 和 SGID 位将显示为字母 "s"。SUID "s" 位将位于所有者的执行权限通常所在的权限位中。

例如,命令 −

$ ls -l /usr/bin/passwd
-r-sr-xr-x  1   root   bin  19031 Feb 7 13:47  /usr/bin/passwd*
$

显示 SUID 位已设置且该命令归 root 所有。 执行位置中的大写字母 S 而不是小写字母 s 表示执行位未设置。

如果在目录上启用了粘滞位,则只有您是以下用户之一才能删除文件 −

  • 粘性目录的所有者
  • 被删除文件的所有者
  • 超级用户,root

要为任何目录设置 SUID 和 SGID 位,请尝试以下命令 −

$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root  4096 Jun 19 06:45 dirname
$