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 не подчиняется собственным инструкциям. Кто-нибудь знает какие?

1 ответ1

0

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

SETUID И SETGID БИТЫ

[...]

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .