Linux-文件权限及访问控制模式

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

  • 所有者权限 - 所有者的权限决定了文件所有者可以对文件执行的操作。
  • 组权限 - 组的权限决定了用户(文件所属组的成员)可以对文件执行的操作。
  • 其他用户权限 - 其他人的权限指示所有其他用户可以对文件执行的操作。

权限标识

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

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

以上示例,第一列从第二个字符开始的字符串代表了不同的访问权限,即与文件或目录相关联的权限。权限分为三组,组中的每个位置都有三种可能的权限,分别用三个字符来表示:读取(r),写入(w),执行(x)。

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

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

最后一组三个字符 (8-10) 代表其他用户的权限。 例如,-rwxr-xr--表示其他用户只有读(r)权限,没有写和执行权限。

文件访问控制模式

文件的权限是Linux系统安全的第一道防线。Linux权限的基本构建块是读取、写入和执行权限,如下面描述:

  • 授予读取能力,即查看文件的内容。
  • 授予修改或删除文件内容的能力。
  • 执行 具有执行权限的用户可以将文件作为程序运行。

目录访问控制模式

目录的权限以与文件相同的方式列出和组织。 但也有一些差异需要特别强调:

- 访问目录的权限,意味着用户可以查看目录中的文件名。

- 用户可以在目录中添加或删除文件。

执行 - 执行一个目录并没有真正的意义,所以把它看作是一个遍历权限。用户必须具有对目录的执行权限才能执行ls或cd命令。

更改权限

要更改文件或目录权限,请使用chmod命令。chmod有两种使用方式——符号模式绝对模式

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

操作 说明
+ 将指定的权限添加到文件或目录。
- 删除文件或目录的指定权限。
= 为文件或目录设置指定的权限。

假设有一个testfile文件。 在testfile上运行ls -1显示文件的权限如下:

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

然后对testfile运行上表中的每个chmod命令,再执行ls –l命令,以便查看权限更改的结果。

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

其实上面执行的命令可以组合到一个命令中一次性执行:

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

chmod命令的绝对权限模式

使用chmod命令修改权限的第二种方法是使用一个数字来指定文件的每组权限。数字都对应一组读、写、执行权限的组合,如下表所示。

数字 权限 参考
0 无权限 ---
1 执行权限 --x
2 写权限 -w-
3 执行和写权限:1(执行)+2(写)=3 -wx
4 读取权限 r--
5 读和执行权限:4(读)+1(执行)=5 r-x
6 读写权限:4(读)+2(写)=6 rw-
7 所有权限:4(读)+ 2(写)+ 1(执行)= 7 rwx

这是我们还是使用testfile文件来演示chmod命令使用绝对权限模式更改文件的权限。

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

然后在测试文件上运行上表中的每个示例chmod命令,然后执行ls –l命令,以便看到更改权限的效果。

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

更改所有者和组

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

有两个命令可用于更改所有者和文件组

  • chown - chown命令代表“更改所有者”,用于更改文件的所有者。
  • chgrp - chgrp命令代表“更改组”,用于更改文件的组。

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

$ chown user filelist

用户的值可以是系统上的用户名,也可以是系统上用户的用户ID (uid)。下面的例子将帮助你理解这个概念

$ chown amrood testfile

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

注意 - 超级用户root具有更改任何文件所有者的能力,但普通用户只能更改他们拥有的那些文件的所有权。

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

$ chgrp group filelist

group的值可以是系统上组的名称或系统上组的组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则表示未设置。

如果在目录上启用了SUID位,则仅当您是以下用户之一时才能删除文件 -

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

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

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