- A+
我们先创建几个用户角色,来更好的测试suid的功能
groupadd inca #创建一个组inca
useradd oldgirl -g inca #创建用户oldboy属于inca组
useradd oldboy -g inca #创建用户oldgirl属于inca组
useradd test #创建一个默认组的用户test
1.先来看一个passwd特殊权限的实例:
[root@localhost ~]#ls /etc/shadow -l #来到存放用户密码的文件下面
----------. 1 root root 953 Jul 28 09:50 /etc/shadow #此时文件没有改动,也没有权限
[root@localhost ~]#md5sum /etc/shadow
9333d150f6157cbc65abbf7619356dc3 /etc/shadow
我们登录刚才创建的oldboy用户,用passwd命令修改了用户oldboy的密码
此时我们在root用户的模式下看到/etc/shadow刚才生成的指纹已经发生了变化
注意:以上在用户oldboy中能修改密码的前提是我们必须在root用户中给oldboy用户设置一个初始密码
经过以上演示,我们看到了在oldboy用户下修改了passwd,刚才我们看到的/etc/shadow是没有任何权限的,那为什么oldboy普通用户怎么能修改掉密码呢?
问题就在passwd命令本身,这个命令被设置了特殊权限位(suid)。
2.suid作用:
1.针对二进制命令.
2.给passwd命令设置了suid,则任何用户执行passwd命令都会拥有和passwd命令对应的用户的权限.
我们知道,普通权限一共有9位,即:u用户3+g用户组3+o其他用户3
现在有一个特殊权限位s,每一权限位变成了4位,用户s+rwx,用户组s+rwx,其他用户位(粘滞位)t+rwx,总共12位权限。
suid:用户
前三位用户位的x位:S s(x)
s 4 #数字权限
sgid:用户组
中三位用户组位的x位:S s(x)
s 2 #数字权限
粘滞位: /tmp
后三位其他用户位:x位:T t(x)
t 1 #数字权限
现在我们更改一下rm命令的权限:
可以看到两个方法都能给rm命令提权到suid,
综合以上,suid特殊权限,在普通用户里可以修改部分文件,特别危险,还有类似的危险命令都可以修改文件
比如:rm,vim,cat等都是有害命令,防不胜防,我们知道cat是查看命令,但是它依然能够利用重定向在文件里修改内容。
3.目前我们创建的test用户位普通用户,我们通过vim编辑配置文件的方法,增加suid权限,提权到root用户,需要注意的是,在此操作过程中,也是在root用户下进行。
首先我们要给/bin/vim 增加suid权限:
chmod u+s /bin/vim vim /etc/sudoers
现在我们的test账户已经提权到root用户级别,当我们登录到test用户后,再切换回root用户时,不需要再输入root的密码,就可以切换回去
但是在这里我们还要注意一下哎,当我们没有用提权sudo标志切换的时候,系统依然要求我们要输入root的管理密码
现在我们带上sudo标志,可以看到已经不需要root密码就可以将用户切换回去。
以下总结了如何防止普通用户登入系统和web用户通过80端口进入网页服务器来给自己的用户提权,我们可以将suid这样的危险权限做一个限制。
1.禁止给命令设置suid:
1)应用软件PHP(/etc/php.ini)禁止开启读取系统文件等的函数cat。
2)磁盘挂载禁止suid。
2.给关键文件加锁/etc/sudoers,因为编辑这里可以给用户提权。
3.chmod 000 /etc/sudoers,我们在root用户下修改sudoers文件的权限为0,不能编辑任何内容。
4.监控好/etc目录权限,防止文件被替换。
5.所有系统和站点文件和目录用户和组都用root。
6.文件统一644,目录统一755,文件和目录的默认权限。
7.web应用禁止上传特殊文件到服务器:
上传后禁止浏览(get请求方法,目录uri,动静分离)。
开启wap防火墙各种限制80(80端口是web的默认端口)进入,使用加密的https传输协议。
8.ssh监听内网,禁止root远程连接,vpn拨号。