3-7 Linux中的特殊权限(1)
文件的特殊权限 --- SUID SGID SBIT
当 s 出现在拥有者的 x 权限位置的时候,表示拥有者有SUID的权限
(Set UID)s 权限只能应用在二进制的可执行文件上。
当 s 出现在所属组的 x 权限位置的时候,表示所属组有SGID的权限
(Set GID)
当 t 出现在其他人的 x 权限位置的时候,表示其他人有SBIT的权限
(Sticky Bit)
SUID:临时获取文件拥有者的权限 ------ 只能针对文件
SGID:可以作用于目录,也可以作用于文件。
作用于文件:和SUID一样,所属组成员拥有组权限
作用于目录:继承父目录,子目录会不停的继承
SBIT:只有文件的拥有者,才能删除、修改该目录下的文件。只能在其他人的位置修改。
1、SUID:临时获取文件拥有者的权限 ------ 只能针对文件
如:/usr/bin/passwd 文件,passwd 这个文件记录了用户的密码信息。它的拥有者是 root,拥有者的权限是 rws 。单纯从权限来看只有root具备 w 写的权限,其他人不具备写的权限。但是,为了能够让其他用户可以修改自己的密码,s 权限在这里起到了完成这项特殊任务的作用。当其他用户执行 passwd 这个程序的时候,相当于临时借用了 root 权限来完成密码修改的操作。
tips:s 权限的设置只针对可执行文件。设置 s 权限必须是有 x 可执行权限为前提,不然即便设置了 s 权限,它也会显示为大写 S。大写 S 是没有 x 可执行权限的意思。
例:
红色标注:新建一个 test.exe 文件,权限为 -rw-r--r-- (此处用 exe 后缀只为识别可执行文件,实际上Linux 不根据扩展名判断文件类型,而是根据文件的内容来判断。所以扩展名的作用是帮助人来识别文件)。
黄色标注:通过 chmod u+s test.exe 为拥有者增加 s 权限,实际上由于原来并没有 x 可执行权限,所以会以大 S 显示出来。大 S 表示没有 x 执行权限。
蓝色标注:chmod u+x test.exe 为拥有者增加 x 权限,有了 x 权限的基础上再 ll 查询文件详情,原来拥有者权限 rwS 变为了 rws。这样 s 权限才生效。可以理解为有 x 权限的前提下 s 权限才生效。
绿色标注:为所属组用户和其他人都赋予 x 权限,才能有执行文件的权限。
2、SGID:临时获取文件所属组的权限
SGID:可以作用于目录,也可以作用于文件。
作用于文件:和SUID一样,可以临时获取所属组的权限。
作用于目录:子目录会不停的继承父目录的 s 权限。
子目录继承父目录的 s 权限演示。
例:创建 group 和 demo 目录,默认所属组权限都是 r-x 。
chmod g+s demo/ 把 demo目录的所属组权限改为 s 权限。
tmp/demo 目录下创建 demo.dir 目录 和 创建 demo.txt 文件,tmp/group 目录下创建 group.dir 和 创建 group.txt 文件。
通过 ll 查看两个目录下的详情,demo 目录下的 demo.dir 目录所属组权限是 r-s,demo.txt 文件的所属组是 r--。group 目录下的 group.dir 目录所属组权限是 r-x,group.txt 文件的所属组是 r--。
再次在 demo.dir 和 group.dir 目录下创建目录和文件,验证子目录会不停的继承父目录的 s 权限。
红色框块:demo.dir 目录下新建 demo1.dir 目录 和 创建 demo1.txt 文件。
黄色框块:group.dir 目录下新建 group1.dir 目录 和 创建 group1.txt 文件。
白色下划线:同时列出 demo.dir 和 group.dir 目录下详情。
蓝色下划线:demo1.dir 所属组权限是 r-s
绿色下划线:group1.dir 所属组权限是 r-x
demo1.dir 的父目录是 demo.dir,最上层的父目录是 demo。demo 的所属组权限是 r-s。 demo 的子目录权限继承了父目录 r-s。而,demo1.txt 和 group1.txt 文件的权限保持一直,证明文件不会继承目录的 s 权限。
由此可见,父目录有 s 权限,子目录都会继承父目录的 s 权限,而文件则不会继承 s 权限。
SBIT:只有文件的拥有者,才能删除、修改该目录下的文件(指重命名和剪切)root 除外。
例:/tmp/ 目录有 t 权限。tmp 目录是临时目录,通过 drwxrwxrwt 知道它的权限很大。任何用户都可以在这个目录上做增删改查的操作。为了用户之间不相互干预,t 权限的作用就是拥有者才有权限对自己的文件和目录作删除和修改。
红色框标注:user1 普通用户在 tmp 目录下创建 user1.dir 目录 和 user1.txt 文件
黄色下划线标注:切换到 user2 普通用户 rm 删除 user1 用户的 user1.dir 目录 和 user1.txt 文件,mv 剪切 user1 用户的 user1.dir 目录 和 user1.txt 文件 同样得到的回复都是 operation not permitted 不允许操作。
另外,用户是可以 cp 复制其他用户的文件。只是复制回来的文件拥有者权限变成了自己,自己对文件进行编辑后不改文件名是不能再次复制到 tmp 目录下。也就是不能覆盖掉原文件。从意义上看,也是防止修改原文件的一种措施。示例如下:
红色下划线:user2 用户 复制了 user1 用户的 user1.txt 到自己家目录。
黄色下划线:复制过来的文件,拥有者变了user2 用户
蓝色下划线:user2 用户 vim 编辑完 user1.txt 这个文件后,cp 复制回去 tmp 目录。被提示没有权限(防止覆盖)。
绿色下划线:重新把修改好的 user1.txt 通过重命名方式复制到 tmp 目录下成功。tmp 多了一个user2.txt 文件
从上述 SBIT 例子可以看出,t 权限目录下的文件只有拥有者能够对自己的文件或目录进行删改(指重命名和剪切)。
s 和 t 权限大小写之分?
数字法设置特殊权限 ?
欲知后事如何,请听下回分解!