Ⅳ. 文件权限的转让
0x00 chown 指令
chown [用户名] [文件名] # 修改文件的拥有者
如果我是一个文件的拥有者,我想把文件给别人:
❓ 思考:当你想给别人东西的时候,要不要经过别人的同意?
当然需要!这里我们可以用 sudo 指令强制给别人:
(sudo 有一个叫信任列表的东西,你现在输入如果出现报错是因为 root 没有把你添加到信任列表里,这个我们后期讲完 vim 之后再说。在 /etc/sudoers 路径下。)
当然我们还可以直接切换成 root,通过 root 去给,别人不要也不行,就是这么🐂🍺。
(root 无视权限)
一个文件的创建者和拥有者一定是同一个人吗?
通过我们刚才修改文件的拥有者,我们就能得出 —— 不一定。
0x01 chgrp 指令
chgrp [用户名] [文件名] # 修改文件的所属组
和 chown 一样的用法,我们可以用 chgrp 指令改变文件的所属组 group。
Ⅴ. 目录的权限
0x00 目录的权限
我们来去掉 权限,看看到底能不能进入这个 dir:
这就说明进入一个目录跟 没有关系。
❓ 如果我想进入一个目录,需要说明权限?
如果目录只没有 权限,允许进入、允许在该目录下创建(写入)文件,只不过是不允许查看:
如果目录只没有 权限,允许进入,允许在该目录下查看文件列表,但是不允许创建文件:
如果同时没有 权限,允许进入,但是不允许创建和查看目录下的文件列表:
(注意:不是文件内容,文件的内容是否可以查看由文件自己的权限决定)
💡 Linux 下一切皆文件,目录也是文件。再结合 "文件 = 内容 + 属性" 去理解。
目录里面保存的是部分文件的 "属性" 。
(文件名和 id 之间是有对应的映射关系的,有可能被系统缓存了)
0x01 默认创建后的权限
为什么创建目录的默认权限是 775,而创建普通文件的默认权限是 664 ?
不同系统可能有差异吗?
创建的时候为什么不可以都是 777,权限都给我怼上呢?
📚 默认权限:① 默认目录的起始权限:777 ② 默认普通文件的权限:666
既然如此,那为什么不是 777 / 666,而是 775 / 664 呢?
💡 默认权限 != 最终权限,Linux 中的最终权限 = 默认权限 "去掉" umask 中存在的权限。
0x02 umask 权限掩码
因为系统中有一个默认的 "权限掩码" ,叫做 umask:
umask # 打印权限掩码
📚 权限掩码:凡是在权限掩码中出现的权限,都不应该在最终权限中出现!
所以,最后目录的默认权限变为了 775,文件权限变为了 664。
❓ 思考:所谓的 "去掉" umask 中的权限,是不是减去呢?
💡 这里的 "去掉" 并不是减去。首先要说的是,umask 是可以修改的:
umask [掩码] # 修改umask掩码
由此可见,我们的权限确实是受 umask 的影响的。但是实际上是这样计算的:
最终权限 = 默认权限 & (~umask)
Ⅵ. 粘滞位(Sticky bit)
0x00 共享目录
Linux 下可以存在一些目录,拥有者和所属组是 root,
其他人允许以 other 的身份在该目录下进行文件的创建、读取、删除和修改等操作:
📌 注意事项:在一个共享目录下,你不让我写,不让我读,但防不住我删除!
比如,有两个普通用户,用户A想让用户B访问它的文件,于是就 chmod 把 other 的 全撤咯,
于是用户B急了,恼羞成怒,啊你不给我用你也别想用了,得不到就毁掉!直接给你把文件删了。
如果你仍然是想在共享目录下形成临时文件,但又怕别人给你删了,
你可以给共享的 <目录> 加上粘滞位来解决。
注意,是给目录加粘滞位!即你共享哪个目录,你就在哪个目录下加上粘滞位。
我们下面来隆重介绍一下 Sticky bit ——粘滞位。
0x01 粘滞位
chmod +t [目录名] # 添置粘滞位
💭 以 root 身份给 all 目录添置粘滞位:
目录设置了粘滞位 后,作为 other 就无法随意地删除其他用户的文件了:
不过 root 还是想删就删,想干啥就干啥。
还是那句话 —— 普通用户再怎么进行文件操作,对 root 都是无效的。