Гид по технологиям

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

• 5 min read • Linux • Обновлено 23 Nov 2025
Sticky bit в Linux: безопасный общий каталог
Sticky bit в Linux: безопасный общий каталог

Фоновое изображение каталога shared-dir

Введение и сценарий

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

Установить можно двумя способами.

  1. Символьная форма:
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.

  1. Числовая форма:

Числовая запись 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):

  1. Создать трёх пользователей и группу johns, добавить пользователей в группу.
  2. john1 создаёт shared-dir, даёт группе право записи: chmod 2775 shared-dir (опция 2 в этом примере — setgid, см. ниже).
  3. john1 создаёт файл j1.txt.
  4. john2 пытается удалить j1.txt — при отсутствии sticky bit удаление возможно.
  5. Установите sticky bit: chmod +t shared-dir.
  6. Повторите попытку удаления — удаление будет запрещено для 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 должен иметь возможность удалять любой файл.

Краткая методология принятия решения

  1. Определите требуемое поведение: нужны ли совместная запись и запрет удаления чужих файлов?
  2. Если да — примените setgid + sticky bit; если требуется тонкая настройка — используйте ACL.
  3. Протестируйте на нескольких пользователях и задокументируйте.

Однострочные определения

  • Sticky bit — специальный бит прав для каталогов, ограничивающий удаление/переименование файлов их владельцем.
  • setgid на каталоге — заставляет новые файлы наследовать группу каталога.
  • ACL — расширенные списки контроля доступа для тонкой настройки прав.

Резюме

Sticky bit — простой и надёжный инструмент для защиты файлов в общих каталогах: он предотвращает удаление файлов другими членами группы, при этом оставляя возможность для совместного создания и редактирования. В сочетании с setgid и при необходимости ACL это даёт гибкую модель совместной работы в Linux.

Важно: протестируйте настройки и документируйте политику, особенно в многопользовательских или производственных окружениях.

Файлы в каталоге shared-dir

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро