我们已经准备好了,你呢?

2024我们与您携手共赢,为您的企业形象保驾护航!

$ file----i--a----- 文件

由于篇幅有限,无法一一分析,本文重点分析文件权限中w(写)的真谛,挖掘其背后隐藏的细节,并尽量让读者好好利用这个关键权限位,以免在系统管理上出现错误。

为了更直观地说明问题,本文采用实验操作的方法,逐步进行分析。为了方便起见,我们使用 O(Other) 权限集来执行实验。实验中使用的权限位属于 o(other),执行操作的用户不是 root 用户,属于 o(other)。

在实验之前,需要明确一下目录也是一种文件的概念,它主要包括两个方面的信息,目录中文件的文件名和文件索引号,它们之间存在一对一的对应关系。但是,目录文件是特殊的,不能用常规方法读写,必须通过系统的特殊命令进行操作。ls 命令实际上是读取目录文件,命令 mv 和 rm 是写入目录文件。

好了,是时候谈谈w(write)的真正含义了,总之,Linux文件中的w权限就是限制文件的*内容*。以下实验可以验证。

实验1,目录文件:/test(rwx),普通文件:/test/file(r--)。当前目录:/test

Linux是一个安全的操作系统,它是基于文件设计的,它的文件权限更复杂,你可以使用stat命令和命令来显示文件的详细信息:

$ echo “abc” 》: 文件:

尝试重写文件的内容,但文件权限是只读的,很明显操作失败。

Linux是一个安全的操作系统,它是基于文件设计的,它的文件权限更复杂,你可以使用stat命令和命令来显示文件的详细信息:

$猫世界!

没问题,可以读出文件的内容。

Linux是一个安全的操作系统,它是基于文件设计的,它的文件权限更复杂,你可以使用stat命令和命令来显示文件的详细信息:

$ mv 文件文件2$怎么回事

,文件权限显然是只读的,请注意,如前所述,文件中的 rw 权限仅限于当前文件的内容,文件名不属于当前文件的内容,它保存在下一级目录文件的内容中。mv 命令表面上是针对 file 的,但实际上是对 /test 内容的重写,然后看 /test 的权限,它是可写的 (rwx)。很多用户为了保护文件,将自己的权限设置为只读,这是非常危险的,确实可以达到保护文件内容的目的(其实不一定,如补充内容中所讨论的),但是你不能保证文件是重命名还是删除, 安全的方法是将文件父目录的权限设置为只读。当然,还有其他方法,例如使用 +i 命令或在 RO 中挂载文件系统,但这些都超出了本文的讨论范围。

Linux是一个安全的操作系统,它是基于文件设计的,它的文件权限更复杂,你可以使用stat命令和命令来显示文件的详细信息:

$ rm -f 文件2$ ls$

出于同样的原因,我们可以删除 file2,与上一个操作不同,我们不是重写 /test 的记录,而是删除 /test 的记录。

实验2,目录文件:/test(r-x),普通文件:/test/file(rw-),当前目录:/test

Linux是一个安全的操作系统,它是基于文件设计的,它的文件权限更复杂,你可以使用stat命令和命令来显示文件的详细信息:

$ echo “abc” 》文件$ cat

虽然 /test 权限是只读的,但是我们重写了文件的内容,它的权限是可写的,当然没有问题。

Linux是一个安全的操作系统,它是基于文件设计的,它的文件权限更复杂,你可以使用stat命令和命令来显示文件的详细信息:

$ mv 文件 file2

MV:将“file”移动到“file2”:

$ rm -f : '文件':

正如我们已经知道的,这两个指令与文件的权限无关,而是重写了 /test 的内容,当然操作失败了。通过前面的操作,我们应该清楚区分指令的真正操作对象是谁,这样我们才能做出正确的文件权限设置。

实验3,目录文件:/test(rwx),普通文件:/test/file(r--),目录文件:/test/dir(r-x),普通文件:/test/dir/file(rw-),当前目录:/test

Linux是一个安全的操作系统,它是基于文件设计的,它的文件权限更复杂,你可以使用stat命令和命令来显示文件的详细信息:

$ mv 文件 file2$ mv dir dir2$ file2

它进行得很顺利,因为 /test/file 和 /test/dir 的父目录 /test 的权限太宽松了,而且它是 rwx。

Linux是一个安全的操作系统,它是基于文件设计的,它的文件权限更复杂,你可以使用stat命令和命令来显示文件的详细信息:

$ rm -f 文件2

$ rm -rf dir2

rm: 'dir2/file':

$ ls -r。:d ir2。/dir2:文件

此时,正常文件 /test/file2 被删除也就不足为奇了,但具有同等状态的目录文件 /test/dir2 却毫发无损。当 rm -rf dir2 被执行时,由于有一个通用文件 /test/dir2/file,系统会先尝试删除它,这相当于修改了目录文件 /test/dir2 的内容,但它的权限是只读的,不能修改,这意味着 /test/dir2/file 无法删除,并且因为 /test/dir2 与 /test/dir2/file 有依赖关系, /test/ diR2 自然会被保留。

回头看之前的操作(mv dir dir2),为什么目录文件 /test/dir 可以重命名?由于改名操作不涉及被修改的父目录的内容,所以只修改父目录的内容,必须修改父目录的内容,还要修改父目录的内容(因为目录中的文件被删除了),这是不允许的。如果 /test/dir2 的权限是可写的,或者目录中没有子文件,那么它将以 /test/file2 相同的方式删除。

通过前面的操作,可以看到文件有几个关键状态:读取、重写、重命名、删除和执行。但是,系统仅区分三种类型的权限,即读取、写入和执行 (RWX)。那么系统会忽略改名和删除这两项操作吗?不可以,系统在操作文件的上层目录中管理这两个操作。那么它是如何管理的呢?答案是目录将其下的所有文件视为其内容。这样,当用户更改名称或删除文件时,就会对更高级别的目录执行写入操作,这是RWX的三大权限之一,不会逃出系统的管理范围。

我们的大脑总是很活跃的,我们可以想象各种各样的事情,我们可以把很多简单的事情组合成非常复杂的事情,这不正是上面实验中发生的事情吗,我们可以设计很多这样的实验,但是我们做的越多,我们的大脑似乎就越混乱(我已经有一点点了), 你能记得这么多吗?好吧,我们或许可以把它想得更简单一些,只要注意两个方面,一个是要清楚目录的内容是什么;二是要了解文件权限中w(写)的真正含义。想想看,不是吗?

添加:

在实验 1 中,如果使用 vim 编辑文件并强制保存文件 (w!) ),则可以成功。这并不是说 vim 可以绕过系统的安全机制,而是 vim 玩了一个小把戏,就是删除文件,然后生成一个同名的新文件。但有一个例外,那就是当这个文件有另一个硬链接文件时,vim 会拒绝强制保存,想想看,当删除操作时,文件仍然存在,并且还没有真正被删除,然后创建一个新文件,虽然同名,但已经不再是原来的文件了!笔者对此事也颇为疑惑,为了验证,我仔细阅读了vim6.2的源码,才找到答案。有兴趣的读者也可以看一看,具体内容在src/.c。

二维码
扫一扫在手机端查看

本文链接:https://by928.com/3675.html     转载请注明出处和本文链接!请遵守 《网站协议》
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。

项目经理在线

我们已经准备好了,你呢?

2020我们与您携手共赢,为您的企业形象保驾护航!

在线客服
联系方式

热线电话

13761152229

上班时间

周一到周五

公司电话

二维码
微信
线