美文网首页
Linux-文件的特殊权限

Linux-文件的特殊权限

作者: agile4j | 来源:发表于2019-03-23 00:00 被阅读0次

    前言

    • 我们知道在Linux里文件和目录有r、w、x这三个读、写、执行的权限。但有时还会在权限里看到s和t,例如:


      s&t.png-18kBs&t.png-18kB
    • 这又是代表的什么权限呢?实际上,s和t是Linux里的特殊权限,具体有SUID、SGID、SBIT三种。

    SUID

    • 当s出现在文件所有者的x权限上时,就被称为Set UID,简称SUID。例如前言中的/usr/bin/passwd文件,它的权限状态是:-rwsr-xr-x 1 root root
    • SUID具体的功能和限制是:
    1. SUID权限仅对二进制程序有效;
    2. 执行者对于该程序需要具有x的可执行权限;
    3. 本权限仅在执行改程序的过程中有效;
    4. 执行者将具有该程序的拥有者(owner)权限;
    • 举例来说,Linux里所有的账号和密码都记录在/etc/shadow文件里,这个文件的权限是:-rw-r----- 1 root shadow。但我们的一般用户修改密码时(passwd命令)必然会变动该文件的内容,而一般用户又不具有该文件的修改权限,那是怎么修改成功的呢?这就是SUID的功能了。
    • 因为一般用户对于passwd(/usr/bin/passwd)都是有执行权限的;而passwd的拥有者(owner)是root账号;又因为passwd的拥有者具有s权限;所以一般用户执行passwd的过程中会获得passwd的拥有者的权限(即root权限);因此/etc/shadow可被一般用户所执行的passwd修改。
    • 通过上面这个例子相信大家就能够理解SUID的作用了。
    • 另外需要注意的是,SUID仅可用在二进制程序上,不能用着shell脚本上。因为shell脚本也只是将很多的二进制文件调用执行而已。所以SUID的权限部分,还是得看shell脚本调用进来的程序的设置。
    • 此外,SUID对于目录是无效的,这点也需要注意。

    SGID

    • 当s标记在文件拥有者的x上时为SUID,那s标记在用户组的x上时则称为Set GID,简称SGID。例如:


      SGID.png-11.1kBSGID.png-11.1kB
    • 和SUID不同的是,SGID对于文件和目录都有效
    • 对文件来说,SGID有如下功能:
    1. SGID对二进制程序有用;
    2. 程序执行者对于该程序来说,需具备x的权限;
    3. 执行者在执行过程中将会获得该程序用户组的支持;
    • 举例来说,/usr/bin/locatec程序依赖/var/lib/mlocate/mlocate.db文件的内容;而一般用户对于mlocate.db没有任何权限;但在执行/usr/bin/locate程序时,一般用户会获得mlocate用户组的支持;因此就能够去读取mlocate.db文件。


      locate.png-43.7kBlocate.png-43.7kB
    • 对目录来说,SGID有如下功能:

    1. 用户若对于此目录具有r和x的权限,则能够进入此目录;
    2. 用户在此目录下的有效用户组(effective group)将会变成该目录的用户组;
    3. 若用户在此目录下具有w的权限,则用户创建的新文件的用户组和此目录的用户组相同;
    • SGID用于目录时,一般用来搭建同一用户组下所有用户都有最大权限,且不许其他人进行查阅的“共同开发目录”。例如:


      SGID-Dir.png-149kBSGID-Dir.png-149kB
    • 为什么一定要用SGID权限呢,直接把用户组改成project不可以实现这个效果么?答案是无法实现。因为默认文件的所有者和所属组都是文件的创建者,除非收到修改文件所属组,否则project组下的workerb用户,只会有r权限,没有w权限。演示如下:


      SGID-Dir2.png-62.7kBSGID-Dir2.png-62.7kB

    SBIT

    • 当t标记在目录权限的x上时为SBIT。
    • SBIT(Sticky Bit)只对目录有效,对文件没有效果。
    • SBIT对目录的作用是:
    1. 当用户对于此目录具有w、x权限时;
    2. 当用户在该目录下创建文件或目录时,仅有自己与root才有权利删除该文件;
    • 也就是说,当一个用户对目录A具有了w权限,即代表该用户可对目录A内的任何文件和子目录进行删除、重命名、移动等操作。但如果目录A有了SBIT权限,则该用户只能对自己创建的子目录和文件进行删除、重命名、移动等,而无法对别人的文件进行这些操作。以/tmp目录为例,演示如下:


      SBIT.png-25.3kBSBIT.png-25.3kB

    SUID/SGID/SBIT的权限设置

    • 我们知道可以用类似chmod 755 dir这样的数字权限表示法来修改目录或文件的r、w、x权限,对于特殊权限这个方法也是适用的,只需要在现有的三位数字前再加上一位数字。三个特殊权限的数字表示分别为:
     SUID:4
     SGID:2
     SBIT:1
    
    • 演示如下:


      testPower.png-18.3kBtestPower.png-18.3kB
    • 此外,字符表示法对特殊权限也是适用的。演示如下:


      testPower2.png-18.6kBtestPower2.png-18.6kB
    • 最后还有一点需要注意的是,s和t都是加在x权限位置上的,也就是说具有x权限是s和t权限的前提。如果在没有x权限的情况下加了s或t权限,则会显示大写的S或T,表示“空的”,也不会有任何效果的:


      testPower3.png-16.9kBtestPower3.png-16.9kB

    END

    参考资料:《鸟哥的Linux私房菜》

    相关文章

      网友评论

          本文标题:Linux-文件的特殊权限

          本文链接:https://www.haomeiwen.com/subject/pvxjvqtx.html