Что такое sticky bit в Linux?
Комментарии (2)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое Sticky Bit в Linux?
Sticky Bit — это специальный разрешительный бит (permission bit) в файловой системе Linux/UNIX, который изменяет поведение системы при работе с каталогами и, исторически, с исполняемыми файлами. Его основное современное назначение — защита файлов в общедоступных каталогах от случайного или несанкционированного удаления или переименования пользователями, имеющими запись в этот каталог.
Исторический контекст и эволюция
Изначально, в ранних UNIX-системах, sticky bit применялся к исполняемым файлам. Когда он был установлен, ядро сохраняло образ программы в свопе после завершения её работы, что ускоряло последующие запуски за счёт быстрой повторной загрузки из памяти. Эта функция утратила актуальность с развитием систем кэширования и сегодня не используется для файлов в большинстве современных систем. Однако поддержка сохранена для обратной совместимости.
Современное применение для каталогов
Сегодня sticky bit преимущественно используется для каталогов, особенно для общедоступных, таких как /tmp или /var/tmp. По умолчанию, если пользователь имеет право записи (w) в каталог, он может удалить или переименовать любой файл внутри, даже принадлежащий другому пользователю. Sticky bit меняет это поведение.
Ключевое правило: В каталоге с установленным sticky bit пользователь может удалить или переименовать только те файлы, владельцем которых он является. Это защищает общие файлы от вмешательства других пользователей, имеющих доступ к каталогу.
Практический пример: каталог /tmp
Типичные права для /tmp:
ls -ld /tmp
drwxrwxrwt 14 root root 4096 Apr 10 12:34 /tmp
Символ t в конце набора прав (rwxrwxrwt) указывает на установленный sticky bit. Буква t означает, что бит исполнения (x) для others также установлен. Если бы бит исполнения не был установлен, отображалась бы заглавная T.
Как установить или снять Sticky Bit
Sticky bit устанавливается через команду chmod с использованием октальной (восьмеричной) нотации или символьной нотации.
1. Октальная нотация: Sticky bit имеет значение 1000 в дополнение к стандартным правам (755, 777 и т.д.).
# Установить sticky bit для каталога shared_dir
chmod 1755 shared_dir
# или
chmod 1777 shared_dir
# Снять sticky bit, установив стандартные права
chmod 755 shared_dir
2. Символьная нотация: Используется символ t.
# Установить sticky bit
chmod +t shared_dir
# Снять sticky bit
chmod -t shared_dir
Проверка установки Sticky Bit
Проверить наличие sticky bit можно с помощью ls -l. Он отображается в позиции прав для "others" (последний символ):
rwt,r-x t,--x tи т.п. — sticky bit установлен, исполнение разрешено.rwT,r-x T,--x Tи т.п. — sticky bit установлен, но исполнение запрещено (редкий случай, часто ошибка).
Пример сценария использования
Представьте сервер с несколькими пользователями, где есть общий каталог /shared/uploads для загрузки файлов:
- Без sticky bit: пользователь
aliceможет удалить файл, загруженный пользователемbob, даже если это нежелательно. - С sticky bit (
chmod 1777 /shared/uploads):aliceможет создавать и удалять только свои файлы; файлыbobдля неё защищены от удаления.
Важные замечания
- Sticky bit не ограничивает создание файлов — если есть право записи в каталог, пользователь может создавать новые файлы.
- Он не влияет на модификацию содержимого файлов — права на запись в сам файл определяются его атрибутами, а не sticky bit каталога.
- Sticky bit — это дополнительный уровень безопасности для общедоступных каталогов, но не заменяет правильно настроенные права доступа на файлы и использование групп (например, через
setgid).
Вывод
Sticky bit — это эффективный и простой механизм для организации безопасного совместного использования каталогов в многопользовательской среде. Он решает узкую, но важную проблему защиты файлов от удаления другими пользователями в общем пространстве, что делает его незаменимым для системных каталогов, таких как /tmp, и для подобных пользовательских директорий в DevOps-средах (например, общие области сборки или временные файлы в CI/CD). Понимание и грамотное применение sticky bit является одним из признаков внимания к безопасности и управлению доступом в Linux-системах.