天天看点

3-4·Linux中附加权限、粘滞位权限

一·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 仅对目录生效

继续阅读