【Linux】用户与用户组区别 /文件权限详解/文件元数据的实际含义

【Linux】一文带你详解linux用户与组, 文件权限以及文件元数据的含义

  • 前言
    • 一 . linux中的用户与用户组
      • 1. linux中的用户
        • 1> 用户分类
        • **2> linux用户: UID**
        • 3> 使用者标识 UID/GID的作用
        • 4> Linux中如何切换登陆用户
      • 2.linux中的用户组
        • 1> 用户组概念
        • 2> 用户组的类型
        • 3> 用户组: GID
    • 二 . linux中的文件
      • 1 . 文件访问者分类
      • 2 . 文件类型
      • 3 . 文件的访问权限
        • 1> rwx的具体含义
        • 2> rwx的几种组合方式
        • 3> rwx在普通文件中的含义
        • 4> rwx在目录文件中的含义
        • 5> 删除文件需要具备其父目录写权限的衍生问题
        • 6> 粘滞位的作用
    • 三 . 文件元数据
      • 1 . 元数据的划分
        • 1. 模式
        • 2. 硬链接数
        • 3. 文件所有者
        • 4 . 文件所属用户组
        • 5 . 文件大小
        • 6 .文件最近一次修改时间
        • 7 . 文件名
      • 2 . 一图速览文件元数据各部分含义
    • 四 . 如何更改文件权限, 属主, 属组
      • 1. 文件权限的不同表示方法
      • 2. 文件默认权限从何而来
        • 1 . 什么是 umask
        • 2 . umask的作用
        • 修改umask的值
      • 3. umask 四位八进制数中第一位含义
        • 1. 3个额外信息位
        • 2. chmod SUID, SGID和粘滞位的八进制值
      • 4. 修改文件权限,
      • 5. 修改文件属主和属组
      • 6. 修改文件所属组
      • 7. sudo指令的临时权限提升
        • 1. 编辑sudo权限命令
        • 2. /etc/sudoers 配置文件说明
        • 3. 为用户组配置 sudo权限

前言

在之前,我们先了解几个概念以便更方便的了解文件系统

一 . linux中的用户与用户组

1. linux中的用户

1> 用户分类

分为以下三类:

  • 超级用户(root): root, 具有一切操作权限。在Linux操作系统的字符界面, root用户的提示符为 #。
  • 系统用户: 系统用户时Linux系统正常工作所必需的内建的用户, 一般是用于管理服务所用。 系统用户不能用来登陆, 如 bindaemonlp等用户。
  • 普通用户:普通用户是为了让他人能够使用Linux系统资源而建立的, 新建的账户一般就是普通账号,在Linux操作系统的字符界面, 普通用户的提示符为 $。
2> linux用户: UID
  • 管理员(root): 0
  • 普通用户: 1~65535
  • 系统用户: 1~499(CentOS6) / 1~999(CentOS7)
  • 登录用户: 500~ 65535(CentOS6) / 1000~65535(CentOS7)
  • 解析库: /etc/passwd
3> 使用者标识 UID/GID的作用

系统解析用户的时候, 不能直接的去解析用户, 能够识别的是ID号,在创建用户时, 会产生一个与UID相同的用户组,这个用户组也会有一个GID

4> Linux中如何切换登陆用户

已知,Linux系统中可以用来登陆的用户为超级用户(root)和普通用户(userName)
那么,我们是如何在不打开新窗口的情况下进行用户切换呢? 答案是 su 指令
用户切换分为以下几种情况

  • root用户 切换至 普通用户
    - su userName // 在命令行提示符输入指令 su userName, 可直接切换为指定用户

在这里插入图片描述

  • 普通用户 切换至 root用户
    • su root // 在命令行提示符输入指令 su root (root可以省略), 敲击回车后, 会弹出Password : 在此输入root用户密码。 敲击回车后, 即可切换至 root 用户

在这里插入图片描述

  • 普通用户 切换至 普通用户
    - su userName //在命令行提示符输入指令 su userName, 敲击回车后, 会弹出Password : 在此输入相应用户密码。 敲击回车后, 即可切换至 指定的普通用户

补充:
- 当我们成功切换用户之后, 工作目录并没有改变, 依旧停留在切换用户之前的目录。

2.linux中的用户组

1> 用户组概念

