上期介绍了Linux的文件权限,这期我们仔细来说说Linux环境下目录权限和默认权限
一、目录权限
1.1 进入目录所需的权限
我们在进入目录时需要什么样的权限呢?
是r、w还是x呢?
下面我们一起来验证一下:
📋如下我门拥有全部目录dir的权限,是可以自由的进退目录的:
📋现在去掉目录dir拥有者的r权限,发现也是可以自由的进退目录的:
📋再去掉目录dir拥有者的w权限,发现还是可以自由的进退目录的:
📋最后去掉目录dir拥有者的x权限,发现没有权限进退目录了:
📌综上所述:进入一个目录只需要x权限
1.2 查看目录下文件所需的权限
当我们进入目录后,想要查看目录下文件需要什么权限呢?
接下来接着验证:
📋我们现在拥有全部的权限,是可以进入dir目录的并查看其中内容的:
📋现在去掉目录dir拥有者的r权限,发现并不能读取目录下文件了:
📌综上所述:读取目录下文件需要r权限
1.3 在目录下创建新文件和删除文件所需的权限
当我们进入目录后,想要在目录下创建新文件需要什么权限呢?
📋继续验证,根据以上规律,这里偷个小懒,现在直接去掉dir目录拥有者的w权限来试试看:
发现并没有在目录下创建新文件的权限了
经验证,删除文件也是如此
📌综上所述:在目录下创建新文件和删除文件要r权限
1.4 粘滞位
现在我们来想象一个场景:我们在工作时上级创建了一个共享目录,所有员工都可以在此目录里共享文件(即都可以在此目录里创建、删除。阅读和运行文件),各员工都可以修改自己文件的权限。当有一天你没有给某个同事阅读自己文件的权限,同事一气之下将你在此目录里留存的文件全部删了,这极其不合理,但是在Linux环境下是可以做到的(因为共享目录下,对所有人都有w权限)。
📋下面是举例:
上级创建了一个public共享目录
有一天LHS用户进入了该共享目录
该用户删除了CC用户创建的文件
为了避免这种情况,我们引入了粘滞位(只能给目录添加)这一概念:
📌具体操作为:chmod +t 想要添加粘滞位的目录
📋继续举例:
上级发现了这件事情,将公共目录public加了一个粘滞位:
LHS这个用户故技重施,发现删除不了CC用户的文件了:
📌综上所述:粘滞位存在的意义就是保护共享目录下的共享文件,不让他人乱删文件(这样共享目录下的文件只能由文件的拥有者和root可以删)
二、默认权限
我们在Linux环境下创建了一个文件或者目录时,可以看到其默认权限:
在我们没有修改任何权限的情况下,可以看到:
普通文件(不包括可执行文件)默认权限是:664(八进制方案),目录默认权限是:775(八进制方案)
但这种默认权限只在我的环境下存在,不同的环境默认权限可能不一样。
那默认权限是怎么来的呢?
2.1 最终权限
📌实际上:默认权限=最终权限=起始权限&(~umask)
现在我们来仔细分析一下最终权限是怎么来的:
2.1.1 起始权限
在得到最终权限之前先要了解Linux环境下的起始权限:
普通文件(不包括可执行文件)起始权限是:666(八进制方案),目录起始权限是:777(八进制方案)
而umask就是权限掩码
权限掩码的作用就是在起始权限中,去掉在umask中出现的权限,并且不能影响其他权限
这样我们将umask按位取反,再与起始权限(需要转换为2进制)与或即可得到最终权限:
2.2 umask
对于umask我们是可以进行修改的:
使用umask指令即可
📌具体操作为:umask 八进制方案
📋下面是举例操作:
这样我们所看到的默认权限就发生了变化
今天的博客到此为止就将Linux上所有的权限内容一一分析完毕了
下面将会给各位看客带来Linux上的一些工具和C++内容,敬请期待~
本文若有纰漏还请各位大佬在评论区不吝赐教呀