【Linux】shell 及权限理解(下)

简介: 【Linux】shell 及权限理解(下)

为什么我是所属组,且所属组有对该文件的所有权限,我还是不能够对文件进行相关的操作呢?因为系统的角色匹配结构是 if-else if - else 结构,而不是 if-if-if 结构。只要前面的角色匹配上了,就只能拥有该角色对该文件的权限,无法拥有其他角色对该文件的权限。其实如果 Linux 系统采取 if-if-if 的匹配结构,你想去除拥有者的权限,那么你也要去除所属组所对应的权限。这样是不合理的,因为所属组可能还有有其他人。

root 用户不受任何权限的约束


7ada6d4513d94731b530bc005b1b70c5.png

sudo chown 用户名 文件名 #将指定文件的拥有者改为指定用户
sudo chgrp 用户名 文件名 #将指定文件的所属组改为指定用户
sudo chown 用户名1:用户名2 文件名 #将指定文件的拥有者和所属组改为指定用户
#-R 递归修改文件或目录的拥有者或所属组

注:修改文件的拥有者和所属组都需要使用 root 用户,也可以使用 sudo 指令暂时提权。

6368f03fe4394ab9a9c01f8e6fea3527.png

aece69d0872d45cabe5f1b466202597a.png



48b835e24f8a458a9ce89a7f3dac891d.png


d40031072a594e4591fe57407b22a969.png

②三位8进制数字


8fcf2ba270384276a937fe60d00d8759.png


b5225e775e364263adf35c0866126217.png


文件相关指令


1.file指令


功能说明:辨识文件类型。

语法: file [选项] 文件或目录…

常用选项

  • -c 详细显示指令执行过程,便于排错或分析程序执行的情形
  • -z 尝试去解读压缩文件的内容


9190de4e064c405a915622c74226b7fe.png

2.umask指令


为什么要有权限呢?便于我们和系统进行安全管理!


那又为什么我们创建的目录或者普通文件,其默认权限是我们所看到的样子呢?

5efccbef2bda4994a09934535297bc70.png

其实,Linux 规定了目录的起始权限是 777,而普通文件的起始权限是 666。除了起始权限,Linux 系统还有一个权限掩码,超级用户默认掩码值为0022,普通用

户默认为0002。(注:最开头的 0 不需要管,可以看做八进制数的标志)系统默认会配置好 umask 权限掩码。凡是在 umask 权限掩码中出现的权限,都必须在起始权限中去掉。

f02820c89db54ba2bb4918bbbc2819cd.png

那去掉 umask 权限掩码中出现的权限是什么意思呢?是做减法吗?学习这个之前,我们先来学习一下 umask 指令的用法。


umask

功能: 查看或修改文件掩码

用法: umask 权限值


umask #查看权限掩码
umask 数字 #将权限掩码改为指定数字

ac1f7dc5c57442859bfc8f59976c5aee.png

那么现在我们来回答上面的问题:去掉是做减法吗?我们来看一下。


84d474e3c71d4590a6ffe1949a60196c.png


通过上图的推导,我们可以知道去掉并不是做减法,那么去掉究竟是什么意思呢?其实是通过位运算来达到去掉的目的。最终权限 = 起始权限 & (~mask)


e611cc0f13ad4566abd815f94451dbfb.png


那为什么这样子就能做到去掉权限掩码中出现的权限呢?因为默认 umask 权限掩码中的 1 表示要去掉的权限位,0 表示要保留的权限位。那么,~umask中的 1 表示要保留的权限位,0 表示要去掉的权限位。那么起始权限和 ~umask 按位与就能够做到去掉权限掩码中出现的权限了。


目录的权限


  • 可执行权限: 如果目录没有可执行权限, 则无法 cd 到目录中
  • 可读权限: 如果目录没有可读权限, 则无法用 ls 等命令查看目录中的文件内容
  • 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件


558fcef1cfbc4033a5fb19749af0d69a.png


90d63c233ad54ab495418eb3704fb290.png


如果我们要进入一个目录,需要该目录的可执行权限。所以,系统就规定目录的起始权限是 777 。因为所有的目录被创建出来,一般都要能够被进入的。而大部分普通文件都是不可执行的,所以普通文件一般被创建出来都是没有可执行权限的。


粘滞位


