上一章Unix和Linux教程请查看:Unix和Linux目录管理和操作
在本章中我们将详细讨论Unix/Linux中的文件权限和访问模式。文件所有权是Unix的一个重要组成部分,它为存储文件提供了一种安全的方法。Unix中的每个文件都具有以下属性:
- 所有者权限(owner permissions)——所有者的权限决定文件所有者可以对文件执行什么操作。
- 组权限(group permissions)——组的权限决定文件所属的组的成员用户可以对文件执行什么操作。
- 其他权限——其他权限指示所有其他用户可以对文件执行什么操作(读、写、运行等)。
1、权限描述符
在使用ls -l命令时它会显示与文件权限相关的各种信息,如下所示ls –l例子:
$ls -l /home/user
-rwxr-xr-- 1 user users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 user users 1024 Nov 2 00:10 mydir
这里显示信息的第一列表示不同的访问模式,即与文件或目录相关联的权限。
权限被分成三个组,组中的每个位置表示一个特定的权限,顺序为:读(r)、写(w)、执行(x):
- 前三个字符(2-4)表示文件所有者的权限U。例如-rwxr-xr–表示所有者拥有文件的读取(r)、写入(w)和执行(x)权限。
- 第二组三个字符(5-7)由文件所属的组的权限组成G。例如-rwxr-xr–表示该组具有读(r)和执行(x)权限但没有写权限。
- 最后一组三个字符(8-10)表示其他所有人的权限O。例如-rwxr-xr–表示只有读(r)权限。
2、文件访问模式
文件的权限是Unix系统安全性的第一道防线。Unix权限的基本构建块是读、写和执行权限,下面将对此进行描述:
- read读授予读取能力,即查看文件内容。
- write写授予修改或删除文件内容的能力。
- execute执行具有执行权限的用户可以将文件作为程序运行。
3、目录访问模式
目录访问模式以与其他文件的列出和组织的方式相同,但是有几个不同点需要提到:
- read读对目录的访问意味着用户可以读取内容,用户可以查看目录中的文件名。
- write写访问意味着用户可以从目录中添加或删除文件。
- execute执行一个目录实际上没有意义,所以可以把它看作一个遍历权限。
为了执行ls或cd命令,用户必须具有对bin目录的执行访问权。
4、更改权限:在符号模式下使用chmod
要更改文件或目录权限可以使用chmod(change mode)命令,chmod有两种使用方式:符号模式和绝对模式。
初学者修改文件或目录权限的最简单方法是使用符号模式,使用符号权限可以使用下表中的操作符添加、删除或指定所需的权限集。
编号 | Chmod操作符 & 描述 |
1 | + 将指定的权限添加到文件或目录。 |
2 | – 从文件或目录中移除指定的权限。 |
3 | = 设置指定的权限。 |
下面是一个使用testfile的例子,在testfile上运行ls -1显示文件的权限如下:
$ls -l testfile
-rwxrwxr-- 1 user users 1024 Nov 2 10:00 testfile
然后在testfile上运行前表中的每个示例chmod命令,后面跟着ls l这样你就可以看到权限的变化:
$chmod o+wx testfile
$ls -l testfile
-rwxrwxrwx 1 user users 1024 Nov 2 10:10 testfile
$chmod u-x testfile
$ls -l testfile
-rw-rwxrwx 1 user users 1024 Nov 2 10:10 testfile
$chmod g = rx testfile
$ls -l testfile
-rw-r-xrwx 1 user users 1024 Nov 2 10:10 testfile
下面演示如何在一行中组合这些命令:
$chmod o+wx,u-x,g = rx testfile
$ls -l testfile
-rw-r-xrwx 1 user users 1024 Nov 2 10:10 testfile
5、使用绝对模式chmod
使用chmod命令修改权限的第二种方法是使用一个数字来指定文件的每一组权限。为每个权限分配一个值,如下表所示每个权限集的总和为该集提供一个数字。
数字 | 八进制权限表示 | 参考 |
0 | 无权限 | — |
1 | 执行权限 | –x |
2 | 写权限 | -w- |
3 | 执行和写权限: 1 (execute) + 2 (write) = 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 |
下面是一个使用testfile的例子,在testfile上运行ls -1显示文件的权限如下:
$ls -l testfile
-rwxrwxr-- 1 user group 1024 Nov 2 09:00 testfile
然后在testfile上运行前表中的每个示例chmod命令,后面跟着ls -l这样就可以看到权限的变化:
$ chmod 755 testfile
$ls -l testfile
-rwxr-xr-x 1 user group 1024 Nov 16 09:00 testfile
$chmod 743 testfile
$ls -l testfile
-rwxr---wx 1 user group 10164 Nov 16 09:00 testfile
$chmod 043 testfile
$ls -l testfile
----r---wx 1 user group 10164 Nov 16 09:00 testfile
6、更改所有者和组别
在Unix上创建帐户时,它会为每个用户分配一个所有者ID和一个组ID,上面提到的所有权限也是根据所有者和组分配的。
可以使用两个命令来更改所有者和文件组:
(1)chown命令代表“更改所有权”,用于更改文件的所有权。
(2)chgrp命令表示“更改组所有权”,用于更改文件的组。
7、更改所有权
chown命令更改文件的所有权,基本语法如下:
$ chown user filelist
用户的值可以是系统上用户的名称,也可以是系统上用户的用户id (uid)。下面的示例可以帮助你理解这个概念:
$ chown sam testfile
$
将给定文件的所有者更改为用户sam,注意超级用户root可以不受限制地更改任何文件的所有权,但是普通用户只能更改他们拥有的那些文件的所有权。
8、更改组所有权
chgrp命令更改文件的组所有权基本语法如下:
$ chgrp group filelist
组的值可以是系统上一个组的名称,也可以是系统上一个组的组ID (GID)。下面的例子可以帮助你理解这个概念:
$ chgrp migroup testfile
$
9、SUID和SGID文件权限
一般当一个命令被执行时,为了完成它的任务它必须以特权执行。例如当你使用passwd命令更改密码时,新密码将存储在文件/etc/ shadow2中。
出于安全原因普通用户没有对该文件的读写权限,但是当你更改密码时,你需要具有对该文件的写权限。这就是说passwd程序必须为你提供额外的权限,以便你能够写入文件/etc/ shadow2。
附加权限是通过一种称为设置用户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 Nov 7 03:02 /usr/bin/passwd*
$
显示设置了SUID位并且该命令属于根用户。执行位置的大写字母S而不是小写S表示未设置执行位。如果在目录上启用了粘性位则只有当你是以下用户之一时才能删除文件:
- 粘性目录的所有者
- 正在删除的文件的所有者
- 超级用户root
要设置任何目录的SUID和SGID位可以尝试以下命令:
$ chmod ug+s dirname
$ ls -l
drwsr-sr-x 2 root root 4096 Nov 29 01:10 dirname
评论前必须登录!
注册