Операционные системы
Теория: Права и маски доступа
В UNIX-системах каждый файл связан с владельцем, группой и набором разрешений. Именно они определяют, кто может читать, изменять или выполнять файл. Разрешения обозначаются тремя буквами — rwx, где r (read) отвечает за чтение, w (write) — за запись, а x (execute) — за выполнение. Для каталогов флаг x означает не запуск, а возможность войти внутрь и просматривать содержимое. Без него каталог остаётся «закрытым»: даже если можно читать список файлов, попасть внутрь нельзя.
У каждого файла есть три категории пользователей — владелец, группа и остальные. Если выполнить ls -l, система покажет строку вроде:
Это значит, что владелец может читать и редактировать файл (rw-), а все остальные — только читать (r--). Если первая буква — d, это каталог:
Здесь владелец может всё, а другие — только просматривать и заходить внутрь.
Изменять права можно командой chmod. Она работает в двух режимах: символьном и числовом. В символьном виде запись
добавляет группе право на запись, а
убирает чтение у всех остальных.
В числовом виде права кодируются суммой: 4 — чтение, 2 — запись, 1 — выполнение. Например:
даёт владельцу все права (rwx), а группе и остальным — только чтение и выполнение (r-x). Для конфигурационных файлов обычно используют 644, то есть чтение всем и запись только владельцу.
Права на каталоги устроены чуть иначе. Если задать им 644, то флаг x исчезнет, и внутрь каталога невозможно будет зайти — даже владельцу. Поэтому для каталогов почти всегда применяют 755: владелец может читать, писать и заходить, а другие — только читать и входить. Без этого каталог будет существовать, но окажется недоступным.
Владелец и группа управляются через команду chown.
делает пользователя user владельцем файла, а группу team — связанной с ним. Если нужно изменить только группу, достаточно указать её без имени пользователя:
Такое разделение прав важно в командной работе. Если несколько человек входят в одну группу, у них должны быть одинаковые разрешения на чтение и изменение общих файлов. Именно поэтому администраторы часто настраивают группы для каждой команды и задают каталоги с правами 775 — чтобы все могли работать, не мешая друг другу и не нарушая безопасность системы.
Маска доступа
Когда в Linux создаётся новый файл или каталог, система не выдаёт ему полные права доступа. Чтобы не было риска, что кто-то случайно получит слишком широкие разрешения, ядро применяет маску доступа — специальный фильтр под названием umask.
Umask работает просто: она отнимает права от базового шаблона. По умолчанию новые файлы создаются с правами 666 (чтение и запись для всех), а каталоги — с 777 (чтение, запись и выполнение для всех). Затем система вычитает из этого маску umask.
Например, если маска равна 0022, то из 666 для файлов убираются права на запись группе и остальным. В результате получается 644: владелец может читать и писать, а остальные — только читать. Для каталогов базовое значение 777 превращается в 755: владелец может всё, группа и остальные — только читать и заходить внутрь.
Проверить текущую маску можно командой:
Выведется, например:
Если нужно изменить её — задаётся новая:
Теперь новые файлы будут создаваться с правами 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, — чтобы обновить пароль. В правах такой файл выглядит так:
Буква s в поле владельца (rws) указывает, что установлен SUID.
Второй флаг — SGID (Set Group ID). Для программ он делает то же самое, но в отношении группы: процесс получает группу владельца файла. Однако особенно полезен SGID для каталогов. Если он установлен на каталоге, все новые файлы внутри автоматически наследуют его группу. Это упрощает совместную работу: в общей папке не нужно вручную менять группу у каждого файла, — система делает это сама. Установить SGID можно командой:
После этого все участники группы смогут создавать и редактировать файлы в каталоге /srv/shared, не теряя общих прав.
Третий флаг — sticky bit. Он защищает общие каталоги от случайного удаления чужих файлов. Если sticky bit установлен, удалить или переименовать файл может только его владелец, даже если у всех есть права на запись в каталог. Это особенно важно для /tmp: туда может писать любой пользователь, но никто не может удалить чужие временные файлы. Такой каталог выглядит так:
Буква t в конце показывает, что sticky bit активен.
Эти флаги легко установить вручную:
А снять — теми же командами с минусом.
SUID и SGID дают удобство, но требуют осторожности: ошибка в программе с SUID root может стать уязвимостью. Sticky bit, напротив, усиливает безопасность, ограничивая действия пользователей в общих каталогах.

