第6章 文件权限
酒能红双颊,愁能雪白头
文件权限概述
Linux为了保证系统中每个文件的安全,引入了文件权限机制。针对于系统中的每一个文件Linux都可以提供精确的权限控制。它可以做到不同的用户对同一个文件具有不同的操作权利。而通常这个权利包括以下3个:
- 读的权利(Read,简称r)
- 写的权利(Write,简称w)
- 执行的权利(eXecute,简称x)
具体的权限值:rwx(读、写、执行)。这个我们已经知道了。但是上面还提到了“不同的用户对同一个文件可以有不同的权限”中“不同的用户”指的是哪些用户呢?所以这个文件的用户也是包括3类用户:
- 文件拥有者(User,简称U):该文件的创建人
- 同组用户(Group,简称G):和创建人在同一组的用户
- 其他组用户(Other,简称O):和创建人不在同一组的用户
这就是非常著名的UGO模型。也就是说一个文件的权限包括三组:
- 第一组U:我们可以给文件的创建者设置rwx权限。
- 第二组G:我们可以给文件创建者的同组人员设置rwx权限。
- 第三组O:我们可以给和文件创建者不在同一组的人员设置rwx权限。
查看文件权限
采用“ls -l”命令可以查看文件的具体权限,如下:
权限信息在哪里呢?看下图:
每一个文件或目录采用ls -l查看之后,第一个字段描述了文件类型+文件的权限。第一个字段共10个字符:
- 第1个字符:代表文件的类型,- 代表文件,d代表目录
- 其实Linux中文件的类型有7种:
- 代表普通文件
- d 代表目录
- l 代表链接(软链接:快捷方式)
- b 块设备(硬盘,软盘等存储设备)
- c 字符设备(通常以字节流的方式访问)
- p 管道文件(主要用于进程间通讯)
- s 套接字文件(主要用于网络通讯)
- 其实Linux中文件的类型有7种:
- 第2,3,4个字符:代表文件创建者对该文件的权限。
- 第5,6,7个字符:代表与文件创建者在同一组的用户对该文件的权限。
- 第8,9,10 个字符:代表其他组人员对该文件的权限。
关于文件权限的9个字符中包含四种字符,分别是:r、w、x、-,他们代表什么含义:
- r:读权限
- w:写权限
- x:执行权限
- -:无权限
基于UGO设置文件权限
修改权限的命令是chmod,如果采用UGO方式修改权限的话,大致语法是这样的:
1 | chmod g+w Hello.java |
1 | chmod g+w, o+w Hello.java |
1 | chmod g-w, o-w Hello.java |
我们查看HelloWorld.java文件的权限:
文件拥有者:读和写
同组人员:读
其他组人员:读
我们将文件拥有者的写权限删除:
我们尝试使用vim命令编辑HelloWorld.java文件,当你使用vim编辑时:
发现该文件是只读的,不支持编辑。
我们再把写的权限加上:
再使用vim命令打开该文件:
可以看到,这个时候文件可以编辑了。
注意:在测试同组人员的权限时,一定要注意创建者创建文件之后,文件所对应的组是否修改了。怎么修改文件所属组:chgrp dev Test.java(将Test.java文件所属组修改为dev)
基于421设置文件权限
421采用数字来表示不同的权限。
- 4代表读
- 2代表写
- 1代表执行
例如:如果让一个用户读、写、执行权限都有的话,就是4 + 2 + 1 = 7,那么7这个数字就代表rwx的权限都具备。如果是5就表示4+1的组合,表示有r和x的权限。如果是6就表示4+2的组合,表示有r和w的权限。如果是0就表示无任何权限。
通过421这几个数字的不同组合来表示不同的权限,那么它有多少种不同的组合呢:
- 0:无权限
- 1:x
- 4:r
- 5:r + x
- 6:r + w
- 7:r + w + x
也就是说一共6个数字:0 1 4 5 6 7
那么采用421方式设置权限应该怎么做呢,比如:如何给文件拥有者设置权限,如何给同组人员设置权限,如何给其他组人员设置权限?语法是这样的:
1 | chmod 三个数字 文件名 |
例如:chmod 755 HelloWorld.java
第一个数字7是文件拥有者的权限,第二个数字5是同组人员的权限,第三个数字5是其他组人员的权限。
也就是说文件拥有者的权限是rwx,同组人员是r-x,其他组人员是:r-x
再如:chmod 700 HelloWorld.java
表示文件拥有者权限:rwx,同组人员无权限,其他组人员无权限
chown修改文件拥有者
在 Linux 中,可以使用 chown
命令来修改指定文件或目录的拥有者和所属组。chown
命令的基本语法如下:
1 | chown [选项]... [所有者][:[所属组]] 文件... |
其中,所有者
和 所属组
可以是用户名或用户 ID、组名或组 ID,如果省略 :
和 所属组
,则默认为修改文件的所有者。
下面是一些常用选项:
-R
:递归修改,包括子目录和文件。
例如,将 /home/user/file.txt
文件的所有者修改为 root
用户,可以使用如下命令:
1 | sudo chown root /home/user/file.txt |
将 /home/user/dir/
目录及其子目录和文件的所有者都修改为 userA
用户,所属组修改为 groupA
组,可以使用如下命令:
1 | sudo chown -R userA:groupA /home/user/dir/ |
注意,在使用 chown
命令时,需要有足够的权限才能修改文件或目录的拥有者和所属组。一般需要使用 sudo
命令或使用具有相应权限的用户来执行。