Linux中的shell外壳与权限(包含目录文件的权限,粘滞位的来龙去脉)(下)

简介: Linux中的shell外壳与权限(包含目录文件的权限,粘滞位的来龙去脉)

五.常见的权限三个问题

一.目录文件的权限知识

为了方便讲解,我们把mycmd.mp4和test.txt文件都删除了

只剩下了一个mydir目录文件

现在我身为mydir这个目录的拥有者,我可以进入mydir

查看mydir中的文件

在mydir中创建文件

在mydir中删除文件

下面我们分别去掉对应权限看一下这一连串操作有哪些会受到影响

不过再此之前,我们在重新创建test.txt文件,并向里面写入一些数据

1.r权限

我连ls命令都执行不了,也就是说我根本连查看这个目录当中有什么什么文件的权限都没有

那么我可以写文件吗?

创建一个文件可以,查看一个文件的内容也可以,甚至我也可以删除一个文件

但是我连这个目录当中有什么类型的文件都无法知道

对于目录文件而言

r:决定了是否可以进行对文件属性信息进行查看的权利(ll/ls -l)

2.w权限

我们无法新建一个文件,删除一个文件

但是可以查看一个文件的内容,修改一个文件的内容

对于目录文件而言

w:决定了是否可以在目录下进行新建和删除文件

3.x权限

我无法进入mydir,也无法查看里面的内容,也无法对里面的文件进行任何修改,无法新建和删除文件

对于目录文件而言:

x:决定是否可以进入该目录

二.文件的默认权限

我们新建一个普通文件和一个目录文件

然后ll查看他们的属性

发现我们创建的普通文件:默认的权限不是777,而是664

我们创建的目录文件:默认的权限不是777,而是775

为什么呢?

1.权限角度来理解

1.普通文件

首先,我们知道如果一个普通文件有x权限,那么这个文件就有可能是可执行文件

而可执行文件只是这普通文件中的一种而已,占比并不大

所以Linux中的文件刚刚创建的时候,默认的权限应该是不带有x的

也就是说默认的起始权限应该是666

那么为什么是664呢?

我们又注意到,666和664的区别是:

666:对于other来说是rw-

664:对于other来说是r–

也就是说默认权限将other的w权限取消,这也合情合理,因为你other本来就不应该拥有能够修改我这个文件的权限

2.目录文件

首先,对于一个目录文件来说,进入目录,查看目录内容,查看对应的文件内容,新建/删除/修改某个文件都是有必要的,因此起始权限应该是777

那么为什么要是775呢?

777:other:rwx

775:other:r-x

也就是说默认权限将other的w权限取消,这也合情合理,因为你other本来就没有不应该拥有能够在我的目录中新建,修改,删除文件的权限

2.通过(umask:权限掩码)的具体实现

那么Linux是怎么实现的呢?

是通过umask掩码来实现的

这个umask的作用是:定制一个文件被创建的时候的默认权限

我们可以通过umask命令来看一下对应的umask掩码

而且umask是可以修改的

比方说我想把它改成0003

然后我再去创建一个普通文件,一个目录文件

发现:普通文件:664,目录文件:774

那么它是怎么实现的呢?

1.实现的理解

然后我们可能会想:这还不简单,

直接相减不就ok了吗?

或者:

异或一下不就ok了吗?

1.异或的错误

首先我们先证明一下为什么异或不对

我们提到过umask等于0003时,

普通文件:664,目录文件:774

那么我们用异或和普通文件为例来推导一下

看能否得出664

异或得出665来,所以异或失败

2.减法的错误

还是以上面那个为例

减法出来的是663,不对

2.实现方法

其实,实现方法是:

这么神奇,其实原理是这样的

只有当文件权限为1并且umask对应位置的数据也为1时,才会将文件权限的那个1改为0

umask先按位取反后,

就只需要让文件权限为1并且umask对应位置的数据为0时,将那个1改为0,如果文件的权限为0,依然保持是0

也就是说只有当文件权限为1并且umask对应位置的数据也是1的时候,该文件的权限才会保持是1,否则就是0

这不就是按位与(&)运算吗

三.粘滞位

1.一个现象

比方说有一天,root想要捉弄一下zs,但是"玩笑"开的太大了

什么玩笑呢?

root在zs的目录中创建了一大堆文件,

而且创建文件之后会还把这些文件的权限置为了000

关于这个shell脚本命令

我之前在Linux常见指令2中提到过

i=0; while [ $i -le 100 ]; do echo "hello $i";touch $i.txt; let i++;done
• 1

i=0; while [ $i -le 100 ];do chmod a-rwx $i.txt; let i++;done

权限是000,所以zs无法查看,修改这些文件,

但是root不受权限的约束,所以root可以随意操作这些文件

然后zs的工作环境非常糟糕,zs找了root很多次,root每次都是嘴上道歉,说一定会删了那些文件的,但是root没有一次真正去删过

后来zs受不了了,直接rm 全删了

可是那些文件zs没有任何权限啊,zs是怎么做到的呢?

因为这是zs的家目录,这个目录是zs的,zs作为这个目录的拥有者

拥有w权限,因此即使你root在我zs的目录下面捣乱,你建的文件,你把文件的权限全都关了,zs没法看,没法修改,但是zs能删除

