文件的权限除了rwx即读、写、执行的权限还有其他特殊的权限
即Set UID,当s的标志出现在文件拥有者的x位置上时,就拥有SUID的权限,具体来说功能如下
我们可以由如下的例子,对于linux系统/usr/bin/passwd这个文件记录所有账号的密码,只有root可以读写入这个文件
但对于我的普通用户astraym也可以通过passwd指令来修改自己的密码
但是如果用cat指令去读取密码就不能读取
这是因为cat指令没有被设置SUID的权限
用一张示意图来说明SUID执行的过程
如果我们想要让astraym能够读取/etc/passwd文件的内容,只需要让root用户用chmod指令给与其SUID的权限即可
即Set GID,当s的标志出现在用户组的x位置上时,就拥有SUID的权限。与SUID不同的是,SGID可以针对目录或者文件来设置,对文件来说SGID有如下的功能,这个时候SGID的用法和SUDI非常相似。
除了二进制程序之外,SGID也能作用于目录,当一个目录被设置了SGID的权限之后
即Sticky Bit目前只针对目录有效,对于文件没有效果,SBIT的作用是:
简单来说,当SBIT位标记的时候,除了所有者和root能够删除该目录的文件
举个例子,linux的/tmp本身的权限是[drwxrwxrwt],权限信息的最后一位t表面该目录被设置了SBIT权限。我们在这里新建一个名为test的文件并将权限设置为777,然后尝试删除该文件。
可以看到我们没法删除/tmp下的test文件
以数字类型设置权限
SUID/SGID/SBID权限对应的数字分别为
SUID->4 SGID->2 SBIT->1 #设置一个权限为'-rwxr-xr-x'的文件test的SUID权限,在原先的755前加上4即可,其他同理 chmod 4755 test;
一般情况下,s或者t会代替x这个权限。但是当这个文件或者目录本身没有x权限,添加SUID、SGID、SBIT之后会显示为大写的S或T:
这种情况是需要非常注意的,当文件的拥有者都无法执行该文件时,拥有SUID的用户当然也没法执行。
以符号类型设置权限
chmod u+s test #为test文件加上SUID权限 chmod g+s test #为test目录加上SGID权限 chmod o+t test #为test目录加上SBIT权限 chmod g+s,o+t test #为test目录加上SGID和SBIT权限