文件和目录的特殊权限 :
在文件权限里 除了 前面我们讲的普通权限 ( r w x );
还有三个特殊权限 :
SET UID( SUID ) ---- 针对 用户
SET GID ( SGID ) ---- 针对用户组
Sticky Bit ( 粘滞位 ) ---- 针对其它用户
SGID :
# SGID 是用在两个方面, 一个是 文件,一个是目录 !
文件 :
作用在文件上 其实和 上篇的 SUID 是一个道理, 但是它是作用在用户组上面
的,与 SUID 是具有一样的意义!!
示例 :
准备资料 :
[natash@bogon ~]$ ls -l /usr/bin/cat
-rwxr-xr-x. 1 natash natash 51856 Jan 11 2019 /usr/bin/cat
[natash@bogon ~]$ ls -l spec.txt
-rwxrwx---. 1 natash natash 13 Nov 4 11:53 spec.txt
[harry@bogon ~]$ cat /home/natash/spec.txt
cat: /home/natash/spec.txt: Permission denied
上示内容展示了 : cat 命令的权限, spec.txt 的权限,还有就是 harry 用户 无法
查看 spec.txt 文件!!
现在就是我们需要通过添加 SGID 的权限 来使得 用户 harry 可以查看 spec.txt
给哪里添加 SGID 权限呢 ??
就是给 cat 的程序文件( 就二进制文件!!) 的用户组的执行位!!
===>>>
[natash@bogon ~]$ chmod g+s /usr/bin/cat
[natash@bogon ~]$ ls -l /usr/bin/cat
-rwxr-sr-x. 1 natash natash 51856 Jan 11 2019 /usr/bin/cat
[harry@bogon ~]$ cat /home/natash/spec.txt
12345rrr
显然了 : 当给 cat ( 二进制文件) 增添了 s 权限后 , 用户 harry 便可以查看
spec.txt 文件的内容了 !!
注 : 需要在此提醒的是
当时做这个示例时是有个小插曲的 :
当时按照我们的逻辑 全套做了下来,发现 用户 harry 还是不能查看
spec.txt 文件的内容!!
当时就直接蒙圈了,所以就反反复复检查自己的操作代码是不是有什么问
题,反反复复好几遍,始终没查出问题!!!
那问题在哪呢 ???
===>>>
我们在使用 cat 查看 /home/natash/spec.txt 时,我们只想到了这个
/home/natash/spec.txt, 没想到 /home/natash 这个目录的权限的限
制( 当然了 这个点我们在 前面也一直没有提!!!问题出现后自然
也不会想到这里---目录权限)
当问题出现后,查了 /home/natash 这个目录 的权限后就明白问题所
在了 发现 /home/natash 的权限是 :
[harry@bogon ~]$ ls -ld /home/natash
drwx---rwx. 16 natash natash 4096 Nov 4 17:07 /home/natash
从这个权限你就会发现 : 难怪你 harry 用户 使用 cat 访问不了
/home/natash/spec.txt ,因为在目录这一
权限里 已经没有 组的权限了,也就是说
你 harry 根本都不会临时具备 natash 用户
组的权限, 因为在目录这里,用户组的权
限都是 无,更不用说 目录下的文件了(
即不用说 /home/natash 下的 spec.txt 了)
因此发现问题所在后解决办法 :
===>>>
我们给 /home/natash 目录的 组权限配置全了(使其具备
了 rwx 权限)
而后我们在使用 harry 查看 spec.txt 查看成功 !!
目录 :
官方 :
如 果 SGID 是设置在 A 目录上, 则在 A 目录内所建立的文件或目录的用户
组, 将会是此 A 目录的用户组。
一 般来说, SGID 多用在特定的多人团队的项目开发上,在系统中用的很少。
通俗 :
如果在 A 目录上设置了 SGID , 意味着 A 目录下 所有的 子目录 子文件,在创
建文件或目录的时候其 所属组 都会和 A 目录的 所属组 会保持一致 !!
示例 :
[root@bogon ~]# mkdir sgid_dir
[root@bogon ~]# ls -ld sgid_dir
drwxr-xr-x. 2 root root 6 Nov 4 18:04 sgid_dir
[root@bogon ~]# chown harry:harry sgid_dir
[root@bogon ~]# ls -ld sgid_dir
drwxr-xr-x. 2 harry harry 45 Nov 4 18:05 sgid_dir
[root@bogon ~]# cd sgid_dir
[root@bogon sgid_dir]# touch file{1..3}
[root@bogon sgid_dir]# ls -l
total 0
-rw-r--r--. 1 root root 0 Nov 4 18:05 file1
-rw-r--r--. 1 root root 0 Nov 4 18:05 file2
-rw-r--r--. 1 root root 0 Nov 4 18:05 file3
上示 : 我们在 root 用户下 创建了一个名为 sgid_dir 的目录 ,并且修改了它的用户名
和用户组为 harry 。
在 sgid_dir 目录下 创建了 三个文件,并且显示了三个文件的 所属主和所属组
都是为 root ( 因为是在 root 用户下 创建的文件,所以自然为 root 了)
然后我们秀一波操作 :
[root@bogon ~]# chmod g+s sgid_dir
[root@bogon ~]# ls -ld sgid_dir
drwxr-sr-x. 2 harry harry 45 Nov 4 18:05 sgid_dir
[root@bogon ~]# cd sgid_dir
[root@bogon sgid_dir]# touch file{4..6}
[root@bogon sgid_dir]# ls -l
total 0
-rw-r--r--. 1 root root 0 Nov 4 18:05 file1
-rw-r--r--. 1 root root 0 Nov 4 18:05 file2
-rw-r--r--. 1 root root 0 Nov 4 18:05 file3
-rw-r--r--. 1 root harry 0 Nov 4 18:12 file4
-rw-r--r--. 1 root harry 0 Nov 4 18:12 file5
-rw-r--r--. 1 root harry 0 Nov 4 18:12 file6
上示 你会发现 ,当我们 给 sgid_dir 用户组执行位添加了 s 权限后,再在
sgid_dir 去创建三个文件并展示 发现这三个文件的所属组已经不是
root 了,而是之前我们修改的 harry !!
这就是 SGID 的第二个作用,因为当给 目录 sgid_dir 添加了 s 权限后
再在 sgid_dir 去创建新的目录或文件时,其亲创建的目录或文件的所
属组会和 其目录 sgid_dir 保持一致 ; 而不是和用户 root 保持一致
了!!
Sticky Bit :
注 :
在介绍 Sticky Bit 之前先声明下 之前学的 SUID SGID ,我们前面学到的
SUID 是只针对程序( 二进制可执行文件的!)
SGID 是既可以针对 二进制可执行文件也可针对目录!
Sticky Bit 只能针对目录 !!
官方 :
在 具 有 SBIt 的目录下, 用户若在该目录下具有 w 及 x 权限 , 则当用户在该目
录下建立文件或目录时, 只有文件拥有者与 root 才有权力删除。
示例 :
[harry@bogon ~]$ ls -ld sbit_dir
drwxrwxrwx. 2 harry harry 6 Nov 4 19:37 sbit_dir
[harry@bogon ~]$ cd sbit_dir
[harry@bogon sbit_dir]$ touch file1{1..3}
[harry@bogon sbit_dir]$ ls -l
total 0
-rw-rw-r--. 1 harry harry 0 Nov 4 19:39 file11
-rw-rw-r--. 1 harry harry 0 Nov 4 19:39 file12
-rw-rw-r--. 1 harry harry 0 Nov 4 19:39 file13
上示 : 用户 harry 下 目录 sbit_dir 创建 三个 文件!
[natash@bogon ~]$ rm /home/harry/sbit_dir/file11
rm: remove write-protected regular empty file '/home/harry/sbit_dir/file11'? y
[harry@bogon ~]$ cd sbit_dir
[harry@bogon sbit_dir]$ ls -l
total 0
-rw-rw-r--. 1 harry harry 0 Nov 4 19:39 file12
-rw-rw-r--. 1 harry harry 0 Nov 4 19:39 file13
然后我们用 natash 用户 去删除 harry sbit_dir 目录下的 file1 文件。并且执行成功
因为 前面展示了 sbir_dir 的权限是 rwxrwxrwx, 我们知道 对于目录来讲 在其它用户权限
下具备了 w 权限就意味着 其它用户可以对这个目录进行 创建 删除 文件 !!
现在开始 秀操作 :
我们在 sbit_dir 的其它用户权限上添加 sbit 权限!
[harry@bogon ~]$ chmod o+t sbit_dir
[harry@bogon ~]$ ls -ld sbit_dir
drwxrwxrwt. 2 harry harry 34 Nov 4 19:44 sbit_dir
[natash@bogon ~]$ rm -rf /home/harry/sbit_dir/file12
rm: cannot remove '/home/harry/sbit_dir/file12': Operation not permitted
显然 natash 就无法删除 sbit_dir 目录下的文件了!!!
添加 sbit 权限后 只有 root 和文件的拥有者 才能删除!!!!
# 可以发现 增加 sbit 权限 是在 其它用户权限位的执行权限上添加的,这是规定。
添加的字符 是 t !!
至此,我们文件权限的 所有权限都学习完了!!!
一般权限和特殊权限都全部讲述完毕!!!
文件权限的数字表达 :
前面文章中讲过 一般权限的数字表达 ,现在我们所有权限都学习完了,我们来看看
一般权限和特殊权限叠加在一起的数字表达!!
数字表达 :
当所有权限都用数字表示的时候是用 : nnnn ( 四位数字 )
n nnn
特殊权限 一般权限
四位数字表示时, 一般权限还是按照它的数字方法表示!!
特殊权限的一位数字 则是 四位数字中的第一位数字 :
标志位数字 : 二进制数字 :
SUID SGID Sticky
0——表示不设置特殊权限 000
1——表示只设置sticky 001
2——表示只设置GUID权限 010
3——表示只设置SGID和sticky权限 011
4——表示只设置SUID权限 100
5——表示只设置SUID和sticky权限 101
6——表示只设置SUID和SGID 110
7——表示同时设置SUID、GUID、sticky3种权限 111