转载自《鸟哥的Linux私房菜》第七章、Linux 文件与目录管理
当s标志在文件拥有者的x项目中为SUID特殊权限,那s在群组的x时则称为Set GID。举例来说,你可以用底下的命令来观察具有SGID权限的文件:
ubuntu中观察/usr/bin/locate文件一直跟踪到/usr/bin/mlocate才是真正的二进制可执行程序:
centos观察/usr/bin/locate文件:
与SUID不同的是,SGID可以针对文件或目录来配置!如果是对文件来说,SGID有如下的功能:
SGID对二进位程序有用; |
程序运行者对于该程序来说,需要具备x的权限; |
运行者在运行的过程中将会获得该程序群组(Group)的权限支持! |
ubuntu:
centos:已经没有mlocate.db了
与SUID非常的类似,档以vbird这个账号去运行mlocate或locate运行档时(作为others,具有x权限),那vbird将会取得slocate群组的权限,因此就能去读取mlocate.db文件了。
除了binary program之外,事实上SGID也能用在目录上,这也是非常常见的一种用途!当一个目录配置了SGID的权限后,它将具有如下的功能:
1、使用者若对于此目录具有r和x的权限时,该使用者能够进入此目录(x权限自然就是使用者能进入此目录啦); |
2、使用者在此目录下的有效群组(effective group)将会变成该目录所在的群组;(可以理解为使用者执行其x权限进入此目录后将具有目录所在群组的权限,相当于此时使用者的有效群组变成目录所在群组); |
3、用途:若使用者在此目录下具有w的权限(可以新建文件),则使用者所创建的新文件,该新文件的群组与此目录的群组相同(以目录的群组的权限在目录下新建文件,则新文件的群组与目录的群组相同)。 |
首先确定/srv/ahome目录的需求:要求该目录只允许同在project组的alex与arod去rwx,就以root用户来建立该目录(或者在alex与arod中选一个作project群组的老大来全权管理该目录),那该目录的权限首先得是drwxrwx--- root project /srv/ahome,此时alex与arod都可以进入/srv/ahome目录增(自己新建)删查文件,但alex在目录中建立的文件的权限将是-rw-rw-r-- alex alex <filename>,arod在目录中建立的文件的权限将是-rw-rw-r-- arod arod <filename>,二者建立的文件只能相互读、删除(具有目录群组prject的w权限)而不能写(增删改)。为此要将目录额外增加SGID权限:drwxrws--- root project /srv/ahome,如此alex与arod各自执行x权限进入/srv/ahome目录后便具有目录所属群组project的rwx权限,从而可以相互写(增删改)对方的文件,这才是该建立该目录的初衷诉求。