Я делаю небольшой эксперимент со специальными битами привилегий следующим образом:
[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
? Что не так с корневой группой? Я что-то пропустил?
Я взял эксперимент на RHEL 6.4 64-битной