Unix 简明教程
Unix / Linux - File Permission / Access Modes
在本章中,我们将详细讨论 Unix 中的文件权限和访问模式。文件所有权是 Unix 的一个重要组成部分,它提供了一种安全的文件存储方法。Unix 中的每个文件都具有以下属性 −
-
Owner permissions − 所有者的权限决定了文件所有者可以对文件执行哪些操作。
-
Group permissions − 组的权限决定了一个用户(该用户属于该文件所属的组的成员)可以对文件执行哪些操作。
-
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) −
-
前三个字符 (2-4) 表示文件所有者的权限。例如, -rwxr-xr-- 表示所有者具有读取 (r)、写入 (w) 和执行 (x) 权限。
-
第二组三个字符 (5-7) 由该文件所属组的权限组成。例如, -rwxr-xr-- 表示该组具有读取 (r) 和执行 (x) 权限,但没有写入权限。
-
最后三组三个字符 (8-10) 表示其他所有人的权限。例如, -rwxr-xr-- 表示只有 read (r) 权限。
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 。上述所有权限也都根据所有者和组进行分配。
有两个可用的命令来更改文件的所属者和组 −
-
chown - chown 命令表示 "change owner" ,用于更改文件的所有者。
-
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 中。
由于安全原因,作为一个普通用户,你没有对这个文件的 read 或 write 访问权,但是当你更改你的口令时,你需要有这个文件的写权限。这意味着 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 )表示未设置执行位。
如果为目录启用了粘滞位,则只有下列用户之一才能删除文件:
-
粘滞目录的所有者
-
要删除的文件的所有者
-
The super user, root
要为任何目录设置 SUID 和 SGID 位,请尝试以下命令:
$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname
$