文章目录
1. 权限的概念
权限是用来约束“人”的行为的,同时有些访问对象天然就不具备一些“属性”。
2. Linux 的用户分类
用户分类:
- root:就是我们平时所称的 “超级管理员”,几乎可以干任何事情
- 普通用户:在操作系统中 root 只有一个,普通用户可以有很多个
-
关于用户的切换 tips:
-
su 用户名
:在同一个 bash 下进行身份切换,不加用户名默认切换为 root -
su -
:让 root 重新登陆 -
exit
或ctrl + D
:退出命令 -
sudo
:普通用户没有权限的行为,可以用 sudo 对单条指令进行提权(前提是该普通用户在 root 的信任列表里)
3. Linux 的文件属性
文件可以有的属性是:读
r
、写w
、执行x
,-
代表该位置没有权限,读写执行三个字符的位置含义是确定的
3.1 文件类型
在 Linux 下,操作系统 不用文件后缀区分文件类型,而是用 文件属性中,第一列的第一个字符 来区分文件类型
注:我们使用程序的时候还是需要文件后缀的,例如我们 gcc mycode.c
-
文件类型介绍:
-
-
:普通文件 – 文本、可执行、归档文件… -
d
:目录 -
b
:块设备(block) – 磁盘… -
c
:字符设备 – 键盘、显示器 -
p
:管道文件 -
s
:网络文件(socket) -
l
:链接文件(link)
file – 查看文件类型
file 文件名
3.2 拥有者 & 所属组 & others
-
角色划分:
- 文件拥有者
- 文件所属组:对 others 进行权限的分组
- 文件的 others:除了拥有者以外的用户都是 others
注意:任何类型的用户都可以扮演不同的角色~
chown – 修改拥有者
choose owner.
root 下,更改指定用户为文件拥有者:chown 指定用户 文件名
非 root 用户在前面加 sodu
chgrp – 修改所属组
choose group.
root 下,更改指定用户为文件所属组:chgrp 指定用户 文件名
# 普通用户下,将 mytest.txt 的拥有者和所属组都给 Kevin
$ sodu chown Kevin:Kevin mytest.txt
4. Linux 文件权限
chmod – 文件权限修改
-
方式一:
-
添加文件权限:
chmod 角色+rwx 文件名
-
减少文件权限:
chmod 角色-rwx 文件名
角色对应:所有者 u,所属组 g,others o,所有角色 a 其实 chmod 还有一个权限位置,作 t,粘滞位,见文末粘滞位篇。这里主要介绍 ugo
方式二:
-
用 8 进制转化成权限进行设置:
chmod 8进制的三位数 文件名
将有权限作1,没有作0,r-x 可以写作 101,转换成 8 进制就是 5 将 rwxr-xr-x 写作二进制 111 101 101,转化成 8 进制就是 755
# 添加相应权限
$ chmod u+x,g+r,o+x mytest.txt
# 去掉所有权限
$ chmod a-rwx mytest.txt
# 将权限设作 rwxr-xr-x
$ chmod 755 mytest.txt
# 去掉所有权限
$ chmod 000 mytest.txt
5. 🚩目录的权限
如果我们要进入一个目录,只有一种权限是必须的,就是 x 执行程序
-
目录权限的解读:
- r: 查看 目录里的 文件名 + 文件属性 的权限
- w:向该目录中 创建新文件 的权限
- x: 进入 目录的权限
5.1 🚩默认权限 和 权限掩码
先观察下面代码:
为什么 我们创建的普通文件(不包括可执行文件),为什么默认权限是从 644 开始的?
为什么 目录的默认权限,是从 755 开始的?
(注:不同的操作系统,默认权限可能不同,我们重点关注默认权限的生成过程)
这里引入两个概念:
☝️ 起始权限:是系统设定的
普通文件 的起始权限:从 666 开始
目录文件 的起始权限:从 777 开始
关于我们所看到的 默认权限,也就是 最终权限,其实 是由 起始权限 转换而成的。
转化是通过 权限掩码 得来的。
-
权限掩码:
-
1.查看权限掩码的命令为
umask
,他是可修改的,修改命令为mask 0xxx
(x 为 8 进制的数字) - 2.权限掩码是系统为了更好的控制文件权限专门设置的
- 3.不同系统的权限掩码可能不同
✌️ 最终权限 / 默认权限 = 起始权限 & (~umask)
该公式的计算逻辑:
- 在起始权限中,去掉在 umask 中出现的权限,且不能影响其他权限
🤪定义看蒙了没关系~
🌰举例,上图:
可以看到笔者输入 umask 后显示为 0022,对应文件权限的八进制的三位数,取后三位。故,笔者系统此时的权限掩码为 022,我们以此进行举例讲解。
5.2 🚩粘滞位
一些背景:
- 在使用 Linux 的时候,未来可能会有一些 共享目录,被所有的普通用户共享,用来保存普通用户产生的临时数据。
- 共享的目录通常是由 root 提供的,普通用户作为 others 访问。值得注意的是,文件被所有人共享的时候,受文件权限约束,但是别人可以随意删除!!!🥵
- 粘滞位 就是为了让用户们共享文件,且可以保护 共享文件 不受别人删除。
为什么拦不住别人删除??是权限的 bug 吗?我们可以回顾一下 w 权限
实际上 w
权限,不光是限制别人能否创建文件,也限制了别人 能否删除文件。可想而知,如果关闭了这个权限,同时也阻止了别的用户进行文件创建,所以粘滞位的作用是 w 权限代替不了的。
总结:粘滞位是 只能 添加给 共享文件 的权限
命令为:chmod +t 共享文件名
设置粘滞位后,能删除文件的就只有 所有者 和 root 了