权限管理
学习目标
- 能够非常清楚的知道某个文件或目录的权限结构
- 能够对文件或目录的权限进行修改
- 能够对文件或目录的所属用户所属组进行修改
一、权限概述
1、权限介绍
linux是一个多用户多任务的系统,为了让各个用户能够具有保密数据的文件。文档的权限管理就很重要。
权限是指某个特定用户具有特定的系统资源使用权利
linux系统中一般将文档存/取访问的身份分为3个类别:
owner(拥有者)、group(所属组)、others(其他用户)
三种身份各有read、write、execute的权限
read可读权限:
对于文件夹来说,读权限影响用户是否能够列出目录结构
对于文件来说,读权限影响⽤户是否可以查看文件内容
write可写权限:
对文件夹来说,写权限影响用户是否可以在⽂件夹下"创建/删除/复制到/移动到"文档
对于文件来说,写权限影响用户是否可以编辑文件内容
execute可执行权限:
一般都是对于⽂件来说的,特别脚本⽂件。
对于⽂件来说,执行权限影响⽂件是否可以运行。
对于⽂件夹来说,执行权限影响对应的⽤户是否可以在⽂件夹内执行指令。
2、身份介绍
owner,拥有者(所有者),默认为文档的创建者
group,所属组,一般是拥有者所属的主。
other,其他用户,拥有者和所属组内用户以外的用户
root用户,超级管理员,拥有最高权限的用户,设置文档权限不必考虑root用户。
二、权限管理
1、查看权限
[root@itcast ~]# ls -l readme.txt -rw-r--r--. 1 root root 15 3月 11 11:41 readme.txt # 查看目录的权限 [root@itcast ~]# ll -d 目录
档案类型及权限:
-
第一位代表文件类型。linux不像windows使用扩展名表示文件类型。而是使用权限位第一位表示文件类型。常见类型有下列这些。
-:普通文件。
d:目录文件。linux中一切皆文件,目录也是文件的一种。
l:软连接文件。相当于windows中的快捷方式。
b:块设备文件。特殊设备文件,存储设备都是这种文件。
c:字符设备文件。特殊设备文件,输入设备一般都是这种文件,如鼠标,键盘等。
-
第2~4位代表文件所有者的权限。
r:read,读取权限
w:write,写权限
x:execute,执行权限
如果有字母,则代表拥有对应的权限;如果是"-",代表没有对应的权限。
-
第5~7位代表文件所属组的权限
-
第8~10位代表其他人的权限
2、设置权限
2.1 命令格式
命令 | 作用 |
---|---|
chmod [选项] 权限模式 文档名 | 修改文档的权限 |
2.2 命令选项
选项 | 含义 |
---|---|
-R | 递归设置权限,文档类型为文件夹的时候 |
2.3 权限模式
文档需要设置的权限信息,文档可以是文件,也可以是文件夹,可以是相对路径也可以是绝对路径
注意:要给文档设置权限,操作者必须是root或者文档的拥有者
字母形式
权限设置三步走:
1. 给谁设置(用户身份)? u、g、o还是a
2. 怎么设置(赋予方式)? 用+、-还是=
3. 设置成什么样的权限?(权限) 用r、w还是x
-
用户身份
u:代表文档拥有者(user)
g:代表所属组(group)
o:代表其他人(other)
a:代表全部身份(all)
-
赋予方式
+:加入权限
-:减去权限
=:设置权限
-
权限
r:读取权限(read)
w:写权限(write)
x:执行权限()
注:
- 在设置权限时没有指定身份,默认给所有身份设置
- 同时设置多个身份权限时,每个身份之间通过英文逗号分开
案例
# 1. 为word.txt文件设置权限(u=rwx, g=rw, o=r) [root@localhost ~]# chmod u=rwx,g=rw,o=r word.txt
在权限设置中,如果有两部分权限一样可以合在一起写
chmod u=rwx,g=rwx
等价于 chmod ug=rwx
# 2. 创建hello.sh文件,添加x可执行权限 [root@localhost ~]# chmod ugo+x hello.sh # 3. 为文件夹设置权限(删除o的x权限) [root@localhost ~]# chmod -R o-x nginx
数字形式
数字形式是另一种设置权限的方式。在技术论坛中经常会看到类似于这样的权限设置chmod 777 test.txt
, 这种形式就是数字权限
chmod 777 test.txt 第一个7为拥有者设置可读可写可执行的权限 4 + 2 + 1 第二个7为所属组设置可读可写可执行的权限 第三个7为其他人设置可读可写可执行的权限
- 4:代表"r"权限
- 2:代表"w"权限
- 1:代表"x"权限
- 0:没有权限
案例
# 1. 创建一个readme.txt文件,修改权限为:所属用户可读可写可执行,所属组可读可写,其他用户可读 [root@localhost ~]# chmod 766 readme.txt [root@localhost ~]# chmod u=rwx,g=rw,o=rw readme.txt # 2. 修改readme.txt文件,修改权限为:所属用户可读可写,所属组可读,其他用户可读 [root@localhost ~]# chmod 644 readme.txt [root@localhost ~]# chmod u=rw,g=r,o=r readme.txt # 3. 创建一个层级目录nginx/html/index.html,设置nginx目录及子文档的权限为:所有者、所属组及其他用户都是可读可写可执行 [root@localhost rh]# chmod -R 777 nginx [root@localhost rh]# chmod -R u=rwx,g=rwx,o=rwx
面试题
用超级管理员设置文档的权限命令是chmod -R 731 nginx
,请问这个命令有什么不合理的地方
拥有者:7 = 4 + 2 + 1 = 读 + 写 + 执行 所属组:3 = 2 + 1 = 写 + 执行 其他用户:1 = 执行 问题在731中的3权限,3表示写+执行权限,但是写必须能够打开才可以写,因此必须具备可读权限,因此此权限不合理 注:实际工作中不要设置这种单独出现2、3的问题权限。
练习题
- 使用root用户设置文件/root/nginx的权限为:拥有者全部权限,所属组读和执行权限,其他用户没有权限。
- 使用root用户设置文件/root/readme.txt文件的权限为:拥有者所有权限,所属组读写,其他用户只读。
3、特别说明
linux中,如果要删除一个文件,不是看文件有没有对应的权限。而是看文件所在的目录是否有写和执行权限。如果有才可以删除
三、所有者和所属组管理
1、chown
命令格式
命令 | 作用 |
---|---|
chown [选项] 所有者[:所属组] 文件或目录 | 修改文件或目录的所有者和所属组 |
命令选项
命令 | 含义 |
---|---|
-R | 递归设置权限,为目录中的子目录及所有文件设置权限 |
注意:普通用户不能修改文件的所有者,即使自己是这个文件的所有者也不行
案例
# 1.修改readme.txt的所有者和所有组为itcast [root@localhost ~]# chown itcast:itcast readme.txt # 2.修改nginx目录的所有者为itcast [root@localhost ~]# chown -R itcast nginx
2、chgrp
命令格式
命令 | 作用 |
---|---|
chgrp [选项] 所属组 文件或目录 | 修改文件的所属组 |
命令选项
选项 | 含义 |
---|---|
-R | 递归设置权限 |
案例
# 修改nginx的所有组为itcast [root@localhost ~]# chgrp -R itcast nginx
四、umask默认权限(了解)
使用umask可以获取新建文件和目录默认权限
umask表示文档权限的反向掩码,遮罩码。
1、查看umask权限
# 显示umask权限 [root@itcast ~]# umask 0022
2、umask权限计算
先了解下新建文件和目录的默认最大权限。
- 对文件来讲,新建文件的默认最大权限是666,没有执行权限。因为执行权限(x)对文件来讲比较危险,不能在新建文件的时候默认赋予,而必须通过用户手工赋予。
- 对目录来讲,新建目录的默认最大权限是777,因为对目录而言,执行权限(x)仅仅代表进入目录,所以即使建立新目录时直接默认赋予,也没有什么危险。
按照字母方式来计算默认权限。
-
文件默认权限最大只能是666,而mask的值是022
"
-rw-rw-rw-
" 减去 "-----w--w-
",等于"-rw-r--r--
" -
目录的默认权限最大是777,而umask的值是022
"drwxrwxrwx" 减去 "
d----w--w-
", 等于"drwx-r-xr-x
"
按数字方式计算默认权限
-
文件默认权限最大只能是666,而umask的值是022
"
666
" 减去 "022
",等于"644
" -
目录的默认权限最大是777,而mask的值是022
"777" 减去 "
022
", 等于"755
"