Linux [权限]

Linux 权限

  • Linux用户分类
    • 切换成root
      • 方法
      • 例子
    • 切换成普通用户
      • 方法
      • 例子
    • 短暂提权
  • 什么是权限
    • 理论知识
    • 展示区域
  • 修改权限
    • (1)修改文件属性
      • 1. 采用 w/r/x的形式
      • 2. 采用八进制的形式
    • (2)修改身份
      • 1. 修改拥有者
      • 2. 修改所属组
      • 3. 修改拥有者 && 所属组
  • 问题区
    • 问题1
    • 问题2
    • 问题3

Linux用户分类

通过前面的学习, 我们知道了Linux下的用户分成两类:

  1. 超级用户(root): 一般不受权限的限制
  2. 其他用户: 会受到权限的限制

切换成root

方法

su — — 身份切换过去, 但是家目录不变(并不是重新登录了一下)
su - — — 家目录发生变化, 重新登录一下

例子

Linux [权限]_第1张图片

  • 我们发现:
  • su(-) 默认指令就是切换到root的
  • 由普通用户切换到root, 都要输入root的密码
  • 回退到上一个用户 — — exit 或者 ctrl + d

切换成普通用户

方法

su 普通用户

  1. 由root切换到普通用户 — — 不用输入密码
  2. 由A普通用户切换到B普通用户 — — 需要输入B用户的密码

例子

Linux [权限]_第2张图片

  • 通过上面两种用户的相互切换, 我们不难发现:
    root用户的权限 > 普通用户的权限

短暂提权

相信, 以后工作的大部分时间我们用的都是普通用户
那么如果有一种需求 — — 需要短暂使用root用户权限, 那么我们该怎么办?
sudo 指令 — — 对这个指令使用root用户的权限

Linux [权限]_第3张图片
️这个的使用结果为什么事失败的啊??

  • 因为我们现在都是用 adduser 来创建用户, 然后系统不信任你⇒ 因为你没有在系统信任的白名单中(在一个特定的配置文件中)
    ️那么失败的原因是理解了. 为什么要输入的是 mutong用户的密码 啊?
  • 因为用户如果已经在系统信任的白名单中⇒ 那么输入 mutong用户的密码来获得短暂提权, 这不是理所应当的嘛

什么是权限

理论知识

️日常生活中, 我们所熟知的权限是什么? 包含哪几个方面?

  • 分析问题, 我们要全面的进行分析, 从特殊中总结出共性
    一般是从 主体客体这两个方面进行分析
    主体:
    第一个例子: 当我们观看腾讯的VIP视频, 被告知没有权限去观看. ⇒ 人的身份/角色
    客体:
    第二个例子: 我们能不能把练习纸当做面包吃掉用来填饱 ⇒ 事物的原本属性
    ⇒ 日常生活中的权限总结起来就是 人的身份/ 角色 + 事物的原本属性
    由于, Linux下一切都是文件⇒ 事物的属性 ⇒ 文件的属性

Linux下的权限 = 人的身份/ 角色 + 文件的属性

️那么身份有哪一些? 文件有哪些属性呢?

  • 在Linux中:
    用户的身份有三种: 拥有者, 所属组, 其他
    文件的属性有三种: 可读(r), 可写(w), 可执行(x)

️前面说用户分类有root 和 普通用户; 现在身份的划分又有 拥有者, 所属组 和 其他. 这很冲突啊?

  • 现在我们这样想:
    普通用户是我们学生, root用户是校长
    但是不管是学生还是校长, 在日常生活中都有着不同的角色, 比如父亲, 孩子… …
    在Linux中, 身份只有这三种可能性. 不管是普通用户还是root用户, 都会有这三种身份的可能性.
    ⇒ 这不是冲突的, 可以说是身份是用户的一种补充吧~~
  • 身份 和 文件属性都已经明白了, 那么在哪里可以看我这个用户有哪些权限呢?

  • Linux [权限]_第4张图片
    Linux [权限]_第5张图片

️拥有者, 所属组看见了, 其他呢?

  • 考虑到其它 太多了⇒ Linux采用的是 if (拥有者) else if (所属组) else (其它) 这样的一个逻辑链路来进行 认定用户身份的.

