bob удалил план alice, не имея права на запись в сам файл. Sticky-бит закрывает это в общем каталоге.
Удаление стирает имя из списка каталога, поэтому его решают права каталога. У группы devs на /srv/team есть w — этого bob хватило.
Sticky-бит добавляет условие: удалить или переименовать файл может только его владелец, владелец каталога или root. Бит стоит на месте x у остальных буквой t. Так устроен /tmp, куда пишут все:
drwxrwxrwt: создать файл в /tmp может любой, а удалить чужой — нет. Чужой файл такой каталог защищает отказом: rm: cannot remove '…': Operation not permitted.
Ставит бит chmod +t каталог. В числе он — цифра 1 на том же месте, где 2 у setgid; оба сразу — chmod 3775.
В Ubuntu sticky мешает и совместной правке: в каталоге со sticky, куда пишет группа, чужой файл не откроется на дописывание — tee -a и >> получат Permission denied, хотя w у группы есть. Это защита ядра от подмены файлов: cat /proc/sys/fs/protected_regular печатает 2. Поэтому sticky ставят каталогу, куда каждый кладёт свои файлы.
Команде devs нужны два каталога: docs — документы, которые все правят вместе, и inbox — отчёты, каждый кладёт свои. Какие режимы им дать?
-
В
docsсо sticky Ubuntu не даст дописывать чужие документы:echo x >> файлот коллеги получитPermission denied. -
1777открываетdocsна запись всем, а не только devs, и группу новым файлам не передаёт.inboxбез sticky отчёты от удаления не защищает. -
В
inboxбез sticky bob удалит отчёт alice: запись в каталог у группы есть, иrmпройдёт.
Совместной правке нужна общая группа новых файлов — setgid, 2775. Каталогу, куда каждый кладёт своё, sticky добавляет защиту от удаления — 3775; дописывать чужое там и не нужно.
Главное в шаге
-
Удаление и переименование решают права каталога; sticky (
t) оставляет их владельцу файла, владельцу каталога и root. -
Setgid и sticky вместе —
chmod 3775, в строке правdrwxrwsr-t. - В Ubuntu sticky в каталоге группы не даёт дописывать чужие файлы: его ставят туда, где каждый пишет своё.