Linux 文件权限(下) 特殊权限 SGID Sticky Bit 详解

文件和目录的特殊权限

               在文件权限里 除了 前面我们讲的普通权限 ( r w x );

               还有三个特殊权限 :

                            SET  UIDSUID )   ----      针对 用户

                            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

     

      

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值