Какова цель каталога setgid?

11

Я знаю, как работает setgid, но я не знаю, почему он разработан, есть ли пример, чтобы проиллюстрировать, какие проблемы он решает?

Xiè Jìléi
источник

Ответы:

18

Хотя файл setgid / бинарный файл может быть явно бесполезным, я определенно считаю, что бит setgid очень полезен для каталогов. Предполагая, что вы являетесь частью разных рабочих групп, каждая из которых имеет свои собственные группы Unix (разрешения). Разумеется, вы захотите установить бит setgid для папок проекта, убедившись, что при создании новых файлов применяется правильное владение группой, и тем самым разрешить своим коллегам в этой группе проекта доступ к этим файлам?

andol
источник
2
Если вы используете CVS, вы, вероятно, будете очень хорошо знакомы с ним именно по этой причине (если каталоги в хранилище не настроены, то вы получаете множество ошибок прав доступа, поскольку разные пользователи пытаются извлекать и фиксировать файлы)
Подавление
Да, вы правы, другие пользователи могут делиться (читать) файлами, созданными вами, в директориях setgid, но права на запись в группу (g + w) не наследуются в директории setgid, и, таким образом, другой пользователь не может присоединиться к подпрограмме. каталог, созданный вами в каталоге setgid, это ограничивает его использование. И поэтому у меня есть этот вопрос, он решает проблему общего чтения CVS, но не совместного использования записи во вновь созданные каталоги. ??
Xiè Jìléi
1
Вот почему вы также хотите использовать подходящие настройки Umask. Например, umask 007 оставил бы полные разрешения для пользователя и группы, но не для других.
Андол
13

Основное использование - сохранить владельца группы дерева файлов:

[lockie@bubbles tmp]$ mkdir dir1 && touch dir1/file && mkdir dir1/dir
[lockie@bubbles tmp]$ mkdir dir2 && chgrp staff dir2 && chmod 2755 dir2 && touch dir2/file && mkdir dir2/dir
[lockie@bubbles tmp]$ ls -al dir1
total 32
drwxrwxr-x   3 lockie  lockie   4096 Dec 13 19:32 .
drwxrwxrwt 125 root root 20480 Dec 13 19:32 ..
drwxrwxr-x   2 lockie  lockie   4096 Dec 13 19:32 dir
-rw-rw-r--   1 lockie  lockie      0 Dec 13 19:32 file
[lockie@bubbles tmp]$ ls -al dir2
total 32
drwxr-sr-x   3 lockie  staff  4096 Dec 13 19:32 .
drwxrwxrwt 125 root root  20480 Dec 13 19:32 ..
drwxrwsr-x   2 lockie  staff  4096 Dec 13 19:32 dir  < note new dir is g+s, owned by "staff" group, so the setgid behaviour acts recursively
-rw-rw-r--   1 lockie  staff     0 Dec 13 19:32 file < note new file is owned by "staff" group
[lockie@bubbles tmp]$

Это имеет тенденцию быть полезным в средах, где разные пользователи будут создавать / редактировать файлы / каталоги в каталоге: когда все файлы / каталоги находятся в одной группе, все пользователи могут редактировать / изменять файлы / каталоги (разрешения разрешают): это позволяет избежать ситуаций например, «xyz владеет файлом abc, поэтому я не могу его отредактировать».

Альтернативой использованию setgid таким способом является опция монтирования файловой системы grpid .

От человека гора:

grpid или bsdgroups / nogrpid или sysvgroups

Эти параметры определяют, какой идентификатор группы получает только что созданный файл. Когда установлен grpid, он принимает идентификатор группы каталога, в котором он создан; в противном случае (по умолчанию) он принимает fsgid текущего процесса, если только в каталоге не установлен бит setgid, в этом случае он берет gid из родительского каталога, а также получает установленный бит setgid, если это сам каталог.

При включении файлы / каталоги, созданные в файловой системе, смонтированной на grpid, также наследуют группу родительского каталога:

[lockie@bubbles ~]$ mount | grep /home
/dev/mapper/VolGroup00-home on /home type ext3 (rw,grpid)
[lockie@bubbles ~]$ mkdir dir3 && touch dir3/file && mkdir dir3/dir
[lockie@bubbles ~]$ ls -al dir3
total 12
drwxrwxr-x  3 lockie users 4096 Dec 13 19:37 .
drwxrwxr-x 12 lockie users 4096 Dec 13 19:37 ..
drwxrwxr-x  2 lockie users 4096 Dec 13 19:37 dir < inherited "users" group from parent dir
-rw-rw-r--  1 lockie users    0 Dec 13 19:37 file  < inherited "users" group from parent dir
[lockie@bubbles ~]$

Я обнаружил, что использование опции grpid соответствующим образом снижает вероятность человеческой ошибки (поскольку файловая система работает независимо от прав доступа dir).

Локи
источник