【Linux】权限(2):文件权限的深入理解粘滞位
前文回顾:【Linux】权限(1):初识权限与使用理解
目录
一 引入
二 为什么新建文件的时候,新建的文件的权限就是我们看到的权限
三 粘滞位
四 权限总结
五 问题解释
(1)决定文件或目录默认权限的关键因素
(2)root 新建的文件,普通用户能否删除
一 引入
我们在上一篇遗留了两个问题,我们先来回顾一下:
(1)进入一个目录需要什么权限?
对目录来讲:
- x 决定是否能进入
- r 决定是否能查看目录下的文件信息
- w 决定在指定的目录下,是否能够删除和新建文件文件是否能被删除,由所在的目录 w 决定!!!!!(不由拥有者决定)
(2)什么决定了文件或目录的默认权限?
(3)root新建的文件,普通用户不读不写不执行,可以删除吗?
我们来通过下面的讲解来解答这两个问题。
二 为什么新建文件的时候,新建的文件的权限就是我们看到的权限
标题的意思是:为什么我们创建好一个新文件或新目录时,它的拥有者,所属组,other的权限都是已经确定好的
当我们新建一个普通文件时:

发现它的权限是664
普通文件,开始的时候,就要具备x,不是主流!!
文件的起始权限:666-->不给x--->除非是二进制可执行文件或使用指令 chmod ugo +x +filename自己加权限
Linux系统中,会存在一个叫做权限掩码的东西,使用指令umask查看当前设备的权限掩码

一般程序设定的掩码为0002,但是我们也可以自己修改掩码

对于一个目录而言,目录具有x权限是刚需!!!
因为什么目录新建,默认就要能被进入!
目录的起始权限:从777开始

细节1:不同的系统,不同的用户,umask可能会不一样!
细节2:不用担心umask被更改的问题,退出登录,重新登录,umask就会恢复默认
细节3:如何创建一批普通文件: 示例:touch hello{1..100}.txt 删除时也可以一起删除:rm hello{1..100}.txt
三 粘滞位
删除文件,不由目标文件决定,由你这个文件所在的目录权限决定
我们根据目录的权限知道,只要用户具有目录的写权限,用户就可以删除目录中的文件,而不论
这个用户是否有这个文件的写权限.
这好像不太科学啊,我张三创建的⼀个文件,凭什么被你李四可以删掉?我们用下面的过程印证⼀下.
[root@localhost ~]$ chmod 0777 /home/
[root@localhost ~]$ ls /home/ -ld
drwxrwxrwx. 3 root root 4096 9⽉ 19 15:58 /home/
[root@localhost ~]$ touch /home/root.c
[root@localhost ~]$ ls -l /home/
总⽤量 4
-rw-r--r--. 1 root root 0 9⽉ 19 15:58 abc.c
drwxr-xr-x. 27 litao litao 4096 9⽉ 19 15:53 litao
-rw-r--r--. 1 root root 0 9⽉ 19 15:59 root.c
[root@localhost ~]$ su - litao
[litao@localhost ~]$ rm /home/root.c #litao可以删除root创建的⽂件
rm:是否删除有写保护的普通空⽂件 "/home/root.c"?y
[litao@localhost ~]$ exit
logout
为了解决这个不科学的问题,Linux引入了粘滞位的概念.
我们先来谈谈文件删除的问题:

我们发现:普通用户能自己删除自己创建的文件,超级用户能自己删除自己创建的文件,但是普通用户能删除超级用户创建的文件,超级用户也能删除普通用户创建的文件
关于Linux文件共享的话题

当⼀个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由
1. 超级管理员删除
2. 该目录的所有者删除
3. 该文件的所有者删除
四 权限总结
• 可执行权限:如果目录没有可执行权限,则无法cd到目录中.
• 可读权限:如果目录没有可读权限,则无法用ls等命令查看目录中的文件内容.
• 可写权限:如果目录没有可写权限,则无法在目录中创建文件,也无法在目录中删除文件.
(1)目录的可执行权限是表示你可否在目录下执行命令;
(2)如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd进入目,即使目录仍然有-r读权限(这个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件);
(3)而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读权限;
(4)所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
五 问题解释
学习完上面的内容,我们就能回答开始剩下的两个问题了:
(1)决定文件或目录默认权限的关键因素
文件或目录的默认权限由umask(权限掩码) 决定,它的作用是从系统预设的基础权限中 “减去” 相应权限,最终得到创建时的默认权限。
- 系统预设基础权限不同:目录的基础权限是
rwxrwxrwx(数字表示为 777),文件的基础权限是rw-rw-rw-(数字表示为 666)。 - umask 的数字值代表要移除的权限,例如默认 umask 值 022,意味着会移除 “组用户” 和 “其他用户” 的写权限(w)。
(2)root 新建的文件,普通用户能否删除
普通用户不能直接删除这类文件,删除权限不取决于文件本身的权限,而取决于文件所在目录的权限。
- 删除操作的权限核心在目录:要删除一个文件,本质是 “修改目录内容”(移除目录中该文件的条目),所以关键看普通用户对文件所在目录是否有 w(写)权限 和 x(执行)权限。
- 文件自身权限不影响删除:即使文件是 root 创建且权限为 “---------”(无任何权限),只要普通用户对其所在目录有 w 和 x 权限,就能删除该文件;反之,若目录无 w 权限,即便文件开放所有权限,也无法删除。
- root 权限的特殊性:如果文件所在目录是 root 专属(如 /root),普通用户默认无任何权限,自然无法删除其中的文件。
