Linux 文件权限 ( 下) 特殊权限 SUID 详解

文件和目录的特殊权限

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

               还有三个特殊权限 :

                            SET  UIDSUID )   ----      针对 用户

                            SET  GID  ( SGID )      ----      针对用户组

                            Sticky  Bit ( 粘滞位 ) ----     针对其它用户 

                

   SUID  :  

           官方  : SUID 是为了让一般用户在执行某些程序的时候, 在程序的运行期间, 暂时获得该

                         程序拥有者的权限。

                         #    注意上述中的 执行 二字,其实是说,当你普通用户在执行 SUID 的前提是已经

                               具备了 执行(x) 的权限 

           假设现在 有一个 scprit.sh(所属者是 testuser8 ) 程序,现在让  用户 rhcsa 去执行它,如果

           使用了 SUID ,那么,在执行期间就会让 用户 rhcsa 暂时获得  testuser8 的权限!!

            scrpit.sh 的权限是 rwxr-xr-xrhcsa 对于这个程序的权限即是 r-x , 那么,现在如果有

            SUID之后,那么 rhcsa 就会获取到 tsetuser8 的权限!!

            实际示例  :  例如 我们在 使用  Passwd  修改用户密码 !!

                                  我们有一个用户 natash  现在要去修改自己的密码,是执行 passwd 命令去

                                  修改密码的; 修改的密码呢,实质上 是要 保存在 / etc / shadow  文件的,

                                  也就是说 用户 natash 是要对 / etc / shadow 进行 访问 修改的;

                                  好,那现在来看一个问题 :

                                  我们查看了 / etc / shadow 文件的权限, 其权限是 :

                                  ----------. 1 root root  2041  Oct   23  15:11     /etc/shadow

                                  这个权限告诉我们什么呢, 说明了 / etc /shadow 这个文件对于所有用户是

                                  没有任何的权限的!! 除了  root   (  因为 root 是具备 所有权限的 )

                                  natash 执行的命令 passwd 它的所属用户及用户组是  root   root 

                                  那这不就是问题 : 

                                  / etc / shadow 的权限 针对所有用户都是 无权限,那 对于 普通用户 natash

                                  它是怎么去访问的呢??? natash 是没有权限访问 /etc /shadow 的啊!! 

                                  这就是因为 s  权限 !! ( 即 SUID ) 

                                  我们普通用户 natash 访问不了,而 root 用户是可以访问的,那也就是说 我

                                  们让 普通用户 去执行 passwd 的时候 临时获取 root 用户的权限就好了啊,

                                  就能够访问 / etc /shadow 了,这就需要 SUID 出面了!!!!!

                                 

                                 ( 当然了, 普通用户natash  获取了 root 的权限,也只能修改自己 natash

                                       的密码,你不能获取了 root 用户的权限就可以修改 其他用户的密码了,

                                       这是不可能的! )

                                   所以,在 passwd 上面 会有一个 SUID 的设置( 在用户位的执行位上 加 s

                                   这个 s 就代表的是 SUID ) 就意味着 其它用户 在执行 passwd 的时候会临

                                   时获取 root 的权限,为什么会获取的是 root 的权限呢?? 而不是其它用户

                                   的权限呢??

                                   ===>>>  

                                                    这就在前面我们说到的, passwd 它的 所属用户 是 root !!

                                                    为什么会获取 root  权限,当然是  passwd 命令的所属主 就是

                                                    root 啊,那 当 s 权限 一具备的时候,就意味着 其它用户临时具

                                                    备了 root 用户的权限!!!  

                           

                                  我们看下 passwd  的权限是怎样的 ? 在它的执行位上是不是 s ??

                                   ===>>> 

                                             -rwsr-xr-x.   1   root   root 34512 Aug 13  2018  /usr/bin/passwd

                                    可以看到,  在用户位的执行权限上 是 s   这就意味着 SUID  !!

                                     

                     综上          就解释了 为什么 / etc /shadow 的权限是 -----------,而普通用户

                                       natash 却依然可以访问 /etc/shadow ,就是因为 passwd 的 SUID

                                       的权限作用!!! 

                      SUID 即 : set UID    UID 指的就是 拥有者的ID , 以上示举例 passwd的程序就是

                                        ( /usr /bin /passwd )  的拥有者就是 root 

                      注 :   SUID  仅对 二进制文件 有效 !!!!

        实际示例 :     我们再以 cat  命令 举例 

                                先看下准备材料 :

