我正在做一个具有特殊权限位的小实验,如下所示:
[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 位上进行了实验