用户组的概念:具有相同特征的用户的集合体,

  • 简而言之, 就是一组用户的集合。 就像一个数组中存放了同种类型的元素。
  • 那我们为什么要把用户放入到用户组中呢? 。答案是 : 方便。
    可以这样理解: 假如现在有100名普通用户,我想让这100名用户对同一个文件的权限是一致的,那我是一位用户一位用户地分配权限方便, 还是将这100名用户放入一个用户组中,然后给这个用户组分配权限方便呢? 那当然是给一个用户组分配权限更加方便啦。
  • 综上所述, 用户组就是对文件具有相同操作权限的用户的集合体
2> 用户组的类型
  • 分类1 : 私有组,公共组
  • 分类2 : 基本组,附加组
3> 用户组: GID
  • 管理员组(组名root): 0
  • 普通用户组: 1~65535
  • 系统用户组: 1~499(CentOS6) , 1-999(CentOS7)
  • 登录用户组: 500-65535(CentOS6), 1000-65535(CentOS7)

二 . linux中的文件

1 . 文件访问者分类

当访问一个文件时, 它的访问权限取决于访问者的身份

根据文件的创建及其所属组别分为以下三种

  • 文件的所有者: u – User
  • 文件的所属组 : g – Group
  • 其他用户: o – Other

2 . 文件类型

linux的核心理念 : Everything is file — 一切皆文件

  • -, 普通文件: 储存普通数据, 一般为字符串
  • d,目录文件: 储存的是一张表, 这张表记录了该目录下, 所有文件名与 inode 的映射关系。 d – directory
  • l, 软连接文件: 亦称符号链接文件,(类似于Windows的快捷方式)
  • b, 块设备文件: (硬盘,光驱),b – block
  • c, 字符设备文件: (键盘,显示器等串口设备), c – character
  • p, 管道文件
  • s, 套接口文件

3 . 文件的访问权限

1> rwx的具体含义