[natash@bogon ~]$ vim spec.txt
[natash@bogon ~]$ ls -l spec.txt
-rw-rw-r--. 1 natash natash 13 Nov  4 11:26 spec.txt
[natash@bogon ~]$ chmod 700 spec.txt
[natash@bogon ~]$ ls -l spec.txt
-rwx------. 1 natash natash 13 Nov  4 11:26 spec.txt

                               上示  是说 在普通用户 natash 下 创建了一个 spec.txt 的文件,并且改了

                               spec.txt 的权限使得其权限 变为 -rwx-------- ,也就是说 对于 spec.txt 文件的权

                               限只有其 所属主 具备 rwx 权限,其它所有普通用户都不具备普通权限!!

                               

                              我们要用 cat 举例,现在也需要看看 cat 的权限 :

                               ===>>>

                                          -rwxr-xr-x. 1 natash natash 51856 Jan 11  2019 /usr/bin/cat 

                                看下 spec.txt 文件里的内容 :

                                

 

                    材料准备完了,现在看问题 :

                    我们修改了 spec.txt 的权限变为了 -rwx--------, 其它普通用户是没权限访问的,那现在

                    又有一个 harry 用户,就是想要查看 spec.txt 的内容怎么办 ??

                    当然了,在什么都不做的情况下,你 普通用户 harry 是压根就没法查看 spec.txt 的,

                    你没有权限呀!!

                    

                    那  harry 想要 查看 spec.txt 内容 怎么办 ????

                    我们自然就要想到 SUID  的作用!!!!

                    也就是说 现在我们需要 给 cat 的程序( /usr/bin/cat ) 加上 s 权限!!

                    那怎么进行 SUID 的设置呢 ???

                    SUID 我们是说 针对 用户的 ,所以我们就使用 chmod  u +- s  权限!!

                    所以我们就给 cat 加上 s 权限:

[natash@bogon ~]$ chmod u+s /usr/bin/cat
[natash@bogon ~]$ ls -l /usr/bin/cat
-rwsr-xr-x. 1 natash natash 51856 Jan 11  2019 /usr/bin/cat

                    可以看到  cat  命令的权限 已经有 s 权限了,这也就意味着  harry 用户 在使用 cat 命

                    令时候,可以临时获取 natash 权限,也就具备了 查看 spec.txt 的权限!!

                    ===>>>

[harry@bogon ~]$ cat /home/natash/spec.txt
123456jujuju

                       如上所示,现在 harry 用户 就可以查看 spec.txt 的内容了!!!

                :  还需要提的一点是 

[natash@bogon ~]$ ls -l /usr/bin/cat
-rwsr-xr-x. 1 natash natash 51856 Jan 11  2019 /usr/bin/cat

                          我们给 cat 设置了 s 权限, 上面说过了,要想设置 s 权限的前提是 已经具备了 执

                          行权限( 已经具备了 x 权限) 

                          上示也是如此,虽然显示了 s 权限,并没有显示 x 权限,但实际上 x 权限已经具

                          备了!!

                                

                          现在我们做一点小改变:

                          在上示权限的基础上 删除 执行( x ) 权限再查看,看看会有什么变化 :

                         

                         看上示, 是不是   小 s  变为了 大 S !

                         这就是说 如果用户位上没有执行权限 那么 就会变为  大 S,

                                        如果用户位上有执行权限那么 就是 小 s !!

       

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值