Использование sticky bit в Linux для безопасного совместного доступа к каталогам

Введение и сценарий
Linux с самого начала ориентирован на многопользовательскую работу. Часто на одном хосте существуют пользователи и группы, которым нужно совместно использовать каталоги. В примере ниже задействованы три пользователя: john1, john2 и john3, все — члены группы johns. Пользователь john1 создаёт каталог shared-dir для совместного использования.
При обычных правах доступа вывод ls -ld shared-dir может выглядеть так:
drwxrwxr-x 2 john1 johns 4096 Nov 12 10:00 shared-dirЭто означает: каталог читаем и записываем владельцем (john1) и группой (johns). Другие пользователи тоже имеют доступ на чтение/выполнение в этом примере. Поскольку каталог предназначен для совместной записи, мы хотим, чтобы все участники группы могли создавать и изменять файлы в shared-dir.
Проблема: кто может удалять файлы
john1 создаёт файлы j1_file1.txt и j1_file2.txt в shared-dir. john2 также создаёт свои файлы j2_file1.txt и т. д. Поскольку у группы есть право записи в каталоге, любой член группы может удалить любой файл в каталоге, даже если он был создан другим пользователем. Удаление в UNIX-подобных системах — это операция над каталогом (unlink), а не над самим файлом, поэтому право записи на каталог даёт возможность удалять записи в нём.
Это нежелательное поведение для общих каталогов: мы хотим, чтобы все могли добавлять и изменять свои файлы, но удалять мог только владелец файла (или root).
Что такое sticky bit
Sticky bit — это специальный бит разрешений, который можно установить на каталог. При установленном sticky bit в каталоге с правом записи участники каталога могут создавать и записывать файлы, но удалять/переименовывать файлы могут только:
- владелец файла, или
- владелец каталога, или
- пользователь root.
Это именно то поведение, которое нужно для публичных или групповых временных директорий.
Как установить sticky bit
Установить можно двумя способами.
- Символьная форма:
chmod +t shared-dirПосле этого вывод ls -ld может выглядеть так:
drwxrwxr-t 2 john1 johns 4096 Nov 12 10:05 shared-dirОбратите внимание на маленькую букву t в конце набора прав — она указывает на установленный sticky bit и наличие права выполнения (x) для others.
Если для others не задано право выполнения, отображается заглавная T:
drwxrwxr-T 2 john1 johns 4096 Nov 12 10:05 shared-dirПоведение sticky bit остаётся тем же: удалять могут только владелец файла, владелец каталога и root.
- Числовая форма:
Числовая запись chmod поддерживает дополнительный разряд для специальных битов: setuid, setgid и sticky. Он располагается слева от трёх обычных цифр прав.
Формат:
chmod nxyz где:
- n = 1 — задаёт sticky bit (для setuid — 4, setgid — 2, sticky — 1; комбинируются суммированием);
- x — права владельца;
- y — права группы;
- z — права остальных.
Для установки sticky bit и прав 755 используйте:
chmod 1755 shared-dirЭто эквивалентно chmod +t при существующих правах 755.
Пример проверки поведения
Короткий сценарий тестирования локально (как root или с sudo):
- Создать трёх пользователей и группу johns, добавить пользователей в группу.
- john1 создаёт shared-dir, даёт группе право записи: chmod 2775 shared-dir (опция 2 в этом примере — setgid, см. ниже).
- john1 создаёт файл j1.txt.
- john2 пытается удалить j1.txt — при отсутствии sticky bit удаление возможно.
- Установите sticky bit: chmod +t shared-dir.
- Повторите попытку удаления — удаление будет запрещено для john2.
Критерии приёмки
- Все члены группы могут создавать файлы в shared-dir.
- Каждый файл может удалять только его владелец (или root).
- Права каталога показывают букву t или T в конце строки ls -ld.
Важные замечания
Важно: sticky bit имеет смысл только для каталогов. Применение к обычным файлам в современных системах не даёт ожидаемого эффекта.
Если вы снимаете право выполнения (x) для others, в отображении прав появится заглавная T — это нормальное поведение и не влияет на саму логику ограничения удаления.
Альтернативные подходы и комбинации
setgid на каталоге (chmod g+s) — полезен, чтобы создаваемые в каталоге файлы наследовали группу каталога (гарантирует совместимость по групповой принадлежности). Часто используют вместе с sticky bit: chmod 2775 shared-dir или chmod 2777 shared-dir + chmod +t.
ACL (setfacl/getfacl) — если нужно детализировать разрешения для отдельных пользователей (например, запретить записи для некоторых членов группы), используйте ACL.
umask и шаблоны создания файлов — контролируют стандартные права новых файлов, но не решают проблему удаления файла другим членом группы.
Когда sticky bit не помогает
- Если все участники каталога — root или у них есть привилегии sudo, sticky bit не ограничит их действия.
- Если требуются сложные правила (кто может читать/писать/удалять по ряду условий), применяйте ACL.
Практические рекомендации и чеклист для администратора
Чеклист перед применением в продакшене:
- Проверьте текущие права: ls -ld shared-dir
- Решите, нужно ли наследование группы: примените g+s если нужно
- Установите sticky bit: chmod +t shared-dir или chmod 1xyz
- Тестируйте поведение от имени разных пользователей
- Документируйте политику каталога для команды
Команды быстро:
# Сделать каталог групповой и установить sticky bit
chown john1:johns shared-dir
chmod 2775 shared-dir # setgid + rwxrwxr-x
chmod +t shared-dir # добавить sticky bitТест-кейсы
- Создать файл от имени john1. Попытка удаления john2 должна завершиться ошибкой Permission denied.
- Создать файл от имени john2. Попытка удаления john2 должна пройти успешно.
- Root должен иметь возможность удалять любой файл.
Краткая методология принятия решения
- Определите требуемое поведение: нужны ли совместная запись и запрет удаления чужих файлов?
- Если да — примените setgid + sticky bit; если требуется тонкая настройка — используйте ACL.
- Протестируйте на нескольких пользователях и задокументируйте.
Однострочные определения
- Sticky bit — специальный бит прав для каталогов, ограничивающий удаление/переименование файлов их владельцем.
- setgid на каталоге — заставляет новые файлы наследовать группу каталога.
- ACL — расширенные списки контроля доступа для тонкой настройки прав.
Резюме
Sticky bit — простой и надёжный инструмент для защиты файлов в общих каталогах: он предотвращает удаление файлов другими членами группы, при этом оставляя возможность для совместного создания и редактирования. В сочетании с setgid и при необходимости ACL это даёт гибкую модель совместной работы в Linux.
Важно: протестируйте настройки и документируйте политику, особенно в многопользовательских или производственных окружениях.

Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента