使用 chmod 6110 运行 `less` 时为什么会出现“权限被拒绝”?

使用 chmod 6110 运行 `less` 时为什么会出现“权限被拒绝”?

假设您是用户x,所以运行id给出

uid=1001(x) gid=1001(x) groups=1001(x)

还有一个y用户

uid=1002(y) gid=1002(y) groups=1002(y)

现在,我们在用户的主目录中root创建一个文件,如下所示:readmex

# cd /home/x
# touch readme
# echo "hello" > readme
# chown root:y readme
# chmod 640 readme

我们复制一份less

# cd /home/x
# cp /usr/bin/less .
# chown y:x less
# chmod 6110 less

我希望用户x能够readme通过运行来阅读./less readme由于 setuid 和 setgid,但我收到“权限被拒绝”错误。为什么?

这是我的逻辑,但可能有问题。

chmod 6110给出仅有的所有者 ( y) 和组成员 ( x) 的执行权。由于用户x属于组x,因此他可以执行less。然后setuid 使有效UID 与 相同y,setgid 再次使有效GID 与所有者的组相同y。而且既然readme是 的组yless应该有读取权限。

答案1

错误就出在这里:

setgid 再次使有效 GID 与所有者的组相同y

setgid 位使有效 gid 成为二进制文件所有者组的 gid,即x此处 ( chmod y:x less)。

less最终以与ys 对应的有效 uid 和与xs 对应的有效 gid 运行。由于readme属于root:y,因此无法读取。

相关内容