也就是说:

一个文件能否被删除,并不取决于文件本身,而是取决于文件所处的目录的拥有者是否具有w权限!

2.那么zs该不该删呢?

而且我们系统的家目录本来就只允许这个家的主人(对应家目录的创建者)进入,所以一般情况下是不会出现我wzs在你zs的目录中创建文件的.所以两个普通用户之间基本是不会出现这种情况的

3.粘滞位的引出

我wzs没法进入你zs的目录,你zs也没法进入我wzs的目录,可是如果我们现在有一个需求:

如果我们想要在一个特定的目录下面来实现文件的共享呢?

root创建了一个tmp目录,并且为了实现让多个用户之间可以数据共享,root将other的rwx权限全部放开

这里我们发现other的x权限被改为了t,这是为什么?

这个t就是粘滞位,我们为了凸显出粘滞位的作用

所以先把other的t这个权限去掉

然后我们让wzs和zs在tmp目录下共享文件

这里wzs创建了一个文件test.txt

往里面写了hello Linux

zs成功读取了test.txt文件

成功实现了wzs和zs共享文件的需求

但是呢,假设有一天,wzs和zs闹掰了

wzs把zs的权限关了,也就是把other的权限关了

zs没法读,没法写,zs一气之下把test.txt删了

在这里zs不该删的,就算zs真的想要删,也不应该让zs有这个权限去删除

但是为什么zs可是删除呢?

因为tmp这个目录对于other来说rwx的权限都放开了

zs和wzs都是other,都有w权限,因此都可以删除彼此的文件

Linux系统必然不能允许这种行为成功执行

因此引入了粘滞位这一解决方案

4.粘滞位的作用

下面我们把other的t权限加上

我们再去重复一下刚才的操作

这个时候zs就删不了我wzs的文件了

那么粘滞位的作用是什么呢?

粘滞位:就是给目录中的other设置一个权限位,具有x的意义

同时也进一步对目录权限进行特殊限定:

该目录里面的文件,只有root和文件的拥有者才有权利进行删除

其他人一概不允许!

以上就是:Linux中的shell外壳与权限(包含目录文件的权限,粘滞位的来龙去脉) 的全部内容,

希望能对大家有所帮助!

相关文章
|
1月前
|
Linux
在 Linux 系统中,“cd”命令用于切换当前工作目录
在 Linux 系统中,“cd”命令用于切换当前工作目录。本文详细介绍了“cd”命令的基本用法和常见技巧,包括使用“.”、“..”、“~”、绝对路径和相对路径,以及快速切换到上一次工作目录等。此外,还探讨了高级技巧,如使用通配符、结合其他命令、在脚本中使用,以及实际应用案例,帮助读者提高工作效率。
93 3
|
1月前
|
存储 Linux Windows
linux常用目录
/sbin s就是super User的意思,这里存放的是系统管理员使用的系统管理程序。 /home 存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一版该目录名是以用户的账号命名的。 /root 该目录为系统管理员,也称为超级权限者的用户主目录。 /lib 系统开机所需要最基本的动态连接共享库,其作用类似于windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。 /etc 所有的系统管理所需要的配置文件和子目录。 /usr 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program fies目录。 /bo
44 2
|
1天前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
22 8
|
1月前
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
45 1
linux特殊权限!!
|
1月前
|
存储 Shell Linux
Linux 如何更改默认 Shell
Linux 如何更改默认 Shell
39 0
Linux 如何更改默认 Shell
|
1月前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
136 3
|
1月前
|
Linux Python
Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
在 Linux 系统中,了解目录下文件数量是常见的需求。本文介绍了四种方法:使用 `ls` 和 `wc` 组合、`find` 命令、`tree` 命令以及编程实现(如 Python)。每种方法都附有详细说明和示例,适合不同水平的用户学习和使用。掌握这些技巧,可以有效提升系统管理和日常使用的效率。
570 6
|
1月前
|
分布式计算 Java Hadoop
linux中HADOOP_HOME和JAVA_HOME删除后依然指向旧目录
通过以上步骤,可以有效地解决 `HADOOP_HOME`和 `JAVA_HOME`删除后依然指向旧目录的问题。确保在所有相关的配置文件中正确设置和删除环境变量,并刷新当前会话,使更改生效。通过这些措施,能够确保系统环境变量的正确性和一致性。
31 1
|
1月前
|
Linux Python
Linux 中某个目录中的文件数如何查看?这篇教程分分钟教会你!
在 Linux 系统中,了解目录下的文件数量是常见的需求。本文介绍了多种方法,包括使用 `ls` 和 `wc` 命令组合、`find` 命令、`tree` 命令以及编程方式(如 Python)。无论你是新手还是有经验的用户,都能找到适合自己的方法。掌握这些技巧将提高你在 Linux 系统中的操作效率。
52 4
|
1月前
|
网络协议 Linux
linux系统重要文件目录
本文介绍了Linux系统中的重要目录及其历史背景,包括根目录、/usr、/etc、/var/log和/proc等目录的结构和功能。其中,/etc目录下包含了许多关键配置文件,如网卡配置、DNS解析、主机名设置等。文章还详细解释了各目录和文件的作用,帮助读者更好地理解和管理Linux系统。
62 2