Операционные системы

Теория: Права и маски доступа

В UNIX-системах каждый файл связан с владельцем, группой и набором разрешений. Именно они определяют, кто может читать, изменять или выполнять файл. Разрешения обозначаются тремя буквами — rwx, где r (read) отвечает за чтение, w (write) — за запись, а x (execute) — за выполнение. Для каталогов флаг x означает не запуск, а возможность войти внутрь и просматривать содержимое. Без него каталог остаётся «закрытым»: даже если можно читать список файлов, попасть внутрь нельзя.

У каждого файла есть три категории пользователей — владелец, группа и остальные. Если выполнить ls -l, система покажет строку вроде:

-rw-r--r--

Это значит, что владелец может читать и редактировать файл (rw-), а все остальные — только читать (r--). Если первая буква — d, это каталог:

drwxr-xr-x

Здесь владелец может всё, а другие — только просматривать и заходить внутрь.

Изменять права можно командой chmod. Она работает в двух режимах: символьном и числовом. В символьном виде запись

chmod g+w file.txt

добавляет группе право на запись, а

chmod o-r file.txt

убирает чтение у всех остальных.

В числовом виде права кодируются суммой: 4 — чтение, 2 — запись, 1 — выполнение. Например:

chmod 755 script.sh

даёт владельцу все права (rwx), а группе и остальным — только чтение и выполнение (r-x). Для конфигурационных файлов обычно используют 644, то есть чтение всем и запись только владельцу.

Права на каталоги устроены чуть иначе. Если задать им 644, то флаг x исчезнет, и внутрь каталога невозможно будет зайти — даже владельцу. Поэтому для каталогов почти всегда применяют 755: владелец может читать, писать и заходить, а другие — только читать и входить. Без этого каталог будет существовать, но окажется недоступным.

Владелец и группа управляются через команду chown.

chown user:team report.txt

делает пользователя user владельцем файла, а группу team — связанной с ним. Если нужно изменить только группу, достаточно указать её без имени пользователя:

chown :team report.txt

Такое разделение прав важно в командной работе. Если несколько человек входят в одну группу, у них должны быть одинаковые разрешения на чтение и изменение общих файлов. Именно поэтому администраторы часто настраивают группы для каждой команды и задают каталоги с правами 775 — чтобы все могли работать, не мешая друг другу и не нарушая безопасность системы.

Маска доступа

Когда в Linux создаётся новый файл или каталог, система не выдаёт ему полные права доступа. Чтобы не было риска, что кто-то случайно получит слишком широкие разрешения, ядро применяет маску доступа — специальный фильтр под названием umask.

Umask работает просто: она отнимает права от базового шаблона. По умолчанию новые файлы создаются с правами 666 (чтение и запись для всех), а каталоги — с 777 (чтение, запись и выполнение для всех). Затем система вычитает из этого маску umask.

Например, если маска равна 0022, то из 666 для файлов убираются права на запись группе и остальным. В результате получается 644: владелец может читать и писать, а остальные — только читать. Для каталогов базовое значение 777 превращается в 755: владелец может всё, группа и остальные — только читать и заходить внутрь.

Проверить текущую маску можно командой:

umask

Выведется, например:

0022

Если нужно изменить её — задаётся новая:

umask 0002

Теперь новые файлы будут создаваться с правами 664, а каталоги — с 775. Это удобно при командной работе, когда несколько пользователей состоят в одной группе. Тогда каждый может читать и изменять общие файлы, не меняя вручную права на каждом объекте.

Маска действует на все программы, которые создают файлы: оболочку, редакторы, компиляторы, серверы. Поэтому администраторы часто настраивают её глобально — например, в файле /etc/profile или /etc/login.defs, чтобы все пользователи системы работали с одинаковыми политиками доступа.

Umask — тихий, но важный механизм безопасности. Он не даёт новым файлам стать слишком «открытыми» и поддерживает баланс между удобством совместной работы и защитой данных.

Специальные флаги

В Linux существуют не только обычные права доступа — чтение, запись и выполнение, — но и специальные флаги, которые меняют то, как система ведёт себя при запуске программ и работе с каталогами. Эти флаги — SUID, SGID и sticky bit. Они встроены прямо в механизм прав и дают системе гибкость, которая нужна для безопасной совместной работы пользователей.

Когда у программы установлен SUID (Set User ID), она всегда выполняется с правами владельца файла, а не того, кто её запустил. Это нужно для утилит, которым временно требуются привилегии администратора. Например, команда passwd изменяет файл /etc/shadow, где хранятся пароли пользователей, и обычный пользователь не имеет к нему доступа. Поэтому файл /usr/bin/passwd помечен SUID-битом. Когда пользователь запускает passwd, процесс получает временные права владельца — root, — чтобы обновить пароль. В правах такой файл выглядит так:

-rwsr-xr-x  1 root root  /usr/bin/passwd

Буква s в поле владельца (rws) указывает, что установлен SUID.

Второй флаг — SGID (Set Group ID). Для программ он делает то же самое, но в отношении группы: процесс получает группу владельца файла. Однако особенно полезен SGID для каталогов. Если он установлен на каталоге, все новые файлы внутри автоматически наследуют его группу. Это упрощает совместную работу: в общей папке не нужно вручную менять группу у каждого файла, — система делает это сама. Установить SGID можно командой:

chmod g+s /srv/shared

После этого все участники группы смогут создавать и редактировать файлы в каталоге /srv/shared, не теряя общих прав.

Третий флаг — sticky bit. Он защищает общие каталоги от случайного удаления чужих файлов. Если sticky bit установлен, удалить или переименовать файл может только его владелец, даже если у всех есть права на запись в каталог. Это особенно важно для /tmp: туда может писать любой пользователь, но никто не может удалить чужие временные файлы. Такой каталог выглядит так:

drwxrwxrwt  10 root root  /tmp

Буква t в конце показывает, что sticky bit активен.

Эти флаги легко установить вручную:

chmod u+s file     # SUID
chmod g+s dir      # SGID
chmod +t dir       # sticky bit

А снять — теми же командами с минусом.

SUID и SGID дают удобство, но требуют осторожности: ошибка в программе с SUID root может стать уязвимостью. Sticky bit, напротив, усиливает безопасность, ограничивая действия пользователей в общих каталогах.

Рекомендуемые программы

+7 800 100 22 47

бесплатно по РФ

+7 495 085 21 62

бесплатно по Москве

108813 г. Москва, вн.тер.г. поселение Московский,
г. Московский, ул. Солнечная, д. 3А, стр. 1, помещ. 20Б/3
ОГРН 1217300010476
ИНН 7325174845