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,故应正常执行