Linux-文件的特殊权限

前言

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


    Linux-文件的特殊权限_第1张图片
    s&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.1kB
    SGID.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文件。


    Linux-文件的特殊权限_第2张图片
    locate.png-43.7kB
  • 对目录来说,SGID有如下功能:

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


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


    Linux-文件的特殊权限_第4张图片
    SGID-Dir2.png-62.7kB

SBIT

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


    Linux-文件的特殊权限_第5张图片
    SBIT.png-25.3kB

SUID/SGID/SBIT的权限设置

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


    Linux-文件的特殊权限_第6张图片
    testPower.png-18.3kB
  • 此外,字符表示法对特殊权限也是适用的。演示如下:


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


    Linux-文件的特殊权限_第8张图片
    testPower3.png-16.9kB

END

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

你可能感兴趣的:(Linux-文件的特殊权限)