Linux 系统中有很多用户,有时候用户需要在一个公共的目录下,进行临时文件的操作(增删查改)。那么系统也有这样的目录来满足用户的需求。

3b896b16ec0545568edd3d3bfa5b75b2.png

24e452dc56bc44b88e2b4732772c2ad1.png

那为什么张三为什么不在李四的家目录下操作呢?因为没有权限。粘滞位是在一个公共的目录下,大家一起进行文件操作,其创建者是 root 用户。


那现在我们就自己手动创建一个公共目录吧!

e49f6a666f9d4697962f2454d8c5d118.png

张三和李四在公共目录下创建自己的文件。

bc114c8559834fb38d0973c5e5bfe90d.pngbf2444583d4b4af6be7151473310f424.png


李四不能没有张三创建的文件的写权限和可执行权限


5e63d796cccd457db62052da9331c9d7.png

李四没有张三创建的文件的任何权限,却可以删除张三的文件。

7a15dd3badcf49519c88a3d12e8ce886.png


其他人对一个文件没有任何权限,却可以删除该文件,这样子合理吗?其实很合理,因为能不能删除一个文件并不取决于用户对该文件有没有权限,而是取决于用户对于该目录有没有读权限。


424986ac9b304f3bbf53bac9bbb2ee51.png


一个文件能不能被删除取决于目录权限,而公共目录对任何人都有读写执行权限。所以任何人都能删除其他人在公共目录下的文件。那这样是不是非常不合理?我在公共目录下创建的文件居然被你删掉了,那怎么行呢?


那我们怎么才能让大家在一个公共目录进行 rwx 操作,但禁止大家互删对方的文件呢?那么,这时候就需要给公共目录设置粘滞位(权限的一种特殊情况)。


注:粘滞位只能给目录进行设置。


chmod +t 目录名 #给公共目录设置粘滞位


65c92ea2f2ff45c5b7f64d70cf6a3d59.png

设置完粘滞位后,我们再来看看李四能不能删除张三的文件了。

eb93f155e3b94b68abef7352bf5c22d1.png


通过上图,我们可以看到:给公共目录设置好粘滞位后,用户无法删除别的用户的文件,只能删除自己的文件。


当一个目录被设置为"粘滞位"(chmod +t),则该目录下的文件只能由


  • 超级管理员删除
  • 该目录的所有者删除
  • 该文件的所有者删除


👉总结👈


本篇博客主要讲解了shell 命令及其运行原来、权限的概念、权限管理、文件相关指令以及粘滞位等等。那么以上就是本篇博客的全部内容了,如果大家觉得有收获的话,可以点个三连支持一下!谢谢大家!💖💝❣️






相关文章
|
18天前
|
Web App开发 Java Linux
Linux之Shell基本命令篇
Linux之Shell基本命令篇
Linux之Shell基本命令篇
|
19天前
|
安全 Linux 数据安全/隐私保护
Linux权限详解
Linux权限详解
|
29天前
|
Linux 数据安全/隐私保护 Windows
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
Linux入门指南:linux权限究竟是什么?和文件有什么关系?
30 0
|
1月前
|
算法 Linux C++
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
【Linux系统编程】解析获取和设置文件信息与权限的Linux系统调用
29 0
|
3天前
|
安全 Linux Shell
【linux基础(四)】对Linux权限的理解
【linux基础(四)】对Linux权限的理解
|
3天前
|
Linux 网络安全 数据安全/隐私保护
Linux 如何关闭防火墙(开启管理员权限)
Linux 如何关闭防火墙(开启管理员权限)
6 0
|
4天前
|
Linux 数据安全/隐私保护 Windows
Linux的学习之路:4、权限
Linux的学习之路:4、权限
16 0
|
6天前
|
存储 Shell 数据安全/隐私保护
ZooKeeper【基础知识 04】控制权限ACL(原生的 Shell 命令)
【4月更文挑战第11天】ZooKeeper【基础知识 04】控制权限ACL(原生的 Shell 命令)
25 7
|
16天前
|
存储 Shell Linux
【攻防世界】unseping (反序列化与Linux bash shell)
【攻防世界】unseping (反序列化与Linux bash shell)
|
19天前
|
Shell Linux
【Linux】12. 模拟实现shell
【Linux】12. 模拟实现shell
27 2