Linux 权限
- Linux用户分类
- 切换成root
- 方法
- 例子
- 切换成普通用户
- 方法
- 例子
- 短暂提权
- 什么是权限
- 理论知识
- 展示区域
- 修改权限
- (1)修改文件属性
- 1. 采用 w/r/x的形式
- 2. 采用八进制的形式
- (2)修改身份
- 1. 修改拥有者
- 2. 修改所属组
- 3. 修改拥有者 && 所属组
- 问题区
- 问题1
- 问题2
- 问题3
Linux用户分类
通过前面的学习, 我们知道了Linux下的用户分成两类:
- 超级用户(root): 一般不受权限的限制
- 其他用户: 会受到权限的限制
切换成root
方法
su — — 身份切换过去, 但是家目录不变(并不是重新登录了一下)
su - — — 家目录发生变化, 重新登录一下
例子
- 我们发现:
- su(-) 默认指令就是切换到root的
- 由普通用户切换到root, 都要输入root的密码
- 回退到上一个用户 — —
exit 或者 ctrl + d
切换成普通用户
方法
su 普通用户
- 由root切换到普通用户 — — 不用输入密码
- 由A普通用户切换到B普通用户 — — 需要输入B用户的密码
例子
- 通过上面两种用户的相互切换, 我们不难发现:
root用户的权限 > 普通用户的权限
短暂提权
相信, 以后工作的大部分时间我们用的都是普通用户
那么如果有一种需求 — — 需要短暂使用root用户权限, 那么我们该怎么办?👇👇👇
sudo 指令 — — 对这个指令使用root用户的权限
🗨️这个的使用结果为什么事失败的啊??
- 因为我们现在都是用
adduser
来创建用户, 然后系统不信任你⇒ 因为你没有在系统信任的白名单中(在一个特定的配置文件中)
🗨️那么失败的原因是理解了. 为什么要输入的是mutong用户的密码
啊? - 因为用户如果已经在系统信任的白名单中⇒ 那么输入
mutong
用户的密码来获得短暂提权, 这不是理所应当的嘛
什么是权限
理论知识
🗨️日常生活中, 我们所熟知的权限是什么? 包含哪几个方面?
- 分析问题, 我们要全面的进行分析, 从特殊中总结出共性
一般是从主体
和客体
这两个方面进行分析
主体:
第一个例子: 当我们观看腾讯的VIP视频, 被告知没有权限去观看. ⇒ 人的身份/角色
客体:
第二个例子: 我们能不能把练习纸当做面包吃掉用来填饱 ⇒ 事物的原本属性
⇒ 日常生活中的权限总结起来就是人的身份/ 角色 + 事物的原本属性
由于, Linux下一切都是文件⇒事物的属性 ⇒ 文件的属性
⇒ Linux下的权限 = 人的身份/ 角色 + 文件的属性
🗨️那么身份有哪一些? 文件有哪些属性呢?
- 在Linux中:
用户的身份有三种:拥有者, 所属组, 其他
文件的属性有三种:可读(r), 可写(w), 可执行(x)
🗨️前面说用户分类有root 和 普通用户; 现在身份的划分又有 拥有者, 所属组 和 其他. 这很冲突啊?
- 现在我们这样想:
普通用户是我们学生, root用户是校长
但是不管是学生还是校长, 在日常生活中都有着不同的角色, 比如父亲, 孩子… …
在Linux中, 身份只有这三种可能性. 不管是普通用户还是root用户, 都会有这三种身份的可能性.
⇒ 这不是冲突的, 可以说是身份是用户的一种补充吧~~
- 身份 和 文件属性都已经明白了, 那么在哪里可以看我这个用户有哪些权限呢?
🗨️拥有者, 所属组看见了, 其他呢?
- 考虑到其它 太多了⇒ Linux采用的是
if (拥有者) else if (所属组) else (其它)
这样的一个逻辑链路来进行认定用户身份
的.
🗨️上面 muyu 即是拥有者 也是所属组, 那么权限是两个叠加吗?
上面的例子中, muyu即是拥有者也是所属组. 拥有者的权限只有r
, 而所属组的权限是r w
按照我们的猜想, 应该是权限的叠加 ⇒ 那就意味着muyu 的权限是r w
当我们 查看该文件时, 是OK的; 但是当我们写一段东西到该文件就不行了
⇒
其实, 具体的一个用户, 权限的选择只能是一个.身份是存在着优先级的
拥有者 > 所属组
muyu该用户进行身份认定
的时候, 看到有拥有者, 就不用看后面的了.
展示区域
在上述例子中:
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 文件
通过上图的结果可以看出:chmod [一个整体] 文件
🗨️我有一个疑问: 其它(普通用户)肯定修改不了, 那么所属组可不可以进行修改呢?
合作
未被允许 — — 说明所属组不能进行修改
拥有者 和 root用户 才可以进行文件属性的修改
2. 采用八进制的形式
🗨️为什么可以采用进制的形式?? 为什么是八进制而不是其他的进制??
- 文件属性有着两大特点:
- 每个位置的含义都是确定的.即
顺序都是 r w x
- 每个位置的选择只有两种
Y or N
,这种也可以看作每个位置的选择只有 1 或 0
⇒ 故可以采用进制
的方式
又因为三个为一组, 进制表示最小为000
, 最大为111
⇒ 是八进制
⇒ 故修改文件的属性可以采用八进制的形式.
- 每个位置的含义都是确定的.即
(2)修改身份
身份包括 三种:拥有者, 所属组, 其它
但是我们修改身份的时候只用修改两种: 拥有者 和 所属组
其它不用修改 ⇐ 一个用户不是拥有者, 不是所属组, 那么就是其它喽
1. 修改拥有者
指令是 chown
我们先尝试直接用 chown来进行操作👇👇👇
我们想把拥有者的身份给 mutong 用户, 但是被告知 合作未被允许
为什么会出现这种情况?? 那我们该如何修改拥有者的身份呢?
- 现实生活中, 如果我们要把一个东西给另一个人, 方式有两种
- 尊重对方的选择 ⇒ 这种在Linux中不大可能实现
- 强制给 ⇒ 这种就是root行为啊
⇒ 那么不同的用户就有不同的选择:
1. 普通用户, 对这条命令进行暂时提权sudo
— — sudo chown 用户(后) 文件名
2. root用户 — — chown 用户(后) 文件名
2. 修改所属组
指令是 chgrp
我们也先尝试直接用 chgrp来进行操作👇👇👇
发现这个是跟上面是一样的结果.
[总结]:
- 普通用户 — — sudo chgrp 用户(后) 文件
- root用户 — — chgrp 用户(后) 文件
3. 修改拥有者 && 所属组
指令是 chown
同时改变拥有者 和 所属组:
- 普通用户 — — sudo chown 拥有者(后):所属组(后) 文件
- root用户 — — chown 拥有者(后):所属组(后) 文件
问题区
问题1
🗨️ 为什么创建的普通文件的起始权限是 664
, 目录文件的起始权限是 775
?
先插一句:
普通文件的起始权限是666
目录文件的起始权限是777
- 在Linux中存在一中 名叫
权限掩码
的东东, 记作umask
. 它存在的意义就是在权限掩码出现的权限, 在文件的最终权限是不会出现的
先来看一下权限掩码吧👇👇👇
在我的centos版本下, 权限掩码默认值是0002
. 其实可以把它拆解成两个部分第一个0 + 后面的八进制表示
即umask就是用八进制来表示的, 第一个0可以视为无用
⬇️⬇️⬇️
那么我们就把上面的问题回答清楚了
- 其实 umask是可以修改的 — —
umask 值(后)
问题2
🗨️拥有者muyu 的d1 文件有 r
属性, 为啥进不去d1目录
呢?? 目录文件的各个属性又都是什么啊??
- 如果我们把拥有者的
x
权限放开呢??
如果我们把d1 的r 关闭 x 打开
呢?
通过上面的三组例子, 不难看出:
x权限关闭, r权限打开
— — 进不了d1 目录文件里面, d1 目录里面的内容虽然没有权限查看(因为进不去啊), 但是还是输出里面的内容test.c
x权限打开
— — 可以进入d1 目录文件里面
r权限关闭
— — 查看不了d1 目录里面的内容
⇒
不难得出以下的结论:
目录文件:
r — — 是否允许用户查看
指定目录下的内容
x — — 是否允许用户进入
目录
w — — 是否允许用户在当前目录下进行创建, 修改, 删除
👇👇👇
问题3
🗨️如何创建一个共享文件, 使得多个用户可以共同编辑?
首先, 先确定文件创建的位置- 我们首先想到的是每一个用户的家目录下是否可以⬇️⬇️⬇️
我们发现每一个用户的家目录下拥有者 和 所属组 都是用户本身
且只有拥有者的权限是全开的, 除了拥有者其他的身份的权限都是关闭的
⇒ 故不能在每一个用户的家目录下创建一个共享文件
既然每一个用户的家目录不能, 那么根目录肯定可以⬇️⬇️⬇️
我们可以看出 根目录的拥有者 和 所属组都是 root用户
⇒ 所以跟目录下创建一个共享文件必须是 root用户
OK, 我们先在根目录下创建一个共享文件看一下⬇️⬇️⬇️
这时候我们进行一些基本操作
这个时候, muyu用户跟mutong用户有了矛盾, 不想让mutong用户有test.c的相关权限⇒ 这导致mutong用户想删掉test.c文件
muyu用户这个时候就比较恼火, 我把mutong的所有权限都关闭了, 为什么还会删掉我创建的文件啊??
muyu 百思不得其解? 聪明的你是否有了答案~~
删除一个文件不是由文件本身的权限决定的, 是由它所在的目录的权限决定的(文件所在目录的 w权限)
让我们来看看temp目录的权限
👇👇👇
原来其它的 w 权限是开的啊
~~
这个时候, muyu用户就请求root用户把其它的 w 关闭
哦豁, 我么发现这样, 我们也不能创建, 修改
文件了
芭比Q了, 这样就是去共享的意义了啊
⇒ 基于有以上的需求:
1. muyu用户想关闭掉 mutong用户的删除权限
2. 但是删除一个文件不是由文件本身的权限决定的, 是由它所在的目录的权限决定的 `(文件所在目录的 w权限)
3. 关闭目录的 w权限就会导致失去共享文件的意义
- 我们首先想到的是每一个用户的家目录下是否可以⬇️⬇️⬇️
t粘滞位应运而生
⇒ 给目录设置一个 粘滞位, 只允许拥有者 或者 root用户才能删除目录下的文件
- 其实
根目录下就已经存在一个共享文件 tem
把话讲透,可以骂娘,不准记仇