️上面 muyu 即是拥有者 也是所属组, 那么权限是两个叠加吗?


  • Linux [权限]_第6张图片
    上面的例子中, muyu即是拥有者也是所属组. 拥有者的权限只有 r , 而所属组的权限是 r w
    按照我们的猜想, 应该是权限的叠加 ⇒ 那就意味着muyu 的权限是 r w
    当我们 查看该文件时, 是OK的; 但是当我们写一段东西到该文件就不行了

    其实, 具体的一个用户, 权限的选择只能是一个. 身份是存在着优先级的 拥有者 > 所属组
    muyu该用户进行身份认定的时候, 看到有拥有者, 就不用看后面的了.

展示区域

Linux [权限]_第7张图片
在上述例子中:
muyu — — 拥有者 r w
root — — 其它 r
mutong — — 其它 r
muyu可读可写, mutong可读不可写这都很正常
root 也可读可写

这就突出了root超级用户的强大, 一般不受权限的限制
普通用户会受到权限的限制

修改权限

权限是由 身份/角色 和 文件属性两部分组成.
所以, 修改权限也是这两个方面的修改

(1)修改文件属性

由于文件权限的特殊表示方法, 故修改文件权限也有两种方法

1. 采用 w/r/x的形式

在这个方法里:
拥有者 u (user)
所属组 g (group)
其它 o (other)

chmod u/g/o +(-) 文件

特例: chmod a +(-) u/g/o 文件

Linux [权限]_第8张图片
通过上图的结果可以看出:chmod [一个整体] 文件

️我有一个疑问: 其它(普通用户)肯定修改不了, 那么所属组可不可以进行修改呢?


  • Linux [权限]_第9张图片
    合作 未被允许 — — 说明所属组不能进行修改
    拥有者 和 root用户 才可以进行文件属性的修改
    Linux [权限]_第10张图片

2. 采用八进制的形式

️为什么可以采用进制的形式?? 为什么是八进制而不是其他的进制??

  • 文件属性有着两大特点:
    1. 每个位置的含义都是确定的.即 顺序都是 r w x
    2. 每个位置的选择只有两种 Y or N, 这种也可以看作每个位置的选择只有 1 或 0
      ⇒ 故可以采用 进制的方式
      又因为三个为一组, 进制表示最小为 000, 最大为111 ⇒ 是八进制
      ⇒ 故修改文件的属性可以采用八进制的形式.

Linux [权限]_第11张图片

(2)修改身份

身份包括 三种:拥有者, 所属组, 其它
但是我们修改身份的时候只用修改两种: 拥有者 和 所属组
其它不用修改 ⇐ 一个用户不是拥有者, 不是所属组, 那么就是其它喽

1. 修改拥有者

指令是 chown

我们先尝试直接用 chown来进行操作
Linux [权限]_第12张图片
我们想把拥有者的身份给 mutong 用户, 但是被告知 合作未被允许
为什么会出现这种情况?? 那我们该如何修改拥有者的身份呢?

  • 现实生活中, 如果我们要把一个东西给另一个人, 方式有两种
    1. 尊重对方的选择 ⇒ 这种在Linux中不大可能实现
    2. 强制给 ⇒ 这种就是root行为啊
      ⇒ 那么不同的用户就有不同的选择:
      1. 普通用户, 对这条命令进行暂时提权sudo — — sudo chown 用户(后) 文件名
      2. root用户 — — chown 用户(后) 文件名
      Linux [权限]_第13张图片

2. 修改所属组

指令是 chgrp

我们也先尝试直接用 chgrp来进行操作
Linux [权限]_第14张图片
发现这个是跟上面是一样的结果.
[总结]:

  1. 普通用户 — — sudo chgrp 用户(后) 文件
  2. root用户 — — chgrp 用户(后) 文件

Linux [权限]_第15张图片

3. 修改拥有者 && 所属组

指令是 chown
同时改变拥有者 和 所属组:

  1. 普通用户 — — sudo chown 拥有者(后):所属组(后) 文件
  2. root用户 — — chown 拥有者(后):所属组(后) 文件

Linux [权限]_第16张图片

问题区

问题1

Linux [权限]_第17张图片
️ 为什么创建的普通文件的起始权限是 664, 目录文件的起始权限是 775 ?

