2. chown(修改文件的拥有者)
功能:修改文件的拥有者
格式:chown [参数] 用户名 文件名
当前我的家目录有如下用户:
sherry 用户当前文件夹:
如果我想要把 file.txt 的 拥有者 从 sherry 改为Tchey_Y ,能否修改成功?
表示权限不被允许, sherry 即时拥有者又是所属组,为什么不让我更改呢?
在 Linux 上,总不可能在你给权限的时候给别人留个言,说我给你个权限吧,毕竟白送给别人东西也需要对方接受才行。所以 普通用户是无法直接修改文件拥有者的!
但是可以用 root 强制把文件拥有者改掉,因为 root 是超级管理员,比如使用 sudo 提权一下,然后强制改掉:
3. chgrp(修改文件的所属组)
功能:修改文件或目录的所属组
格式:chgrp [参数] 用户组名 文件名
常用选项:-R 递归修改文件或目录的所属组
同样的,通过 sudo 提权修改:
补充:chown 和 chgrp 可以同时使用,格式为:sudo chown 用户名 : 用户名 filename
比如将拥有者和所属组都改回 sherry :
4. 有无权限的区别
首先,我将 t.txt 的权限全部去掉:
如果我现在读 t.txt:
被权限拒绝了,再也用 echo “hello” > t.txt 写入试试:
我当前是文件的拥有者 sherry ,但是我在没有权限的情况下依然不能访问!
那么 root 呢?我们用 root 试试:
我们发现,权限并不能约束 root !因为 root 是超级管理员,权限是约束普通人的。
总结:Linux 上权限是约束普通用户的,root 不会被约束!对于普通用户,被权限约束了什么都干不了;对于 root即使没有权限还是能畅通无阻。
5.目录的权限
目录权限的功能:
可执行权限 - x : 如果目录没有可执行权限, 则无法cd到目录中.
可读权限 - r : 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
可写权限 - w : 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.
如果进入一个目录,只需要一种权限,就是可执行权限 x:
如果进入一个目录,没有 w 权限,则不能在目录中创建文件:
对于目录来讲,在没有r权限的目录下,无法查看当前目录下的文件名和文件属性:
总结:目录文件的 r 读权限不是影响我进入(cd)目录,而是影响我查看(ls)指定目录下的文件内容 ;w 写权限 影响我在当前目录下进行创建(touch),更改(mv),删除(rf)文件。x 权限:是否允许用户进入对应目录。
6.默认权限
权限起始分为三部分:
默认权限:也就是我们看到的文件和目录一创建就有的权限。
起始权限:系统设定的权限。
最终权限:系统为了更好的控制文件权限,系统会有默认的 权限掩码 的概念(umask),起始文件和权限掩码进行计算后得到最终权限。
补充说明:
普通文件起始权限:666开始,目录文件的起始权限:777。它们默认都是八进制表示的。
Linux 上权限掩码可以用 umask 指令查看:
我们看待权限掩码 0002 时,看后三位002,这三位是八进制序列,一个八进制位是3个二进制位,翻译成二进制序列:000 000 010。第一位暂时不用管。
权限掩码特性:在起始权限中,去掉在权限掩码 umask 中出现的权限,不能影响其他任何权限。意思就是说,只要在 umask 中出现的权限,在 最终权限 里就不能出现!
那么 最终权限 是怎么计算出来的呢?
其实这时有一个计算公式的:最终权限 = 起始权限 & (~umask) (起始权限的值,按位与 取反后的权限掩码)
举个例子,比如我新建一个文件:
它的权限rw-rw-r–翻译成八进制就是 664,而翻译成二进制序列就是 110 110 100。
起始权限:110 110 110 权限掩码:000 000 010 权限掩码取反:111 111 101 起始权限 & 权限掩码取反 = 110 110 110 111 111 101 & ----------- 创建文件的最终权限 = 110 110 100
我们修改一下 umask 的值:
这种情况下,我们创建的文件的最终权限是什么?
答案:
rw-rw-r–翻译成八进制是 660
7.粘滞位
粘滞位出现的背景:在使用 Linux 的时候,未来可能会有一些共享目录,被所有的用户共享,用来保存普通用户产生的临时数据,使用户之间的安全更有保障。
在一台机器上,可能会有多个用户:
而在 Linux 下,作为一个普通用户,它的家目录是只对自己开放的,从sherry 用户的权限只对 拥有者 有 rwx 权限就可以看出,且 所属组 和 other 没有任何权限。
而对于 共享目录 ,一般是由 root 用户创建,由root将权限放开后,供这台机器上的用户使用,从而满足不同的用户在公共的目录下进行文件的增删查改。
我们这里直接 提权 创建一个 public 目录,并开放权限chmod 777 public:
假设本来sherry 和 Tchey_Y 关系很好,之前总是一起互相看文件,这个行为由于在 共享目录 的前提下也都可以进行,但是他们有一天闹了矛盾,Tchey_Y 把原先对 other 放开的 r 权限给全封掉了,导致 sherry 无法查看了:
于是 sherry 想着你不让我看,那么我就删你的文件!
为了让大家共享文件,且不让其他人随便删除别人的文件,于是就有了粘滞位。
所以 Tchey_Y 找到了 root 告状, root 就设置了粘滞位
粘滞位只能给目录添加,所以 root 就使用 chmod +t public 给 public 添加了粘滞位:
(使用指令时为 a+t ,意思是给三个角色都 +t,但是只会把原先 other 的 x 的位置改为 t)
这就说明我们的 粘滞位 已经添加成功。
我们再试试能不能删除:
其他用户没有权限为什么能删我的文件,这是权限的bug吗?为什么粘滞位只能给目录添加?
能否在特定目录下,创建或者删除文件由该目录的 w 权限决定。
那么既然这样,为什么要粘滞位 ?把 w 权限去掉别人就不能删我的文件了吗?
注意:这是共享目录,是多人合用的,如果把 w 权限去掉了,这也就把普通用户在该目录下创建文件的权限也去掉了。只有加上 w 权限,才能让其他用户正常地使用。
而被删的问题是由目录导致的,所以只能给目录添加 粘滞位 。
那么谈到这里,当一个目录被设置为"粘滞位"(chmod +t),则该目录下的文件能被谁删除呢?
超级管理员删除(root)
该目录的所有者删除
该文件的所有者删除
8.总结:
今天我们了解了Linux中的权限管理,主要学习了shell运行原理、Linux上用户权限、权限管理、更改文件访问权限、目录权限、默认权限和粘滞位等。接下来,我们将继续学习Linux的的相关知识。希望我的文章和讲解能对大家的学习提供一些帮助。
当然,本文仍有许多不足之处,欢迎各位小伙伴们随时私信交流、批评指正!我们下期见~