文件所有权和访问权限

4. 文件所有权和访问权限

4.1 概述

在Linux系统中,每一个文件或目录都有拥有者(文件属主),都属于某个或某些组(文件属组)。

Linux给文件设定了一定的访问权限,分三级权限:

  • 文件所有者、
  • 与文件所有者同组的用户、
  • 其他用户。

对文件的访问主要是三种处理操作:读取、写入和执行

4.2 普通文件的所有权和访问权限

文件三种访问身份:是指对文件有三种访问身份:

  1. user owner:文件拥有者,文件属主;
  2. group owner:文件属组;
  3. other owner:不属于前两种的用户访问者;

文件权限:是一种限制用户对文件操作的规则,Linux系统中文件访问权限通常分为三类:

  1. r:可读,可以使用类似cat等命令查看文件内容;
  2. w:可写,修改文件内容;
  3. x:可执行,executable,可以在命令提示符下当作命令提交给内核运行;

4.3 Linux目录的所有权和访问权限

目录三种访问身份:是指对目录也有三种访问身份:

  1. user owner:目录拥有者,目录属主;
  2. group owner:目录属组;
  3. other owner:不属于前两种的用户访问者;

目录权限:

  1. r:可以对此目录执行ls以列出目录内容;
  2. w:可以在此目录创建、删除文件;
  3. x:可以使用cd切换进此目录,也可以使用ls -l查看内部文件的详细信息。

关于目录的读权限

  • 允许读取目录包含的内容,
  • 如果只有读权限,而没有x权限,只能列出目录下的文件或子目录名称,而不能查看其属性或者具体内容。
img

权限的八进制表示:

  1. 0 000 ---:无权限
  2. 1 001 --x: 执行
  3. 2 010 -w-: 写
  4. 3 011 -wx: 写和执行
  5. 4 100 r--: 只读
  6. 5 101 r-x: 读和执行
  7. 6 110 rw-: 读写
  8. 7 111 rwx: 读写执行
#例如:
755:rwxr-xr-x
640:rw-r----- 
660:rw-rw----
775:rwxrwxr-x

4.3 修改文件的所有权

Linux下有两个命令用于修改所有权:

  • chgrp修改文件属组
  • chown修改文件属主。

4.3.1 chgrp命令

chgrp命令:用来改变文件或目录所属的用户组。【使用者必须是超级用户】

  • 组名:可以是用户组的ID,也可以是用户组的组名,但是要求组名必须在/etc/group文件中存在。
  • 文件名:可以是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。
#一般格式:
chgrp [选项] 组名 文件名

#常用选项:
#	-R 递归式地改变指定目录及其下面的所有子目录和文件的用户组

#示例:将/home/tianjunfeng/mu1及其子目录下的所有文件的用户组改为tianjunfeng3:
chgrp -R tianjunfeng3 /home/tianjunfeng/mu1
img

4.3.2 chown命令

chown命令:改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。【注意:只有超级用户才可以使用该命令。】

  • 用户可以是用户或者是用户ID,
  • 用户组可以是组名或组ID。
  • 文件名可以使用由空格分开的文件列表,在文件名中可以包含通配符。
#一般格式:
chown [选项] 用户或组 文件名
chown [-R] 属主名:属组名 文件名

#选项:
#	-R 递归式地改变指定目录及其所有子目录、文件的文件主。-v 详细列出该命令所做的工作。

#举例:
chown root /u          #Change the owner of /u to “root”.
chown root:staff /u      #Likewise, but also change its group to “staff”.
chown -hR root /u      #Change the owner of /u and subfiles to “root”.

#示例:将目录/home/tianjunfeng/mu1及其下面的所有文件、子目录的文件主改成tianjunfeng4:
chown -R tianjunfeng4 /home/tianjunfeng/mu1
img

4.4 修改文件访问权限:chmod

chmod命令是非常重要的,用于改变文件或目录的访问权限。

该命令有两种用法:

  • 一种是包含字母和操作符表达式的文字设定法;
  • 另一种是包含数字的数字设定法。

4.4.1 文字设定法

#命令格式
chmod [who] [+ | - | = ] [mode] 文件名