先插一句:
普通文件的起始权限是 666
目录文件的起始权限是 777

  • 在Linux中存在一中 名叫 权限掩码 的东东, 记作 umask. 它存在的意义就是 在权限掩码出现的权限, 在文件的最终权限是不会出现的
    先来看一下权限掩码吧
    Linux [权限]_第18张图片
    在我的centos版本下, 权限掩码默认值是 0002. 其实可以把它拆解成两个部分 第一个0 + 后面的八进制表示
    即umask就是用八进制来表示的, 第一个0可以视为无用
    ⬇️⬇️⬇️
    Linux [权限]_第19张图片
    那么我们就把上面的问题回答清楚了
  • 其实 umask是可以修改的 — — umask 值(后)

问题2

Linux [权限]_第20张图片

️拥有者muyu 的d1 文件有 r属性, 为啥进不去d1目录呢?? 目录文件的各个属性又都是什么啊??

  • 如果我们把拥有者的 x 权限放开呢??
    Linux [权限]_第21张图片
    如果我们把d1 的 r 关闭 x 打开 呢?
    Linux [权限]_第22张图片
    通过上面的三组例子, 不难看出:
    x权限关闭, r权限打开 — — 进不了d1 目录文件里面, d1 目录里面的内容虽然没有权限查看(因为进不去啊), 但是还是输出里面的内容 test.c
    x权限打开 — — 可以进入d1 目录文件里面
    r权限关闭 — — 查看不了d1 目录里面的内容

    不难得出以下的结论:

目录文件:
r — — 是否允许用户查看指定目录下的内容
x — — 是否允许用户进入目录
w — — 是否允许用户在当前目录下进行创建, 修改, 删除

Linux [权限]_第23张图片
Linux [权限]_第24张图片

问题3

️如何创建一个共享文件, 使得多个用户可以共同编辑?


  • 首先, 先确定文件创建的位置
    • 我们首先想到的是每一个用户的家目录下是否可以⬇️⬇️⬇️
      Linux [权限]_第25张图片
      我们发现每一个用户的家目录下 拥有者 和 所属组 都是用户本身只有拥有者的权限是全开的, 除了拥有者其他的身份的权限都是关闭的
      ⇒ 故不能在每一个用户的家目录下创建一个共享文件
      既然每一个用户的家目录不能, 那么根目录肯定可以⬇️⬇️⬇️
      Linux [权限]_第26张图片
      我们可以看出 根目录的 拥有者 和 所属组都是 root用户 ⇒ 所以 跟目录下创建一个共享文件必须是 root用户
      OK, 我们先在根目录下创建一个共享文件看一下⬇️⬇️⬇️
      Linux [权限]_第27张图片
      这时候我们进行一些基本操作
      Linux [权限]_第28张图片
      这个时候, muyu用户跟mutong用户有了矛盾, 不想让mutong用户有test.c的相关权限⇒ 这导致mutong用户想删掉test.c文件
      Linux [权限]_第29张图片
      muyu用户这个时候就比较恼火, 我把mutong的所有权限都关闭了, 为什么还会删掉我创建的文件啊??
      muyu 百思不得其解? 聪明的你是否有了答案~~
      删除一个文件不是由文件本身的权限决定的, 是由它所在的目录的权限决定的 (文件所在目录的 w权限)
      让我们来看看 temp目录的权限

      原来 其它的 w 权限是开的啊~~
      这个时候, muyu用户就请求root用户把 其它的 w 关闭
      Linux [权限]_第30张图片
      哦豁, 我么发现这样, 我们也不能 创建, 修改文件了
      芭比Q了, 这样就是去共享的意义了啊
      ⇒ 基于有以上的需求:
      1. muyu用户想关闭掉 mutong用户的删除权限
      2. 但是删除一个文件不是由文件本身的权限决定的, 是由它所在的目录的权限决定的 `(文件所在目录的 w权限)
      3. 关闭目录的 w权限就会导致失去共享文件的意义

t粘滞位应运而生给目录设置一个 粘滞位, 只允许拥有者 或者 root用户才能删除目录下的文件
Linux [权限]_第31张图片

  • 其实 根目录下就已经存在一个共享文件 tem
    Linux [权限]_第32张图片

把话讲透,可以骂娘,不准记仇

你可能感兴趣的:(linux,运维,服务器)