Linux下除了r,w,x的权限之外,还有SUID SGID SBIT三种特殊权限
SUID
如果某个文件具有SUID权限的时候,运行某程序时,执行者暂时拥有文件所有者的权限;只能作用在二进制程序文件上
对于shell脚本是无效的。
chmod u+s FILE #注意,必须添加文件的所有者身上。
chmod u-s FILE
如果FILE本身原来就有执行权限,则SUID显示为s;否则显示S;
对于passwd文件,它具有SUID权限,当一个非root用户试图执行passwd修改自己密码时候,启动的进程的属主是root,而非这个用户,由于passwd是通过修改/etc/shadow下的文件来修改自己密码的,因此尽管该用户对/etc/shadow文件没有读写权限,他还是可以修改文件的,因为进程的属主是root.
2.SGID:
SGID表现为在文件的用户组执行权限上为s
SGID既可以作用于文件上,也可以作用在目录上。
作用于文件时,仅对二进制程序有效,用户在执行程序的时候具有改程序用户组的支持。
作于与目录时(常见),用户在此目录下的基本组变为此目录的用户组,即用户在这个目录下创建的文件的属组与该目录的属组相同,而不是用户的基本组。这个特性常用在项目开发上的权限配置上。
修改方式
chmod g+s DIR|FILE
chmod g-s DIR|FILE
3.SBIT: 如果某个目录具有SBIT权限,那么用户在这个目录下,只能删除,移动,重命名自己创建的文件,而不能删除其他人的文件。
修改方式
chmod o+t DIR
chmod o-t DIR
========================================================
下面我们来进行一个小实验,来巩固一下SGID,SBIT.
情景:假设存在一个项目目录test,该目录的属组是develop,要使tom和joe两个用户可以在test下面创建文件,并且可以彼此查看,修改对方的文件,但是不允许删除对方的文件,对于其他人来说,对于test目录没有权限。要如何配置?
很简单,只需要将tom和joe的附加组设置为develop,并且将为test目录添加SGID,SBIT权限即可。
具体步骤如下
groupadd develop
cd /tmp
mkdir test
chmod 770 test
chown root.develop test
chmod g+s test
chmod o+t test
useradd -G develop joe
useradd -G develop tom