一·SetUID
1)只有可执行二进制程序才能设定SUID权限
2)命令执行者要对该程序拥有x(执行)权限(如果当前文件没有执行权限,着会出现大S权限,大S权限是无效的,s=S+x,s才是超级权限。)
3)命令执行者在执行该程序时获得该程序文件属主身份
4)SetUID权限只在程序执行过程中有效
5)设定SetUID方法 权限4代表SUID
chmod 4755 [文件名]
chmod u+s [文件名]
取消SetUID
chmod u-s [文件名]
chmod 0755 [文件名]
我们可一看出,设置了SetUID后的文件,在用户权限那里,执行权限变为s
[root@localhost ~]# chmod 4755 1
[root@localhost ~]# ll 1
-rwsr-xr-x. root root 月 :
passwd拥有SetUID权限,所以普通用户可以修改自己密码
cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
让没有权限的人执行时获得所有者的权限,这个所有者一般为root,常见应用如passwd
文件所有者要有x权限才有意义,所有者没有执行权限它就会变S
建议大家在生产环境中不要轻易设置此权限,不然很有可能服务器面临安全隐患,当然也要防止服务器莫名出现SetUID权限的文件
写个脚本检测:
定期检查suid
#!/bin/bash
find / -perm - -o -perm -> /tmp/setuid.check
for i in $(cat /tmp/setuid.check)
do
grep $i /home/suid.log> /dev/null
if [ "$?" != "0" ]
then
echo "$i isn't in listfile!">>/home/suid_log_$(date +%F)
fi
done
rm -rf /tmp/setuid.check
二·SetGID
1.1)SetGID针对文件的作用
2)只有可执行二进制程序才能设定SGID权限
3)命令执行者要对该程序拥有x(执行)权限
4)命令执行执行程序时,组身份升级为该程序文件的属组
5)SetGID权限只在程序执行过程中有效
> 例子 /usr/bin/locate具有SetGID身份
2.1)SetGID针对目录的作用
2)普通用户必须对此目录必须拥有r和x权限,才能进入此目录
3)普通用户在此目录中的有效组会变成此目录的属组
4)若普通用户对此目录拥有w权限,新建的文件的默认属组是这个目录的属组
3.设置SetGID
设定SetGID
chmod g+s [文件名]
chmod 2755 [文件名]
取消SetGID
chmod g-s [文件名]
chmod 0755 [文件名]
可以看到设置了SetGID权限,用户组权限变成一个s
[root@localhost ~]# chmod 2755 2
[root@localhost ~]# ll 2
-rwxr-sr-x. root root 月 :
三·Sitcky BIT(粘滞位)
1)SUID只能对执行文件生效,SGID能对目录和执行文件生效,SBIT只能对目录生效
2)要赋予SBIT 权限必须给目录普通用户赋予7权限,因此也比较危险。
3)赋予SBIT权限: chmod o+t 或者 chmod 1***
4)目录有SBIT权限后,任何普通用户都可以在目录下新建文件,但是只能删除自己创建的文件,不允许删除其它用户的文件。
5)/tmp/ 目录默认有SBIT权限
在其他人的权限那里,执行权限变为t
[root@localhost ~]# ll /tmp -d
drwxrwxrwt. root root 月 : /tmp
6)设置SBIT权限
增加权限
chmod 1775 [文件]
chmod o+t [文件]
删除权限
chmod 0775 [文件]
chmod o-t [文件]
此权限符合临时目录的要求
四·总结一说
setUID仅对文件生效
setGID对文件目录都有效
Sticky BIT 仅对目录生效