Unix 简明教程

Unix / Linux - File Permission / Access Modes

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

  1. Owner permissions − 所有者的权限决定了文件所有者可以对文件执行哪些操作。

  2. Group permissions − 组的权限决定了一个用户(该用户属于该文件所属的组的成员)可以对文件执行哪些操作。

  3. Other (world) permissions − 其他用户的权限指示所有其他用户可以对文件执行哪些动作。

The Permission Indicators

使用 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

这里,第一列表示不同的访问模式,即文件或目录具有的权限。

权限分为每组 3 个,组中的每个位置都表示一个特定权限,其顺序如下:读 (r)、写 (w)、执行 (x) −

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

  2. 第二组三个字符 (5-7) 由该文件所属组的权限组成。例如, -rwxr-xr-- 表示该组具有读取 (r) 和执行 (x) 权限,但没有写入权限。

  3. 最后三组三个字符 (8-10) 表示其他所有人的权限。例如, -rwxr-xr-- 表示只有 read (r) 权限。

File Access Modes

文件的权限是 Unix 系统安全的第一道防线。Unix 权限的基本构建块是这里描述的 readwriteexecute 权限 −

Read

授予读取权限,即查看文件内容的权限。

Write

授予修改或删除文件内容的权限。

Execute

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

Directory Access Modes

目录访问模式的列出和组织方式与任何其他文件相同。需要注意以下几个区别 −

Read

访问目录表示用户可以读取内容。用户可以查看目录中的 filenames

Write

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

Execute

执行一个目录实际上没有什么意义,因此您可以将此视为遍历权限。

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

Changing Permissions

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

Using chmod in Symbolic Mode

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

Sr.No.

Chmod operator & Description

1

+ 向文件或目录添加指定权限。

2

- 从文件或目录中移除指定权限。

3

= Sets the designated permission(s).

这里有一个使用 testfile 的示例。在 testfile 中运行 ls -1 显示文件的权限如下 −

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

然后对 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

Using chmod with Absolute Permissions

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

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

Number

Octal Permission Representation

Ref

0

No permission

---

1

Execute permission

--x

2

Write permission

-w-

3

执行和写入权限:1(执行)+ 2(写入)= 3

-wx

4

Read permission

r--

5

读取和执行权限:4(读取)+ 1(执行)= 5

r-x

6

读取和写入权限:4(读取)+ 2(写入)= 6

rw-

7

所有权限:4(读取)+ 2(写入)+ 1(执行)= 7

rwx

这里有一个使用 testfile 的示例。在 testfile 中运行 ls -1 显示文件的权限如下 −

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

然后对 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

Changing Owners and Groups

在 Unix 中创建帐户时,它会为每个用户分配一个 owner ID 和一个 group ID 。上述所有权限也都根据所有者和组进行分配。

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

  1. chown - chown 命令表示 "change owner" ,用于更改文件的所有者。

  2. chgrp - chgrp 命令表示 "change group" ,用于更改文件的所有组。

Changing Ownership

chown 命令更改文件的拥有权。其基本语法如下:

$ chown user filelist

用户的代码值可以是系统上的 name of a user 或系统上用户的 user id (uid)

以下示例将帮助你了解这个概念:

$ chown amrood testfile
$

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

NOTE - 超级用户 root 拥有更改任何文件所有权的非受限能力,但普通用户只能更改由自己拥有的文件的所有权。

Changing Group Ownership

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

$ chgrp group filelist

组的代码值可以是系统上的 name of a group 或系统上的组的 the group ID (GID)

以下示例将帮助你了解这个概念:

$ chgrp special testfile
$

将给定文件的组更改为 special 组。

SUID and SGID File Permission

通常,一个命令在执行时都需要利用特殊权限才能完成其任务。

举例来说,当用 passwd 命令更改口令时,你的新口令会存储在文件 /etc/shadow 中。

由于安全原因,作为一个普通用户,你没有对这个文件的 readwrite 访问权,但是当你更改你的口令时,你需要有这个文件的写权限。这意味着 passwd 程序需要给你其他权限,才能写文件 /etc/shadow

通过一种称为 Set User ID (SUID)Set Group ID (SGID) 位的机制给程序额外权限。

当一个有 SUID 位的程序执行时,你将继承该程序所有者的权限。没有 SUID 位的程序将以启动该程序的用户的权限运行。

SGID 也是如此。通常,一个程序会以你的组权限执行,但是对这个程序,你的组将更改为程序的程序组所有者。

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

例如,此命令

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

显示 SUID 位已设置,并且该命令归根拥有。在执行位置的大写字母 S (而非小写字母 s )表示未设置执行位。

如果为目录启用了粘滞位,则只有下列用户之一才能删除文件:

  1. 粘滞目录的所有者

  2. 要删除的文件的所有者

  3. The super user, root

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

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