学习目标

  1. 能够非常清楚的知道某个文件或目录的权限结构
  2. 能够对文件或目录的权限进行修改
  3. 能够对文件或目录的所属用户所属组进行修改

一、权限概述

1、权限介绍

linux是一个多用户多任务的系统,为了让各个用户能够具有保密数据的文件。文档的权限管理就很重要。

权限是指某个特定用户具有特定的系统资源使用权利

linux系统中一般将文档存/取访问的身份分为3个类别:

owner(拥有者)、group(所属组)、others(其他用户)

三种身份各有read、write、execute的权限

  1. read可读权限:
  2. 对于文件夹来说,读权限影响用户是否能够列出目录结构
  3. 对于文件来说,读权限影响⽤户是否可以查看文件内容
  4. write可写权限:
  5. 对文件夹来说,写权限影响用户是否可以在⽂件夹下"创建/删除/复制到/移动到"文档
  6. 对于文件来说,写权限影响用户是否可以编辑文件内容
  7. execute可执行权限:
  8. 一般都是对于⽂件来说的,特别脚本⽂件。
  9. 对于⽂件来说,执行权限影响⽂件是否可以运行。
  10. 对于⽂件夹来说,执行权限影响对应的⽤户是否可以在⽂件夹内执行指令。

2、身份介绍

owner,拥有者(所有者),默认为文档的创建者

group,所属组,一般是拥有者所属的主。

other,其他用户,拥有者和所属组内用户以外的用户

root用户,超级管理员,拥有最高权限的用户,设置文档权限不必考虑root用户。

二、权限管理

1、查看权限

  1. [root@itcast ~]# ls -l readme.txt
  2. -rw-r--r--. 1 root root 15 3 11 11:41 readme.txt
  3. # 查看目录的权限
  4. [root@itcast ~]# ll -d 目录

权限管理 - 图1

权限管理 - 图2

档案类型及权限:

  • 第一位代表文件类型。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. 权限设置三步走:
  2. 1. 给谁设置(用户身份)? ugo还是a
  3. 2. 怎么设置(赋予方式)? 用+、-还是=
  4. 3. 设置成什么样的权限?(权限) rw还是x
  • 用户身份
    u:代表文档拥有者(user)
    g:代表所属组(group)
    o:代表其他人(other)
    a:代表全部身份(all)

  • 赋予方式
    +:加入权限
    -:减去权限
    =:设置权限

  • 权限
    r:读取权限(read)
    w:写权限(write)
    x:执行权限()

注:

  1. 在设置权限时没有指定身份,默认给所有身份设置
  2. 同时设置多个身份权限时,每个身份之间通过英文逗号分开

案例

  1. # 1. 为word.txt文件设置权限(u=rwx, g=rw, o=r)
  2. [root@localhost ~]# chmod u=rwx,g=rw,o=r word.txt

在权限设置中,如果有两部分权限一样可以合在一起写

chmod u=rwx,g=rwx 等价于 chmod ug=rwx

  1. # 2. 创建hello.sh文件,添加x可执行权限
  2. [root@localhost ~]# chmod ugo+x hello.sh
  3. # 3. 为文件夹设置权限(删除o的x权限)
  4. [root@localhost ~]# chmod -R o-x nginx

数字形式

数字形式是另一种设置权限的方式。在技术论坛中经常会看到类似于这样的权限设置chmod 777 test.txt, 这种形式就是数字权限

  1. chmod 777 test.txt
  2. 第一个7为拥有者设置可读可写可执行的权限 4 + 2 + 1
  3. 第二个7为所属组设置可读可写可执行的权限
  4. 第三个7为其他人设置可读可写可执行的权限
  • 4:代表”r”权限
  • 2:代表”w”权限
  • 1:代表”x”权限
  • 0:没有权限

案例

  1. # 1. 创建一个readme.txt文件,修改权限为:所属用户可读可写可执行,所属组可读可写,其他用户可读
  2. [root@localhost ~]# chmod 766 readme.txt
  3. [root@localhost ~]# chmod u=rwx,g=rw,o=rw readme.txt
  4. # 2. 修改readme.txt文件,修改权限为:所属用户可读可写,所属组可读,其他用户可读
  5. [root@localhost ~]# chmod 644 readme.txt
  6. [root@localhost ~]# chmod u=rw,g=r,o=r readme.txt
  7. # 3. 创建一个层级目录nginx/html/index.html,设置nginx目录及子文档的权限为:所有者、所属组及其他用户都是可读可写可执行
  8. [root@localhost rh]# chmod -R 777 nginx
  9. [root@localhost rh]# chmod -R u=rwx,g=rwx,o=rwx

面试题

用超级管理员设置文档的权限命令是chmod -R 731 nginx,请问这个命令有什么不合理的地方

  1. 拥有者:7 = 4 + 2 + 1 = + + 执行
  2. 所属组:3 = 2 + 1 = + 执行
  3. 其他用户:1 = 执行
  4. 问题在731中的3权限,3表示写+执行权限,但是写必须能够打开才可以写,因此必须具备可读权限,因此此权限不合理
  5. 注:实际工作中不要设置这种单独出现23的问题权限。

练习题

  1. 使用root用户设置文件/root/nginx的权限为:拥有者全部权限,所属组读和执行权限,其他用户没有权限。
  2. 使用root用户设置文件/root/readme.txt文件的权限为:拥有者所有权限,所属组读写,其他用户只读。

3、特别说明

linux中,如果要删除一个文件,不是看文件有没有对应的权限。而是看文件所在的目录是否有写和执行权限。如果有才可以删除

三、所有者和所属组管理

1、chown

命令格式

命令 作用
chown [选项] 所有者[:所属组] 文件或目录 修改文件或目录的所有者和所属组

命令选项

命令 含义
-R 递归设置权限,为目录中的子目录及所有文件设置权限

注意:普通用户不能修改文件的所有者,即使自己是这个文件的所有者也不行

案例

  1. # 1.修改readme.txt的所有者和所有组为itcast
  2. [root@localhost ~]# chown itcast:itcast readme.txt
  3. # 2.修改nginx目录的所有者为itcast
  4. [root@localhost ~]# chown -R itcast nginx

2、chgrp

命令格式

命令 作用
chgrp [选项] 所属组 文件或目录 修改文件的所属组

命令选项

选项 含义
-R 递归设置权限

案例

  1. # 修改nginx的所有组为itcast
  2. [root@localhost ~]# chgrp -R itcast nginx

四、umask默认权限(了解)

使用umask可以获取新建文件和目录默认权限

umask表示文档权限的反向掩码,遮罩码。

1、查看umask权限

  1. # 显示umask权限
  2. [root@itcast ~]# umask
  3. 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