linux 之sudo 和setid权限提升
sudo
sudoers
/etc/sudoers
- 该文件可配置某用户是否有权限使用sudo命令,及使用sudo时,是否需要输入密码。
root ALL=(ALL) ALL
kevin ALL=(ALL) NOPASSWD:/bin/vi /root/ifconfig.log
- kevin表示"将要授权的用户", 比如例子中的root和kevin;以%号开头的表示"将要授权的组", 比如例子中的%wheel组 和 %sudo组
- ALL表示允许登录的主机, ALL表示所有; 如果该字段不为ALL,表示授权用户只能在某些机器上登录本服务器来执行sudo命令
- (ALL) 如果省略, 相当于(root:root),表示可以通过sudo提权到root; 如果为(ALL)或者(ALL:ALL), 表示能够提权到(任意用户:任意用户组)。请注意,如果没省略,必须使用( )双括号包含起来。这样才能区分是省略了"字段3"还是省略了"字段4"
- NOPASSWD表示不需要输入密码
/bin/vi /root/ifconfig.log
表示可以通过sudo执行的命令,如果多个命令通过,
间隔- 上述配置表示 kevin 无需密码即可使用sudo 执行命令
/bin/vi /root/ifconfig.log
通过vi 权限提升
如果通过sudo -l
发现存在有权限执行的vi命令,可通过sudo vi 进入命令,然后执行:/bin/bash
切换至root用户
setid
在root用户下创建start.sh
#!/usr/bin/env bash
echo "start"
one
执行命令
chmod o+x start.sh
chmod u+s start.sh
在root用户下创建/usr/bin/one
#!/usr/bin/env bash
echo "test"
执行命令
chmod o+x /usr/bin/one
切换至非root账户
- 添加path
export PATH=/home/kevin:$PATH
- 在当前目录下新建one文件
/bin/sh
- 执行start.sh,发现切换至root
问题
如果/usr/bin/one的权限为-rwxr--r--,为什么非root账号执行start.sh报错,原则上执行start.sh时,由于设置了suid所以以root执行one,故应正常执行