setuid 和 setgid 的奇怪行为

setuid 和 setgid 的奇怪行为

我正在做一个具有特殊权限位的小实验,如下所示:

[root@localhost~]# useradd user1
[root@localhost~]# cp /bin/touch /home/
[root@localhost~]# chown user1:user1 /home/touch
[root@localhost~]# chmod u+s,g+s /home/touch
[root@localhost~]# ls -l /home/touch
-rwsr-sr-x 1 user1 user1 52656 Jun 26 14:17 /home/touch
[root@localhost~]# chmod o+w /usr/local/etc/
[root@localhost~]# ls -ld /usr/local/etc
drwxr-xrwx.2 root root 4096 Jun 26 14:14 /usr/local/etc/
[root@localhost~]# /home/touch /usr/local/etc/root.1
/home/touch: cannot touch '/usr/local/etc/root.1': Permission denied

因为可执行文件设置了 suid 位和 sgid 位/home/touch,所以我预计当 root 执行命令时/home/touch /usr/local/etc/root.1,有效的user:group应该是user1:user1,它应该具有对目录的写访问权限/usr/local/etc(参见o=rwx)。

但结果让我很疑惑,其实这个root组里的任何用户都会像root一样运行失败,但是其他用户都可以成功运行上述命令。

只有在我通过 更改目录模式后chmod g+w /usr/local/etc,属于该root组的用户才能在没有权限错误的情况下运行命令。

任何正在运行的用户的有效用户组难道不应该/home/touch是 吗user1:user1?root 组有什么问题?我遗漏了什么吗?

我在 RHEL 6.4 64 位上进行了实验

相关内容