Linux系统下文件或目录的权限

Linux是一个优秀的多用户系统,其严格的权限机制确保了其安全性,所以大部分人很少听到Linux系统下的安全事故。下面我们来了解下Linux系统下文件或目录的权限。

基础知识

Linux下,可以从文件的角度将用户分为3类:

用户 对应的字符表示
文件创建者(又称文件所有者) u
与文件创建者同组的用户 g
其他用户 o

注意,我们用 a 表示所有用户。

Linux下,文件或目录的权限分为:

文件或目录的权限 对应的字符表示 对应的数字表示
r 4
w 2
执行 x 1

注意,0代表没有权限。

查看文件或目录的权限

查看文件和目录的权限可以用两个命令: llls -l

1
2
3
4
sam@sam-WRT-WX9:~/Music$ ls -l hi
-rw-r--r-- 1 sam sam 3 Oct 5 21:45 hi
sam@sam-WRT-WX9:~/Music$ ll hi
-rw-r--r-- 1 sam sam 3 Oct 5 21:45 hi

命令返回值中,我们最关心的主要是第一个字段-rw-r--r--。那么这串鬼符到底啥意思呢?

该字段中的首字符(-)指定该文件的类型,本例中它是一个常规文件。Linux系统下,文件类型主要有四种:普通文件、目录链接文件、设备。如果ls -l命令的参数实际是个目录,那么该字段的首字符就是d。文件类型和字符之间的对应关系如下:

文件类型 对应的字符 备注
普通文件(regular file) - 普通文件通常分为两种:纯文本文件(ascii)和二进制文件(binary)。纯文本文件可通过cat命令直接查看内容,而二进制文件不能。需要注意的是,Linux系统并不以文件名中的后缀来区分文件类型(和Windows不一样),比如将test.txt中的.txt去掉,该文件依然能被Linux识别为文本文件
目录(directory) d 也就是Windows下的文件夹
链接文件(link) l 类似于Windows下的快捷方式
设备(device) b(块设备文件)、c(字符设备文件) 设备文件通常分为两种:块(block)设备文件和字符(character)设备文件。块设备(可以简单理解为硬盘)用于存储数据并提供系统存取接口,字符设备是一些串行端口的接口设备(比如键盘鼠标)
1
2
3
4
sam@sam-WRT-WX9:/dev$ ls -l | grep cpu_dma_latency #用ls -l查看cpu_dma_latency的文件类型,输出结果中的首字符为c,说明是字符设备文件
crw------- 1 root root 10, 58 Oct 22 07:20 cpu_dma_latency
sam@sam-WRT-WX9:/dev$ file cpu_dma_latency #用file命令验证cpu_dma_latency的文件类型,确实字符设备文件
cpu_dma_latency: character special (10/58)

该字段的其余部分由三个三元组字符组成。第一个三元字符组代表文件创建者的权限,第二个代表与文件创建者同组的用户的权限,第三个代表所有其他用户的权限。

本例中,文件创建者对该文件具有读、写权限,与文件创建者同组的用户和所有其他用户具有读权限。

修改文件或目录的权限

修改文件和目录的权限可以用chmod命令。我们来看几个例子:

1
chmod 777 update.sh # 所有用户都将获得对update.sh文件的读、写、执行权限

这里的7是什么意思呢?通过这个等式就很容易理解了:7 = 4(读)+2(写)+1(执行)

第一个7对应着文件创建者,第二个7对应着与文件创建者同组的用户,第三个7对应者其他用户。这三类用户就是Linux下的所有用户了。也就是说系统中,所有用户都将获得对该文件的全部权限。

1
2
3
4
chmod 750 update.sh
# 文件创建者将获得对update.sh文件的读、写、执行权限
# 与文件创建者同组的用户将获得对update.sh文件的读、执行权限
# 其他用户对update.sh文件不具备任何权限

chomd可以配合加减号,来形象地表示权限赋予和剥夺操作。“+”表示添加权限,“-”表示取消权限。

1
chmod a-x # 所有用户将对失去对该文件的执行权限