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






相关文章
|
2月前
|
Linux Shell
Linux系统文件默认权限
Linux系统文件默认权限
52 2
|
3月前
|
Shell Linux
Linux shell编程学习笔记30:打造彩色的选项菜单
Linux shell编程学习笔记30:打造彩色的选项菜单
|
1月前
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
43 1
linux特殊权限!!
|
16天前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
23 0
Linux 如何更改默认 Shell
|
2月前
|
Web App开发 网络协议 Linux
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
这篇文章是关于Linux命令的总结,涵盖了从基础操作到网络配置等多个方面的命令及其使用方法。
75 1
linux命令总结(centos):shell常用命令汇总,平时用不到,用到就懵逼忘了,于是专门写了这篇论文,【便持续更新】
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
2月前
|
运维 监控 安全
Linux_权限理解(详细PLUS)
【10月更文挑战第3天】本文介绍了Linux系统中的权限管理基础,包括文件系统对象与权限关联、权限的继承性、字符与数字表示法的解读,以及用户、组与权限的动态交互。详细解析了`chmod`命令的高级用法和权限修改的风险,探讨了SUID、SGID和Sticky Bit等特殊权限的作用机制,并提出了基于角色的权限分配和定期权限审计的最佳实践。
73 11
|
3月前
|
Shell Linux
Linux shell编程学习笔记82:w命令——一览无余
Linux shell编程学习笔记82:w命令——一览无余
|
3月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
686 2
|
2月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
34 0