Книга: Разработка приложений в среде Linux. Второе издание
11.1.2. Модификаторы прав доступа к файлам
11.1.2. Модификаторы прав доступа к файлам
Модификаторы прав доступа файлов — это также битовые маски, значения которых представляют биты setuid, setgid и sticky-бит ("липкий" бит). Если бит setuid установлен для исполняемого файла, то эффективный идентификатор пользователя процесса устанавливается равным идентификатору владельца файла, когда программы выполняется (в главе 10 можно найти информацию о том, почему это удобно). Бит setgid ведет себя аналогичным образом, но устанавливает эффективный идентификатор группы в значение группы файла. Бит setuid не имеет значения для неисполняемых файлов, но если бит setgid устанавливается для неисполняемого файла, любая блокировка, выполняемая над файлом, носит обязательный, а не рекомендательный характер (см. главу 13). В Linux биты setuid и setgid игнорируются для сценариев оболочки, поскольку устанавливать setuid для сценариев было бы опасно.
Ни setuid, ни setgid не имеют очевидного смысла для каталогов. И setuid действительно не имеет семантики установки для каталогов. Если же для каталога установлен бит setgid, то все новые файлы, созданные в этом каталоге, будут принадлежать к той же группе, которая владеет самим каталогом. Это облегчает применение каталогов для организации совместной работы пользователей.
Sticky-бит — последний значащий бит в разряде модификатора доступа к файлу, имеет интересную историю, связанную с его наименованием. Старые реализации Unix должны были загружать в память всю программу целиком, прежде чем начать выполнять ее. Это означало, что крупные программы отнимали значительное время на запуск, что было довольно-таки неприятно. Если же программа имела установленный sticky-бит, то операционная система пыталась сохранить ее "привязанной" в памяти настолько долго, насколько возможно, даже когда эта программа не запущена, чтобы уменьшить время запуска. Хотя это было немного некрасиво, но работало достаточно хорошо с часто используемыми программами, такими как компилятор С. Современные реализации Unix, включая Linux, используют загрузку по требованию — кусочек за кусочком, что сделало sticky-бит излишним, поэтому Linux игнорирует его для обычных файлов.
Sticky-бит по-прежнему используется для каталогов. Обычно любой пользователь с правами записи в каталог может удалить любой файл в этом каталоге. Однако если sticky-бит каталога установлен, файлы могут быть удалены только пользователем-владельцем либо пользователем root. Такое поведение удобно, если каталог служит репозиторием для файлов, созданных многими пользователями, например, /tmp
.
Последний раздел режима файла указывает тип файла. Он содержится в старших восьмеричных разрядах и не является битовой маской. Вместо этого значение этих разрядов равно специфическому типу файлов (04 означает каталог, 06 — блочное устройство). Тип файла устанавливается при его создании. Он никогда не может быть изменен, кроме как посредством удаления файла.
Включаемый файл <sys/stat.h>
представляет символические константы для всех этих битов доступа, что делает код более читабельным. Пользователи Unix и Linux обычно чувствуют себя увереннее с восьмеричными представлениями режимов файла, поэтому обычно в программах используются восьмеричные представления непосредственно. В табл. 11.1 перечислены символические имена прав и модификаторов доступа к файлам.
Таблица 11.1. Константы прав доступа к файлам
Имя | Значение | Описание |
---|---|---|
S_ISUID |
0004000 |
Программа является setuid-программой. |
S_ISGID |
0002000 |
Программа является setgid-программой. |
S_ISVTX |
0001000 |
Sticky-бит. |
S_IRWXU |
00700 |
Владелец файла имеет права на чтение, запись и выполнение. |
S_IRUSR |
00400 |
Владелец файла имеет права на чтение. |
S_IWUSR |
00200 |
Владелец файла имеет права на запись. |
S_IXUSR |
00100 |
Владелец файла имеет права на выполнение. |
S_IRWXG |
00070 |
Группа файла имеет права на чтение, запись и выполнение. |
S_IRGRP |
00040 |
Группа файла имеет права на чтение. |
S_IWGRP |
00020 |
Группа файла имеет права на запись. |
S_IXGRP |
00010 |
Группа файла имеет права на выполнение. |
S_IRWXO |
00007 |
Прочие пользователи имеют права на чтение, запись и выполнение. |
S_IROTH |
00004 |
Прочие пользователи имеют права на чтение. |
S_IWOTH |
00002 |
Прочие пользователи имеют права на запись. |
S_IXOTH |
00001 |
Прочие пользователи имеют права на выполнение. |
- Правила творческой лени
- Права для выполнения резервного копирования
- Правильная стратегическая последовательность
- Ничего, кроме правды: поведение потребителей
- Заполнение справочников и каталогов
- Неисправности источника бесперебойного питания
- Неисправности акустических систем
- Основные "рычаги" управления производительностью
- Права
- Раздача прав
- Аннулирование прав
- Как правильно раздавать и аннулировать права