Linux下除了r,w,x的权限之外,还有SUID SGID SBIT三种特殊权限

  1. SUID

如果某个文件具有SUID权限的时候,运行某程序时,执行者暂时拥有文件所有者的权限;只能作用在二进制程序文件上

对于shell脚本是无效的。

chmod u+s FILE  #注意,必须添加文件的所有者身上。

chmod u-s FILE

如果FILE本身原来就有执行权限,则SUID显示为s;否则显示S;

Linux基础(14)Linux的特殊权限_SUID

对于passwd文件,它具有SUID权限,当一个非root用户试图执行passwd修改自己密码时候,启动的进程的属主是root,而非这个用户,由于passwd是通过修改/etc/shadow下的文件来修改自己密码的,因此尽管该用户对/etc/shadow文件没有读写权限,他还是可以修改文件的,因为进程的属主是root.

Linux基础(14)Linux的特殊权限_SGID_02

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