chmod всегда сбрасывает бит setgid для каталогов, если я не в группе

3

Вот сценарий: я использую Ubuntu Linux (12.10, если это имеет значение), и у меня есть каталог, права доступа которого, таким образом:

drwxrws--- paul www-data    myfolder/

Вы можете видеть, что setgidбит установлен. Если я изменяю какие-либо права доступа к этой папке (например, chmod o+x myfolder), он сбрасывает setgidбит.

Согласно chmodсправочной странице:

chmod сохраняет каталог set-user-IDи set-group-IDбиты, если вы явно не укажете иначе.

В другом месте говорится, что он сбрасывает setgidбит, если группа файла не соответствует эффективному идентификатору группы пользователя, а только для обычных файлов (т. Е. Не для папок). Итак, поскольку моя группа paulскорее, чем www-dataя, я ожидал бы, что вышеприведенное произойдет, если бы myfolder/это был обычный файл, но это не так - это каталог.

Так что либо я неправильно понимаю руководство, либо chmodне подчиняюсь собственным инструкциям. Кто-нибудь знает какие?

Пол д'Ауст
источник

Ответы:

0

Это объясняется в том же разделе, который вы уже цитировали на странице руководства chmod

SETUID И SETGID БИТЫ

[...]

Это поведение зависит от политики и функциональности основного системного вызова chmod . В случае сомнений проверьте поведение системы.

При трассировке chmodон пытается установить бит setgid, но базовый chmod()системный вызов игнорирует его.

fchmodat(AT_FDCWD, "b", 02755)          = 0

Как видите S_ISGID (02000), устанавливается chmodкомандой, но не системным вызовом chmod() [здесь: fchmodat()]:

drwxr-xr-x 2 me notmygrp 16 Mar 19 12:37 b

Таким образом, удаление бита setgid также верно для каталогов, если вы не являетесь членом группы.

Mariux
источник