命令中各选项的含义为:

  1. 操作对象who:可以是下述字母中的任一个或者它们的组合:
    • u 表示“用户(user)”,即文件或目录的所有者。
    • g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
    • l 表示“其他(others)用户”。
    • a 表示“所有(all)用户”。它是系统默认值。
  2. 操作符号可以是:
    • + 添加某个权限。
    • u 取消某个权限。
    • = 赋予给定权限并取消其他所有权限(如果有的话)。
  3. 设置mode:所表示的权限可用下述字母的任意组合:
    • r 可读。
    • w 可写。
    • x 可执行。
    • X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。
    • s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
    • t 保存程序的文本到交换设备上。
    • u 与文件属主拥有一样的权限。
    • g 与和文件属主同组的用户拥有一样的权限。
    • o 与其他用户拥有一样的权限。
  4. 文件名:以空格分开的要改变权限的文件列表,支持通配符。

在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:

#使同组和其他用户对文件example 有读权限。
chmod g+r,o+r example

下面是一些具体例子:

  1. 例1:即设定文件1.txt的属性为:

    chmod a+x 1.txt
    
    • 文件属主(u) 增加执行权限
    • 与文件属主同组用户(g) 增加执行权限
    • 其他用户(o) 增加执行权限
    img
  2. 例2:即设定文件1.txt的属性为:

    chmod ug+w,o-x 1.txt
    
    • 文件属主(u) 增加写权限

    • 与文件属主同组用户(g) 增加写权限

    • 其他用户(o) 删除执行权限

      img
  3. 例3:将文件1.txt的执行权限删除,它设定的对象为所有使用者。

    chmod a–x 1.txt
    
    chmod –x 1.txt
    
    chmod ugo–x 1.txt
    

    imgimg

4.4.2 数字设定法

我们必须首先了解用数字表示的属性的含义:

  • 0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。
  • 所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。

例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。

#数字设定法的一般形式为:
chmod [mode] 文件名
  1. 例1:即设定文件2.txt的属性为:

    $ chmod 644 2.txt
    $ ls –l
    -rw-r--r-- 1 tianjunfeng tianjunfeng 315 Jun 12 15:55 2.txt
    
    • 文件属主(u)tianjunfeng 拥有读、写权限

    • 与文件属主同组人用户(g) 拥有读权限

    • 其他人(o) 拥有读权限

      img
  2. 例2:即设定wch.txt这个文件的属性为:

    $ chmod 750 wch.txt
    $ ls –l
    -rwxr-x--- 1 tianjunfeng tianjunfeng 630 Jun 12 16:012 wch.txt
    
    • 文件主本人(u)tianjunfeng可读/可写/可执行权

    • 与文件主同组人(g) 可读/可执行权

    • 其他人(o) 没有任何权限

      img

4.5 文件和目录默认权限

用户创建了一个文件或者目录,默认是什么权限呢?

  • 这个跟环境掩码有关系,全局环境掩码是配置在/etc/profile里面。
  • 用户可以在自己根目录下创建.bashrc文件写入umask xxx来设置私有掩码。
  • 当然,也可以使用umask命令在当前终端设置掩码,不过下次登录后又会被重置了。
  • 在命令行直接使用umask命令即可查看当前环境的掩码,umask xxxx可以临时更改当前环境的掩码。
#umask命令:指定在建立文件时预设的权限掩码。
#语法格式:

umask [-S][权限掩码]

补充说明:权限掩码有4个八进制位

  • 第一位是所谓的guid,一般为0或者直接不写第1位,而使用3位的掩码。
  • 将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限。

例如:系统创建目录默认拥有rwxrwxrwx权限,也就是777(八进制);Linux为了安全起见,不允许新建的文件带有x属性,系统创建文件默认拥有rw-rw-rw-权限,也就是666(八进制)。默认文件或目录权限与掩码做减法运算,就是用户创建文件或目录的最终默认权限。例如:掩码是022(或者0022),则新建目录的权限是755,也就是rwxr-xr-x;新建的文件权限是644,也就是rw-r--r--。下表显示了计算过程:

权限八进制 777 666
对应八进制转换成二进制 111111111 110110110
掩码(022八进制) 000010010 000010010
减法运算结果(二进制) 111101101 110100100
转成对应八进制 755 644
  1. 查看系统的umask值例子:

    img
  2. 设置系统umask例子:umask -S

    img
  3. 设置新的umask后,新建目录和文件并查看对于的权限变化例子:

    img
  4. 关于umask掌握二个要点:

    • 文件基数为666,目录基数为777,即文件不设x位,目录可设x位。
    • chmod是设哪个位,那么哪个位就有权限;而umask是设哪个位,则哪个位上就没权限,只要记住umask是从权限中“拿走”相应的位即可。

总结

权限控制
posted @ 2024-06-16 12:55  Sunflower0312  阅读(173)  评论(0)    收藏  举报