粘滞位

171 阅读4分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情

一、目录的权限

【面试题1】要在目录下创建文件,需要什么权限 ?

增加 w 权限,能写文件但不能读文件:

在这里插入图片描述 📝说明:

要在目录下创建文件,必须需要 w 权限。

【面试题2】要读取目录下的文件列表,需要什么权限 ?

增加 r 权限,能读文件但不能写文件: 在这里插入图片描述

📝说明:

要读取目录下的文件列表,必须需要 r 权限。

【面试题3】要进入一个目录,需要什么权限 ?

默认能进入:

在这里插入图片描述

删除 r 能进入:

在这里插入图片描述

删除 w 能进入:

在这里插入图片描述

删除 x 不能进入:

在这里插入图片描述

📝说明:

要进入一个目录必须具有 x 权限。

r 或 w 对于目录又影响什么呢 ❓

进入目录里查看文件、新建文件不能完成:

在这里插入图片描述

这里请转到上面两个面试题。

二、粘滞位

当前 owner、group 是 root,wanghong 是 other:

在这里插入图片描述

我作为 other 具有 rwx 权限,所以可以进入目录、查看、新建:

在这里插入图片描述

随后我们新建了若干文件(普通用户+root 用户)又把 root 的所有文件中 other 的权限删除: 对于 root 的文件,不能读、写、执行,因为作为一个普通人,人家的这个文件是 root 的,你不是 owner、group,甚至你作为 other,什么权限也没有,所以无可厚非。

在这里插入图片描述

但是作为一个普通用户我却可以删除 root 创建的文件:

在这里插入图片描述

在这里插入图片描述

📝说明

可以看到当前所处的目录是 dir 下,我作为 other 是可读可写可执行的,上面面试题说了我要在一个目录下新建文件,必须得有写权限,同样,删除文件也必须得有写权限。如果说这样就可以以 other 的身份去删除 root 的文件,那么权限也太高了吧。

在一个公开的目录下 (rwx rwx rwx),不同的用户新建文件,既定事实是我们我们只能访问权限以内的文件,但我可以随意的删除。

root 能删别人的这能理解,但是普通用户能删 root 的不能理解 ?—— 这是既定事实,有人说这是 Linux 系统设计的 bug,当然应该算他把这块的权限放的比较大,当你要删除时,系统也提示你是否要移除一个携保护的常规文件。

那怎么防止普通用户删掉root的文件呢 ❓

这里就引出我们的主题粘滞位 在这里插入图片描述

📝说明:

同一个目录下,不同人创建的文件可能会被其它人删除,为了防止这种情况,可以给目录设置粘滞位。

注意这样做只可以防止普通用户删除 root 的文件,root 依然能删除普通用户的文件。

如果要直接删除目录,一定要先把内部的文件全部删除,同样,你要删内部的文件,前提是你必须先进入目录。

当一个目录被设置为粘滞位,则该目录下的文件只能由:

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

Linux系统中使用粘滞位的场景 ❓

在 Linux 系统中,有时会形成很多的临时文件 (一般在 /tmp)

在这里插入图片描述

三、权限总结

  • 目录的执行权限是表示你能否进入目录
  • 如果目录没有 x 权限,则无法对目录执行任何命令,甚至无法 cd 进入目录,即使目录仍然有 r 权限 (这个地方很容易犯错:认为有读权限就可以进入目录读取目录下的文件。这里有一个现象:a 目录不具有 x 权限,但是有 r 权限,此时去 ls a/,会报错同时也能查看)
  • 如果目录具有 x 权限,但没有 r 权限,用户可以执行命令,可以 cd 进入目录,但没有目录的读权限
  • 所以在目录下,即使可以执行 ls 命令,但仍然没有权限读出目录下的文档