9.7. Создание общих каталогов с использованием setgid и бита закрепления

Проблема
Пользователям нужен общий каталог для обмена файлами. Вы хотите, чтобы все
общие файлы принадлежали одной группе.
Решение
Воспользуйтесь битом setgid для автоматического назначения файлов принадлеж ности к общей группе.
Вот как это делается в восьмеричной записи:
# chmod -v 2775 /общий-каталог
Также можно использовать символическую запись:
# chmod -v +s /общий-каталог
Учтите, что флаг +s устанавливает оба бита, setgid и setuid, что может создать
угрозу для безопасности, если в этом каталоге хранятся исполняемые файлы или
сценарии. Команда chmod 2775 устанавливает только бит setgid.
ВНИМАНИЕ
Бит setuid пробивает большую брешь в системе безопасности. Не используйте его для исполняемых
файлов. Программы, использующие его (например, /usr/bin/passwd), содержат внутренние меры
защиты для предотвращения эскалации привилегий и других нарушений. Если в системе имеются
сценарии, которые должны запускаться пользователями, создайте для этой цели специальную группу.
Установите статический бит (sticky bit), чтобы файл не мог быть удален ни кем, кроме владельца:
# chmod +t /общий_каталог
или
# chmod 3775 /общий_каталог
mm Ч
Комментарии
Все файлы, создаваемые в каталоге, принадлежат той же группе, что и сам ката лог. Все файлы, скопированные в каталог, сохраняют принадлежность исходной
группе. Чтобы разные пользователи могли работать с одним каталогом, они долж ны принадлежать к одной группе. Разрешения файлов, создаваемых в каталоге,
определяются масками umask владельцев.
Каталог /tmp является классическим примером каталога, использующего ста тический бит:
# stat /tmp
Access: (1777/drwxrwxrwt) Uid: ( 07 root) Gid: ( 0/ root)
Каталог /tmp должен быть общедоступным для чтения и записи, но мы не хо тим, чтобы пользователи или процессы удаляли чужие временные файлы. Про блема решается при помощи статического бита.
Бит setuid позволяет пользователям выполнить команду с такими же разрешения ми, как у владельца файла. Именно так рядовые пользователи могут изменять свои
пароли, хотя запись в файл /etc/passwd разрешена только суперпользователю root:
$ stat /usr/bin/passwd
File: '/usr/bin/passwd'
Size: 26584 Blocks: 56 10 Block: 4096 regular file
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Комментарий
У статических битов есть еще одно применение. Давным-давно установка этого
бита для исполняемого файла приводила к тому, что файл оставался в памяти
после завершения его выполнения. В доисторическую эпоху Unix с примитив ным управлением памятью и слабосильным оборудованием это ускоряло запуск
программ. В наши дни об этом можно не думать.
См. также
info chmod; раздел 9.2.