Sticky bit
Sticky bit — дополнительный атрибут файлов или директорий в операционных системах семейства UNIX.
История
Впервые sticky bit появился в пятой редакции UNIX в 1974 году для использования в исполняемых файлах. Он применялся для уменьшения времени загрузки наиболее часто используемых программ. После закрытия программы код и данные оставались в памяти, а следующий запуск происходил быстрее.
Использование
Сегодня sticky bit используется в основном для директорий, чтобы защитить в них файлы. Из такой директории пользователь может удалить только те файлы, владельцем которых он является. Примером может служить директория /tmp, в которой запись открыта для всех пользователей, но нежелательно удаление чужих файлов. Установка атрибута производится утилитой chmod.
В операционной системе Solaris для файлов, не являющихся программами, имеет строго противоположное действие — запрещает сохранение данных этого файла в системном кэше.
Примеры
chmod 1xxx , где xxx права на файл.
См. также
Примечания
Литература
- Робачевский А. Н., Немнюгин С. А., Стесик О. Л. Глава 1. Работа в операционной системе UNIX // Операционная система UNIX. — 2-е изд. — СПб. : БХВ-Петербург, 2008. — С. 40–43. — 656 с. — ISBN 978-5-94157-538-1
Ссылки
- chmod(1) — страница справки man по пользовательским командам GNU/Linux (англ.)
Права доступа Unix, SUID, SGID, Sticky биты
В Unix каждому файлу соответствует набор прав доступа, представленный в виде 9-ти битов режима. Он определяет, какие пользователи имеют право читать файл, записывать в него данные или выполнять его. Вместе с другими тремя битами, влияющими на запуск исполняемых файлов, этот набор образует код режима доступа к файлу. Двенадцать битов режима хранятся в 16-битовом поле индексного дескриптора вместе с 4-мя дополнительными битами, определяющими тип файла. Последние 4 бита устанавливаются при создании файлов и не подлежат изменению. Биты режима (далее права) могут изменяться либо владельцем файла, либо суперпользователем с помощью команды chmod.
Существует три пути управления доступом к файлу или каталогу. Было определено, что каждый файл должен иметь владельца (owner), группового владельца (group owner), а также может потребоваться доступ для всех остальных пользователей (everyone). Эти названия обычно приводятся как пользователь/группа/остальные (user/group/others) или коротко ugo. Реализация управления доступом к файлам и каталогам в Unix позволяет или запрещает доступ по трем флагам: флаг чтения (Read), флаг записи (Write), флаг выполнения (eXecute). Они представляются следующим образом:
flag | user | group | other |
---|---|---|---|
# | rwx | rwx | rwx |
Флаг типа (flag) может быть одним из следующих:
Флаг | Описание |
---|---|
— | Отсутствие флага |
l — лат. «л» | Символическая ссылка (symbolic link) |
d | Директория (directory) |
b | Блочное устройство (block device) |
c | Символьное устройство (character device) |
p | Канал, устройство fifo (fifo device) |
s | Unix сокет (unix domain socket) |
Права доступа
Посмотреть права доступа на объекты можно командой ls c ключем -l («л»). Также можно добавить ключ -a, для того,чтобы были отображены скрытые объекты:
/media/Work/applicat > ls -l итого 1308 -rwx------ 1 allexserv nogroup 638116 2009-06-25 20:42 autumnscolor.zip drwxr-xr-x 13 allexserv nogroup 4096 2009-05-31 14:58 phpBB3 drwx------ 10 allexserv nogroup 4096 2009-06-25 14:29 phpMyAdmin-3.2.0-all-languages -rwx------ 1 allexserv nogroup 677334 2009-06-25 20:42 pro_ubuntu.zip drwxr-xr-x 2 allexserv nogroup 4096 2009-06-25 14:29 безымянная папка
Для назначения прав используются три группы флагов, первая определяет права для владельца, вторая — права для основной группы пользователя, третья — для всех остальных пользователей в системе.
Для файлов: r — право на чтение из файла; w — разрешает запись в файл (в частности перезапись или изменение); x — позволяет исполнить файл.
Для каталогов, флаги r w x имеют несколько отличный смысл: r — позволяет читать только имена файлов в каталоге; x — позволяет иметь доступ к самим файлам и их атрибутам (но не именам); w имеет смысл только в сочетании с x, и позволяет (в дополнение к x) манипулировать с файлами в каталоге (создавать, удалять и переименовывать). w без x — не имеет никакого эффекта.
Рассмотрим таблицу, чтобы было понятнее:
OCT | BIN | Mask | Права на файл | Права на каталог |
---|---|---|---|---|
0 | 000 | — — — | отсутствие прав | отсутствие прав |
1 | 001 | — — x | права на выполнение | доступ к файлам и их атрибутам 1) |
2 | 010 | — w — | права на запись | отсутствие прав |
3 | 011 | — w x | права на запись и выполнение | все, кроме доступа к именам файлов 2) |
4 | 100 | r — — | права на чтение | только чтение имен файлов |
5 | 101 | r — x | права на чтение и выполнение | чтение имен файлов и доступ файлам и их атрибутам 3) |
6 | 110 | r w — | права на чтение и запись | только чтение имен файлов |
7 | 111 | r w x | полные права | все права |
Для администрирования часто удобнее использовать не буквенное представление прав, а цифровое, в восьмеричном представлении (оно короче). Так, например, права на файл всем и вся, соответствуют записи 777 (что аналогично символьному представлению rwxrwxrwx).
Существуют также специальные биты, такие как SUID, SGID и Sticky-бит. SUID, SGID влияют на запуск файла, а Sticky влияет на определение владельца объектов в каталоге. При их применении необходимо использовать не три восьмеричных цифры, а 4. Зачастую, в различной технической литературе права обозначаются именно 4-мя цифрами, например 0744. Многие стараются не использовать специальные биты, сетуя на безопасность (и не без основательно), но, в некоторых ситуациях без них не обойтись. Поговорим о них несколько позже.
Давайте рассмотрим пример, итак:
-rwx------ 1 allexserv nogroup 677334 2009-06-25 20:42 pro_ubuntu.zip drwxr-xr-x 2 allexserv nogroup 4096 2009-06-25 14:29 безымянная папка
Для первой строки:
Первый символ (флаг) пустой: « — » — для файлов.
Следующие три символа (rwx) обозначают права для владельца файла, в данном случае полные права для пользователя allexserv. 4)
Следующие три (- — -) — определяют права для группы nogroup, в нашем примере для всех пользователей группы nogroup доступ запрещен.
Ну и последние три символа (- — -) определяют права для всех остальных пользователей, в нашем случае доступ запрещен.
Восьмеричное обозначение прав для файла pro_ubuntu.zip: 0700.
Для второй строки (это каталог, о чем свидетельствует флаг «d»), по аналогии:
Для владельца каталога allexserv — полные права (rwx).
Для группы nogroup — права на листинг каталога и доступ к файлам (r-x).
Для пользователя «все остальные» — права на листинг каталога и доступ к файлам (r-x).
Восьмеричное обозначение в этом примере: 0755.
Для полноценного просмотра каталога, необходимы права на чтение каталога и доступ к файлам, а главное к их атрибутам, т.е. минимальные разумные права на каталог — 5 (r-x). Прав 4 (r–) хватит только на просмотр имен файлов, без атрибутов, т.е. не будут известны размер файла, права доступа, владелец.
На практике для каталогов используется только три режима: 7 (rwx), 5 (r-x) и 0 (—).
Очень любопытный режим доступа к каталогу — 3 (-wx): он позволяет делать в директории все, что угодно, но не позволяет прочитать имена объектов в директории. Т.е. если вам не известны названия объектов в этом каталоге, то вы сделать с ними ничего не сможете (даже удалить по маске * т.к. маску не к чему применять — имена то недоступны).
В каталоге с режимом доступа 3 (-wx) можно создавать новые, переименовывать и удалять файлы и каталоги (если вы знаете их имя); читать, изменять, запускать файл (если достаточно на него прав, и опять же — вы знаете его имя). Можно даже менять права доступа на файлы и каталоги (если вы знаете имя). Но самое интересное, что если вы сможете перейти (по cd 5) ) в подкаталог такого каталога (а для этого вам опять нужно знать его имя), то там у вас будет «все в ожуре» (если конечно у этого подкаталога будет нормальный режим доступа).
Никакой рекурсивный поиск/удаление тоже не сможет залезть внутрь такого каталога — ему ведь нужны названия — а их из такого каталога — никак не получить.
Но не надо думать, что такой каталог полноценно заменяет крипто-контейнер (т.е. может использоваться для хранения очень секретных данных). Да, имен объектов из такого каталога никак не получить, однако если попытаться создать объект с именем, которое уже существует, то такая операция закончится неудачей (т.е. мы получим подтверждение, что такое имя уже есть). Так же можно пытаться открыть (как файл или как каталог) объект с произвольным именем, если такого имени нет, то мы получим ошибку. Безусловно имя может быть очень длинным и шансы угадать его могут быть не велики, но не надо забывать, что права доступа могут сменить как владелец каталога так root. Да и пути доступа могут сохраниться в различных логах и файлах истории.
Команда chmod
Права устанавливаются командой chmod. Команда chmod поддерживает установку прав как в восьмеричном представлении, так и в символьном (маска режима доступа).
Синтаксис команды прост:
Опции
Из самых полезных и часто используемых опций можно выделить одну:
-R — рекурсивное назначение прав. Т.е. назначить права всем объектам, руководствуясь регулярным выражением.
chmod -R 755 * — Назначение прав всем объектам текущего каталога, включая подкаталоги.
chmod -R 700 z* — Назначить полные права для владельца и исключить права для группы и всех остальных для всех объектов, которые начинаются именоваться на z, находящиеся в текущем каталоге и его подкаталогах. 6)
Права
Права можно записывать как в восьмеричном представлении так и в символьном. В восьмеричном представлении, для стандартных прав, указываются 3 восьмеричные цифры (1-я для владельца, 2-я для группы, 3-я для всех остальных. См. таблицу выше).
chmod 744 koshka.txt — установит права для файла koshka.txt — (r w x r — — r — -);
chmod -R 775 sobaki — установит права на каталог sobaki и на все объекты, что внутри этого каталога, включая содержимое подкаталогов (r w x r w x r — x);
chmod 700 * — установит права только для владельца на все файлы и каталоги в текущем каталоге, включая подкаталоги и их объекты (rwx — — — — — -).
Другой способ назначения прав — это использование маски режима доступа (символьное представление). Помимо прав задается еще кому мы собираемся эти права выставлять:
u — владельцу объекта;
g — группе объекта;
o — пользователю «все остальные»;
a — все вышеперечисленное.
Для назначения прав используются три знака: минус, плюс или равно:
— — убрать указанные права с объекта;
+ — добавить указанные права к существующим правам объекта;
= — заменить права объекта на указанные.
chmod g+w koshki.txt — Добавить пользователям группы файла koshki.txt права на запись в этот файл;
chmod a=rwx sobaki.doc — Заменит существующие права на файле sobaki.doc на полные права всем;
chmod o-w test.cgi — Уберет права на запись для пользователя «Все остальные».
chmod ug=rw spisok.doc — Выставить права на чтение и запись файлу spisok.doc для владельца и группы. Обратите внимание, что если у пользователя «все остальные» были какие-либо права, они сохранятся в неизменном виде.
Использование символьного представления позволяет редактировать права файлов более гибко:
chmod u+x,g+w-x koshki.txt — Добавить владельцу файла koshki.txt права на его выполнение, пользователям группы разрешить запись и запретить выполнение и оставить права остальных пользователей без изменений;
chmod u=rwx,g+w,go-x sobaki.doc — Установить полные права для владельца файла, разрешить пользователям группы запись и запретить выполнение всем пользователям, кроме владельца файла.
Символьное назначение окажет неоценимую услугу, если требуется добавить права на объект к уже существующим правам.
Массовое назначение прав
Иногда, бывает, нужно массово установить права на определенный тип объектов, например, только на каталоги или только на файлы. Простое использование опции -R (рекурсия) здесь не поможет т.к. chmod будет проходить по всем объектам удовлетворяющим маске, что иногда вовсе не то, что нужно.
Итак, чтобы массово установить права на определенный тип объектов можно использовать один из вариантов (вообще, их очень много):
chmod -R 770 $(find . -type d)
где -type d — каталоги, -type f — файлы. В данном примере chmod установит, начиная от текущего каталога 7) , права на все каталоги (включая подкаталоги) разрешения 770 (rwx rwx- — -) при этом не трогая права на другие объекты.
Более длинный вариант аналогичной операции:
find ./ -type f -exec sudo chmod 775 <> \;
где -type d — каталоги, -type f — файлы. В данном варианте chmod установит разрешения 775 на все файлы включая файлы в подкаталогах начиная от текущего.
Биты SUID, SGID и Sticky
Unix отслеживает не символьные имена владельцев и групп, а их идентификаторы (UID — для пользователей и GID для групп). Эти идентификаторы хранятся в файлах /etc/passwd и /etc/group соответственно. Символьные эквиваленты идентификаторов используются только для удобства, например, при использовании команды ls, идентификаторы заменяются соответствующими символьными обозначениями.
vipw allexserv:x:1000:0:allexserv. /home/allexserv:/bin/bash
1000 — идентификатор (UID) пользователя allexserv
0 — идентификатор (GID) основной группы (root) для пользователя allexserv
/etc/group allexserv:x:1000:
1000 — идентификатор (GID) дополнительной группы allexserv пользователя allexserv 8)
Если при создании пользователя основная группа не указана явно, то основной группой пользователя будет группа с тем же именем, что и имя пользователя. Например:
vipw backup:x:34:34:backup:/var/backups:/bin/sh /etc/group backup:x:34:
Что касается процессов, то с ними связано не два идентификатора, а 4-е: реальный и эффективный пользовательский (UID), а также реальный и эффективный групповой (GID). Реальные номера применяются для учета использования системных ресурсов, а эффективные для определения прав доступа к процессам. Как правило, реальные и эффективные идентификаторы совпадают. Владелец процесса может посылать ему сигналы, а также изменять приоритет.
Процесс не может явно изменить ни одного из своих четырех идентификаторов, но есть ситуации когда происходит косвенная установка новых эффективных идентификаторов процесса. Дело в том, что существуют два специальных бита: SUID (Set User ID — бит смены идентификатора пользователя) и SGID (Set Group ID — бит смены идентификатора группы). Когда пользователь или процесс запускает исполняемый файл с установленным одним из этих битов, файлу временно назначаются права его (файла) владельца или группы (в зависимости от того, какой бит задан). Таким образом, пользователь может даже запускать файлы от имени суперпользователя.
Восьмеричные значения для SUID и SGID — 4000 и 2000.
Символьные: u+s и g+s.
Вобщем, одним словом установка битов SUID или SGID позволит пользователям запускать исполняемые файлы от имени владельца (или группы) запускаемого файла. Например, как говорилось выше, команду chmod по умолчанию может запускать только root. Если мы установим SUID на исполняемый файл /bin/chmod, то обычный пользователь сможет использовать эту команду без использования sudo, так, что она будет выполнятся от имени пользователя root. В некоторых случаях очень удобное решение. Кстати по такому принципу работает команда passwd, c помощью которой пользователь может изменить свой пароль.
Возьмите на заметку! Если установить SGID для каталога, то все файлы созданные в нем при запуске будут принимать идентификатор группы каталога, а не группы владельца, который создал файл в этом каталоге. Аналогично SUID. Одним словом, если пользователь поместил исполняемый файл в такой каталог, запустив его, процесс запустится от имени владельца (группы) каталога, в котором лежит этот файл.
Однако, в системе FreeBSD, если скомпилировать ядро с поддержкой suiddir, а так же смонтировать раздел с этой опцией, то, все объекты создаваемые в каталоге где установлен SUID будут иметь владельца этого каталога (наследование). Реализация подобного в Linux возможна (?) на файловой системе GFS2. Данная функция считается уязвимостью.
Установить SUID и SGID можно командой chmod:
chmod 4755 koshka.pl — устанавливает на файл koshka.pl бит SUID и заменяет обычные права на 755 (rwxr-xr-x).
chmod u+s koshka.pl — тоже самое, только обычные права не перезаписываются.
chmod 2755 koshka.pl — устанавливает на файл koshka.pl бит SGID и заменяет обычные права на 755 (rwxr-xr-x).
chmod g+s koshka.pl — тоже самое, только обычные права не перезаписываются.
Догадайтесь, что произойдет если выполнить такую команду:
chmod 6755 koshka.pl
Снять установленные биты можно различными способами:
chmod u-s koshka.pl — убираем SUID
chmod g-s koshka.pl — убираем SGID
chmod 0644 koska.pl — Убираем все дополнительные биты и меняем права на 644.
Отображение SGID и SUID:
/media/Work/test > ls -l итого 20 drwxr-xr-x 2 root root 4096 2009-06-15 16:18 allex drwx------ 2 root root 4096 2009-06-15 14:20 qqq -rwxrwsrwx 1 root root 0 2009-07-24 19:42 qwert
Видно, что для файла qwert установлен SGID, о чем свидетельствует символ «s» (-rwxrwsrwx). Символ «s» может быть как строчная буква (s), так и прописная (S). Регистр символа только лишь дает дополнительную информацию об исходных установках, т.е. был ли до установки SGID установлен бит, в данном случае на выполнение (rwxrwsrwx). Если s строчная, то права на выполнение у группы этого файла были до установки SGID. Если S прописная, то группа для этого файла ранее не имела прав на выполнение до установки SGID. 9)
Еще одно важное усовершенствование касается использования sticky-бита в каталогах. 10) Каталог с установленным sticky-битом означает, что удалить файл из этого каталога может только владелец файла или суперпользователь. Другие пользователи лишаются права удалять файлы. 11) Установить sticky-бит в каталоге может только суперпользователь. Sticky-бит каталога, в отличие от sticky-бита файла, остается в каталоге до тех пор, пока владелец каталога или суперпользователь не удалит каталог явно или не применит к нему chmod. Заметьте, что владелец может удалить sticky-бит, но не может его установить.
Восьмеричное значение stiky-бита: 1000
Символьное: +t
Установить sticky-бит на каталог можно используя команду chmod:
chmod 1755 allex — с заменой прав;
chmod +t allex — добавление к текущим правам.
Убрать sticky-бит на каталог можно:
chmod -t allex
Отображение sticky-бит:
/media/Work/test > ls -l итого 20 drwxr-xr-t 2 root root 4096 2009-06-15 16:18 allex drwx------ 2 root root 4096 2009-06-15 14:20 qqq -rwxr--r-T 1 root root 0 2009-07-24 19:42 qwert -rw-r--r-- 1 root root 4099 2009-06-11 14:14 sources.list
Видно, что sticky-бит установлен на каталоге allex, а также на файле qwert, о чем свидетельствует символ (t). Символ «t» может быть как строчная буква (t), так и прописная (T). Строчная буква отображается в том случае, если перед установкой sticky bit произвольный пользователь уже имел право на выполнение (х), а прописная (Т) — если такого права у него не было. Конечный результат один и тот же, но регистр символа дает дополнительную информацию об исходных установках.
Итак, использование sticky позволяет реализовать, например, т.н. каталоги-помойки. Пользователи смогут писать файлы в такие каталоги, но не смогут удалять чужие файлы.
Пример с каталогом на котором установлен sticky:
/media/Work/test > ls -l итого 20 drwxrwxrwx 2 root root 4096 2009-07-24 20:54 allex drwx------ 2 root root 4096 2009-06-15 14:20 qqq # Устанавливаю sticky-бит: /media/Work/test > chmod +t allex /media/Work/test > ls -l итого 20 drwxrwxrwt 2 root root 4096 2009-07-24 20:54 allex drwx------ 2 root root 4096 2009-06-15 14:20 qqq /media/Work/test > cd allex /media/Work/test/allex > ls -l итого 4 -rw-r----- 1 root fuse 215 2009-06-10 19:54 fuse.conf # Создаю файл с разрешением 777 (полные права для всех): /media/Work/test/allex > touch proverka root@sytserver:/media/Work/test/allex# ls -l итого 4 -rw-r----- 1 root fuse 215 2009-06-10 19:54 fuse.conf -rw-r--r-- 1 root root 0 2009-07-24 21:20 proverka root@sytserver:/media/Work/test/allex# chmod 777 * root@sytserver:/media/Work/test/allex# ls -l итого 4 -rwxrwxrwx 1 root fuse 215 2009-06-10 19:54 fuse.conf -rwxrwxrwx 1 root root 0 2009-07-24 21:20 proverka # Захожу под обычным пользователем child и пытаюсь удалить файл proverka: root@sytserver:/media/Work/test/allex# su child child@sytserver:/media/Work/test/allex$ cd /media/Work/test/allex child@sytserver:/media/Work/test/allex$ ls -l итого 4 -rwxrwxrwx 1 root fuse 215 2009-06-10 19:54 fuse.conf -rwxrwxrwx 1 root root 0 2009-07-24 21:20 proverka child@sytserver:/media/Work/test/allex$ rm proverka rm: невозможно удалить `proverka': Operation not permitted child@sytserver:/media/Work/test/allex$
Расширенные права
Очевидно, что использование стандартных прав Unix недостаточно при реализации сложных схем доступа. Они не так гибки как хотелось бы. Даже используя различные биты доступа в сочетании со стандартными правами, желаемого эффекта в большинстве случаев не добиться.
В больших сетях, с многоуровневыми схемами доступа применяется более гибкая реализация назначения прав, именуемая как ACL — Списки контроля доступа.
Нет возможности получить список имен файлов и создать/удалить/переименовать файл в каталоге.
Можно читать/изменять/запускать(если разрешено правами на сам файл), а также создавать/удалять/переименовывать файл, но только если вы знаете его имя. Узнать имена файлов в каталоге — нет никакой возможности
Нет возможности создавать/удалять/переименовывать файлы в каталоге.
При создании файла или каталога его владелец получает полные права на него.
Хотя графические файловые менеджеры могут и отказаться открывать такой подкаталог.
Обратите внимание, что применение прав к объектам в подкаталогах произойдет только в том случае, если сам подкаталог начинает именоваться на z. Т.е. рекурсия будет применяться только и только к тем объектам, которые удовлетворяют регулярному выражению.
О чем сообщает точка после find.
Обратите внимание, в этом примере основная группа пользователя allexserv — это группа root (идентификатор 0) — при создании этого пользователя ему была явно указана принадлежность к группе root.
Обратите внимание, что, если вы устанавливаете биты SGID и SUID посредством восмеричного назначения прав, с их заменой, то регистр символа будет строчный.
В отличии от установки sticky на каталог, на файл такой бит устанавливать уже не имеет смысла. Многие современные ядра попросту игнорируют sticky на файле. На файлах он использовался на старых системах с малой ОЗУ и был очень важен в те времена. Он запрещал выгрузку программ из памяти.
Даже если имеют права 7 (rwx), хотя писать (создавать) файлы в таких каталогах они могут, при условии что имеют права 7 (rwx)
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2018 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
Что такое бит sticky для чего он предназначен
Данная книга в основном посвящена программированию в среде GNU/Linux. Авторы применяют обучающий подход, последовательно излагая самые важные концепции и методики использования расширенных возможностей системы GNU/Linux в прикладных программах. Читатели научатся писать программы, к интерфейсу которых привыкли пользователи Linux; освоят такие технологии, как многозадачность, многопотоковое программирование, межзадачное взаимодействие и взаимодействие с аппаратными устройствами; смогут улучшить свои программы, сделав их быстрее, надежнее и безопаснее; поймут особенности системы GNU/Linux, ее ограничения, дополнительные возможности и специфические соглашения.
Книга предназначена для программистов, уже знакомых с языком С и имеющих базовый опыт работы в GNU/Linux.
Книги автора: Программирование для Linux. Профессиональный подходAdvanced Linux Programming
Книги автора: Программирование для Linux. Профессиональный подходAdvanced Linux Programming
Книги автора: Программирование для Linux. Профессиональный подходAdvanced Linux Programming
Книги автора: Программирование для Linux. Профессиональный подходAdvanced Linux Programming
Книги автора: Программирование для Linux. Профессиональный подходAdvanced Linux Programming
Книги автора: Программирование для Linux. Профессиональный подходAdvanced Linux Programming
Книги автора: Программирование для Linux. Профессиональный подходAdvanced Linux Programming
Книга: Программирование для Linux. Профессиональный подход
10.3.2. Sticky-бит
Скрыть рекламу в статье
Помимо обычных битов режима есть один особый бит, называемый sticky-битом («липучкой»).[33] Он применим только в отношении каталогов.
Обычно удалять файлы могут пользователи, имеющие право записи в каталог. Каталог, для которого установлен sticky-бит, допускает удаление файла только в том случае, когда пользователь является владельцем этого файла или самого каталога и имеет право записи в каталог.
В типичной Linux-системе есть несколько таких каталогов. Один из них — каталог /tmp , в котором любой пользователь может размещать временные файлы. Этот каталог специально сделан доступным для всех пользователей, поэтому он полностью открыт для записи. Однако нельзя допустить, чтобы пользователи удаляли чужие файлы, поэтому для каталога /tmp установлен sticky-бит.
О наличии sticky-бита говорит буква t в конце строки режима:
% ls -ld /trap
drwxrwxrwt 12 root root 2048 Jan 24 17:51 /tmp
Соответствующий флаг функций stat() и chmod() называется S_ISVTX .
Если требуется установить для каталога sticky-бит. следует воспользоваться такой командой:
% chmod o+t каталог
А вот как можно назначить каталогу те же права доступа, что и к каталогу /tmp :
chmod(dir_path, S_IRWXU | S_IRWXG | S_IRWXO | S_ISVTX);
Как использовать липкий бит для управления файлами в общих каталогах в Linux
С момента своего создания Linux был адаптирован для поддержки многопользовательской среды. При наличии большого количества пользователей и групп в рабочей системе довольно часто встречаются каталоги, совместно используемые пользователями одной группы, и проблемы возникают из-за совместного использования файлов в каталогах. В этой статье мы обсудим, как можно использовать липкие биты для точной настройки прав доступа к файлам в общих каталогах.
В целях иллюстрации у нас есть система с тремя пользователями — john1, john2 и john3, все они являются членами общей группы «johns».
Допустим, «john1» создает новый каталог с именем «shared-dir», предназначенный для совместного использования всеми пользователями группы «johns».
С помощью команды ls мы можем просмотреть разрешение «shared-dir», которое можно интерпретировать в следующей таблице:
Только «john1» может читать содержимое каталога, а также писать в него. Поскольку мы работаем с общим каталогом, мы хотим, чтобы все пользователи группы могли писать в «shared-dir».
Для этого мы изменим разрешения с помощью команды chmod . Мы добавим разрешения на «запись» всем пользователям группы «johns», как показано ниже.
Мы можем просмотреть обновленные разрешения для «shared-dir», как показано ниже. Подчеркнутый желтым фрагмент показывает, что группе «johns» предоставлены права на запись.
Добавление файлов в общий каталог
Теперь «john1» добавляет два файла (j1_file1.txt и j1_file2.txt) в «shared-dir».
Для облегчения понимания первые два символа имени файла являются синонимами имени пользователя.
Аналогичным образом, «john2» также может «писать» в каталог «shared-dir».
Сейчас в «shared-dir» четыре файла.
Есть ли проблема с текущей настройкой?
Файл «j1_file1.txt» был создан «john1», сделав «john1» владельцем файла. Теперь «john2» входит в систему и пытается удалить этот файл, и он сможет это сделать.
«John1» был владельцем файла, но «john2» смог удалить его, потому что разрешение «на запись» было дано всем членам группы «johns».
Этот сценарий не идеален. Мы хотим, чтобы все пользователи могли писать в каталог, но только владелец файла должен иметь возможность удалять файл. Как этого добиться?
Представляем Sticky Bit
Бит залипания — это специальное разрешение, которое можно установить для каталога, для которого установлены права на запись для группы, имеющей к нему доступ. Этот бит гарантирует, что все члены группы могут писать в каталог, но только человек, создавший файл, то есть владелец файла, может удалить файл.
Команда chmod с флагом + t может использоваться для установки бита закрепления в каталоге.
Обновленное разрешение можно увидеть ниже.
Теперь, если «john2» попытается удалить файл «j1_file2.txt», созданный «john1», эта операция будет запрещена.
Если вы удалите разрешение на выполнение для «других», как показано ниже:
наличие липкого бита в каталоге обозначается заглавной буквой «T» в части «другие» строки разрешения. Поведение липкого бита в каталоге остается прежним.
Вариант команды «chmod»
Числовая форма команды chmod также может использоваться для установки липкого бита в каталоге.
chmod nxyz file_name>
- n=1, относится к липкому биту. Другие значения «n» относятся к другим специальным разрешениям.
- x: разрешение, предоставленное владельцу файла
- y: разрешение дано группе с доступом к файлу
- z: разрешение, данное другим
Чтобы установить бит залипания в «shared-dir», используйте следующую команду:
chmod 1755 shared-dir
который дает тот же результат, что и использование + t для существующих разрешений по умолчанию.
Использование липкого бита применимо только для каталогов, не имеет смысла использовать его для файлов.
Популярные посты
Как запускать команды Bash в фоновом режиме в Linux
5 лучших дистрибутивов Linux для пользователей Windows в 2021 году
Как настроить локальный веб-сервер (Windows, Mac, Linux)
Wi-Fi не работает в Linux? Вот как это исправить
10 лучших док-станций для запуска Linux
7 лучших инструментов для системы очистки Linux
Как исправить ошибку подключения «Нет маршрута к хосту» в Linux
Лучшие среды рабочего стола 2021 года
10 лучших отладчиков Linux для инженеров-программистов
15 команд Linux LS, которые вам нужно знать