linux中文件的基本权限可分为以下三种

  • r : 读权限 ( 读取文件内容的权限 | 浏览目录信息的权限
  • w: 写权限 ( 修改文件内容的权限 | 删除或移动目录下所有文件的权限
  • x : 执行权限 ( 执行文件的权限 | 进入目录的权限
2> rwx的几种组合方式
linux表示 含义 linux表示 含义
r– 只读 r-x 可读可执行
-w- 只写 -wx 可写可执行
–x 只可执行 rwx 可读可写可执行
rw- 可读可写 无任何权限
3> rwx在普通文件中的含义

r:可以读取这个普通文件的名字和内容。
w:可以修改这个文件的内容和文件名。
x:该文件是否具有被执行的权限。

易错补充 :

  • 删除一个文件并不需要此文件的读写权限。 而是需要具备它所属目录文件的写权限
4> rwx在目录文件中的含义

r-x:

  • 可以使用cd指令进入该目录,
  • 可以使用指令ls获得该目录下存储情况,
  • 不能修改这个目录内部存储的文件(目录)的名字,
  • 也不能在该目录下新建文件和目录

-wx:

  • 可以使用cd指令该目录,
  • 无法该目录下的储存情况(指令ls 不可用),
  • 可以往该目录下添加、修改、删除文件。
  • 可以通过指令cat来读取该目录下的文件or目录的内容,
  • 由于得不到该目录下存储了那些文件,在不知情的情况下只能通过猜,cat + 文件名获得文件内容,所以这样依然不保密。

rw- :

  • 不能使用cd指令该目录,
  • 无法获取该目录文件储存的inode号,
  • 使用指令ls仅仅可以获得文件名和目录名, (无法获取inode号)
  • 也不能获得该目录下的文件的内容,(无法获取inode号)
  • 不能往该目录下添加、修改、删除文件。

–x:

  • 可以使用cd指令该目录,但是看不到存储情况,
  • 不能往该目录下添加、修改、删除文件。
  • 可以通过cat + xx(猜)来获得该目录下的文件的内容。
5> 删除文件需要具备其父目录写权限的衍生问题

由于,删除一个文件需要的是其所在目录的写权限。
那么当多个用户共用一个目录,在这个公有目录下可以随意创建删除自己的文件时,就会引发一个问题,每一个用户都具备该公有目录的写权限,可以随意删除他人或自己的文件,在这种情况下,如何避免用户所创建文件不被他人删除。

粘滞位的作用就是为了解决此情况。
【Linux】用户与用户组区别 /文件权限详解/文件元数据的实际含义_第1张图片
可以看到上图中 dir_1 三类用户都具有 w 权限, 当我们使用粘滞位
代码为: chmod +t dir_1
【Linux】用户与用户组区别 /文件权限详解/文件元数据的实际含义_第2张图片
使得目录文件 dir_1 最后一位的权限变为了 t。

6> 粘滞位的作用

粘滞位有什么作用呢?
当一个目录被设置 “粘滞位”, 那么该目录下的文件只能由:

  • 超级管理员(root)删除
  • 该目录文件所有者删除
  • 该文件所有者删除

三 . 文件元数据

   当我们在linux命令行中输入指令 ls -l 之后不仅可以看到
文件名, 还会看到一行数据, 这行数据叫做文件元数据。

如图中使用指令 ll后, 显示出来的两行数据
在这里插入图片描述
每行文件元数据分为七个部分

1 . 元数据的划分

1. 模式

- rw- r-- r-- 这串字符串一共有十个字符
我们将这十个字符分别以0 123 456 789进行表示。

  • 字符 0 ,它代表文件的类型
  • 字符 123, 它代表文件所有者的访问权限,取决于rwx的组合
  • 字符 456 , 它代表文件所属用户组的访问权限,也就是这个用户组的权限。取决于rwx的组合
  • 字符 789, 它代表除用户组之外的其他用户的访问权限。取决于rwx的组合
2. 硬链接数

什么是硬链接

  • 硬连接指通过索引节点来引用另一个文件。

什么是inode

  • 在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配了一个编号,这个编号称为索引节点号(Inode Index)。

多个文件对应于同一个inode

  • 在 Linux 中,多个文件名指向同一索引节点是存在的。
  • 如果两个文件指向同一索引节点,那么它们在目录项中的inode节点号相同

假如 文件A和文件B指向同一索引节点,则称A和B的链接状态完全相同,它们被称为指向文件的硬链接。内核记录了这个连接数,inode 的硬连接数显示为2。

总结 :
- 有几个文件名指向同一个inode , 那么这个文件的元数据中所记录的硬链接数就是几》

3. 文件所有者

一般为文件的创建者, 谁创建了该文件, 谁就会天然的成为该文件的所有者

  • 指令 ls -ahl 可以查看文件的所有者
  • 指令 chown [选项] 用户名 文件名 可以修改文件的所有者
  • 比如 chown root data 修改文件data的所有者为 root
4 . 文件所属用户组

当用户创建了一个文件后, 这个文件的所属组就是该用户所在的组

  • 指令 ls -ahl 可以查看文件所属组
  • 指令 chgrp [选项] 组名 文件名 可以修改文件所属组
  • 比如 chgrp -r root : 省略了 路径 ./ 表示把当前目录下的所有文件的所属组改为root组
5 . 文件大小

所占内存, 二进制字节数

6 .文件最近一次修改时间

最后一次修改文件内容或文件属性的时间
文件时间区分

  • Access 最后访问时间
  • Modify 文件内容最后修改时间
  • Change 属性最后修改时间
7 . 文件名

创建文件时为文件起的名称

2 . 一图速览文件元数据各部分含义

【Linux】用户与用户组区别 /文件权限详解/文件元数据的实际含义_第3张图片

四 . 如何更改文件权限, 属主, 属组

1. 文件权限的不同表示方法

      在理解文件的表示方法之前, 先来了解一下什么是 **八进制模式** 安全设置

八进制模式

  • 安全设置将一个rwx权限转换为 3位的二进制值, 然后这个二进制值可以由一个八进制表示。
  • 在二进制的表示中, 每个位置都是一个二进制位。
  • 就像, 如果读取权限是唯一的权限集, 那么其字母表示值就应该是 r-- , 对应的二进制值为100, 由八进制值表示则是4.
  • 这意味着, 是先将rwx的8种组合转化了8种二进制值, 再由二进制转化八进制值, 才有的八进制表示权限
  • 八进制模式通过3位八进制权限依次代表三种安全级别的权限值。(属主, 属组, 其他)
  • 像 664表示属主和属组具备读取和写入权限,而其他用户只具备读取权限
字符表示法 八进制表示法 二进制表示法 说明
r 4 100 仅可读
w 2 010 仅可写
x 1 001 仅执行
rw- 6 110 可读可写
r-x 5 101 可读可执行
-wx 3 011 可写可执行
rwx 7 111 可读可写可执行
0 000 无权限

2. 文件默认权限从何而来

   看了前面的内容我想你已经对文件权限有了个大概的认识, 那么这些
神奇的文件权限它又从何而来呢?  
   答案是 : 
   umask -- (user file-creatiopn mode mask) 用户文件创建掩码
   作用: umask命令为我们新创建的任何类型的文件设置默认权限
1 . 什么是 umask
  • umask – (user file-creatiopn mode mask) 用户文件创建掩码
  • 是Linux系统或类Linux系统的一个命令
  • 该命令由三个八进制数组成
  • 取值范围位 0 000 - 0 777
  • 第一个数字它表示一种特殊的安全特性, 之所以添加到取值范围中是因为在我们命令行提示符处, 我们使用 umask 指令,它的打印结果是四个八进制数, 第一个八进制数表示的是一种特殊的安全特性。
  • 这种安全特性我们暂时不过多解释, 下面会简略说明
2 . umask的作用

作用:
umask命令为我们新创建的任何类型的文件设置默认权限
通俗来讲, umask命令对应的三个八进制数决定了进程创建文件时,文件的默认权限。

我们先抛开umask不谈, 谈谈没有umask - 用户文件创建掩码时, 文件的完整权限是什么

  • 普通文件的完整权限会是 0666
    • 原因 : 创建普通文件一般都是用来读写, 所以默认情况下所有用户都具有读写权限, 但是没有可执行权限。 因此普通文件的默认权限是0666
  • 目录文件的完整权限会是 0777
    • 原因 : 目录文件的 x 权限为进入目录或者说是打开目录的权限, 所以这个权限必须要有,当然目录文件自然也包括读写权限。 因此目录i文件的默认权限就是 0777
  • 在这里的权限表示方式都为八进制
    • 6 代表 rw-
    • 7代表 rwx
    • 0 标识 这是一个八进制数
       上述的情况是在没有umask下文件的完整权限。
       在大多数Linux系统上, 默认umask的八进制值显示为0022,而此
时我们所创建的文件的默认权限并不是0666而是0644,这是如何发生的呢?
       umask值只是一个掩码, 它掩去你不希望文件在被创建时所拥有的
权限。
       它的具体过程是, 在创建文件时, 文件的完整权限 减去  umask
码值 最后得到文件的默认权限
       即: 
       文件默认权限 = 文件完整权限 - umask(权限掩码)

总结:

  • umask - 用户文件创建掩码, 也可以叫做文件掩码, 权限掩码, 甚至掩码, 叫法很多 。
  • 但是umasl值就是以三个八进制数分别表示着 属主, 属组, 其他 这三类文件访问者我们所不希望它们拥有的文件权限
  • 也就是说 umask 替我们掩去了这三类用户不同的权限
  • 文件默认权限 = 文件完整权限 - umask

补充说明:

  • 这里的 - (减号) 实际上是掩盖, umask与文件默认权限相同的部分执行掩盖,不同的部分不执行掩盖操作。 所以如果单纯依靠计算数值来算文件新默认权限是不准确的
  • 比如 文件的权限为 655 umask的值为 022
    那么按照 文件默认权限 = 文件完整权限 - umask
    是不是就是 655 - 022 = 633, 可实际上却是 644
    655 — “rwxrw-rw-” , 022 — “----w–w-”
    按照 umask的掩盖 “rwxrw-rw-” 被 “----w–w-” 掩盖后为 “rwxr–r–”
    而 “rwxr–r–” 对应的八进制数位 644
  • 所以在这里, 要准确理解 umask的掩盖, 掩盖掉你不想文件创建时被用户所拥有的权限。
修改umask的值
语法格式 效果
umask [三位八进制数] 将umask的值修改为指定值

补充:
例如 , umask 024 , 这是将umask值修改为了 024
注意, 不能超出范围 (000 - 777)

3. umask 四位八进制数中第一位含义

1. 3个额外信息位

Linux为每个文件和目录都存储了3个额外的信息位
- set user id(SUID) : 当文件由用户执行时, 程序将在文件所有者的权限下运行
- set group id(SGID): 对于普通文件, 程序将在文件用户组的权限下运行。
- set group id(SGID): 对于目录文件, 目录中创建的新文件使用目录用户组作为默认用户组。
- 粘滞位: 进程结束后, 使得文件依旧保留(粘滞)在内存中

2. chmod SUID, SGID和粘滞位的八进制值
二进制 八进制 描述
000 0 清空所有位
001 1 设置粘滞位
010 2 设置SGID位
011 3 设置SGID和粘滞位
100 4 设置SUID位
101 5 设置SUID位和粘滞位
110 6 设置SUID和SGID位
111 7 设置所有位

4. 修改文件权限,

chmod命令允许修改文件和目录的权限

  1. 八进制命令格式如下:
    • chmod [选项] [八进制权限] fileNam
      示例 :
      $ chmod 760 fileName // 设置该目录文件的权限为760
      $ ll fileName
      drwxrw---- 1 rich rich 0 sep 20 19:16 newfile
  2. 符号命令格式:
    • chmod [选项] [u或g或o或a] [+或-或=] [rwxXstugo…]fileName
    • u — 文件所有者
    • g — 文件所属组
    • o — 其他用户
    • a — 表示上述所有
    • (+)—添加权限
    • (-)— 减去权限
    • (=) — 为已有权限赋值
    • X — 用于指定执行权限, 仅当为目录文件或已经拥有执行权限时有效
    • s – 用于设置正在执行的UID或GID
    • t — 用于保存程序文本
    • u — 用于将权限设置为所有者的权限
    • g — 用于将权限设置为用户组的权限
    • o — 用于将权限设置为其他人的权限
  3. 选项 -R
    • 递归执行对文件权限的修改
      示例:
chmod o+r file       // 为文件file的其他用户添加读权限, o+r条目为其他用户添加了读取该文件的权限

chmod u-x file     // 从文件file的所有者的权限中删除执行权限。

5. 修改文件属主和属组

chown命令支持修改文件的所有者和文件的所属用户组

语法 chown [选项] [属主名称][:属组名称] 文件名
功能 修改文件的所有者和所属用户组
选项 -R , 递归式修改文件属主和属组

示例:


chown dan file        // 将file文件的所有者修改为 dan 

chown dan.dan file    // 将file文件的所有者和所属组均修改为 dan

chown .rich file      // 将file文件的所属组修改为 rich

chown dan. file   // 当且仅当文件属主和属组相同时, 该指令可同时修改属主和属组

注意: 普通用户在不具备权限的情况下, 无法更改文件的所属组, 所属主
可以搭配 sudo指令, 为其进行临时权限提升

6. 修改文件所属组

chgrp命令仅可支持修改文件的所属用户组

语法 chgrp [选项] [属组名称] 文件名
功能 仅可以修改文件的默认所属用户组
选项 -R, 以递归的方式修改文件属组

7. sudo指令的临时权限提升

      sudo是Linux系统中一种很常用的权限管理机制, 允许非root用户以特定的身份执行特定的命令。 
      sudo命令通过/etc/sudoers配置文件实现
1. 编辑sudo权限命令

sudo visudo

注意 : 不要直接编辑 /etc/sudoerrs文件, 因为这可能会导致配置文件错误,从而无法使用sudo命令

2. /etc/sudoers 配置文件说明
     sudoers文件包含sudo命令所需的所有配置信息。 默认情况下, sudoers文件只能由root用户编辑并修改。 sudoers文件的默认位置是/etc/sudoers。

sudoers文件的内容格式如下:


[指定用户名] [指定ip] = [指定身份] [指定命令]     // 具有该指定用户名且ip为指定ip的用户可以 以指定身份运行指定命令
         // Jin_Nian 192.168.1.1 = root comman    
         //  用户名为瑾年, ip为192.168.1.1 的用户可以 以root的身份运行某个指令

User_Alias ALIAS_NAME = username1, username2, ...  // User alias specification

Runas_Alias ALIAS_NAME = user1, user2, ...  //Runas alias specification

Host_Alias ALIAS_NAME = ip1, ip2, ...   // IP alias specification

Cmnd_Alias ALIAS_NAME = /bin/command1, /bin/command2, ...  //Command alias specifition  


  • username : 表示用户名
  • host : 表示主机名或ip地址
  • runas : 表示以那个用户的身份运行命令, 默认为root
  • command : 表示可执行的命令或命令程序, 通常为root身份下才可以执行。
3. 为用户组配置 sudo权限
      默认情况下, sudo只能给单个用户授权, 但也可以为用户组或者别名授权。 具体操作如下:

sudo groupadd sudoers    // 添加一个用户组

sudo usermod -aG sudoers username   // 将用户添加至该用户组中

%sudoers ALL =(ALL) ALL   // 修改sudoers配置文件, 编辑sudoers文件, 在文件末尾添加该内容。

sudo命令介绍:

语法 sudo [选项] [命令]
功能 以指定身份执行某个指令

示例:

  • sudo apt-get update // 以root身份执行 apt-get update命令
  • sudo -s /bin/bash // 以root的身份切换至指定的shell 比如以root身份切换至 bash - shell
  • sudo -l // 列出当前用户可用的sudo权限

你可能感兴趣的:(Linux笔记,linux)