Большинство файловых систем включают атрибуты файлов и каталогов, которые контролируют возможность пользователей читать, изменять, перемещаться и выполнять содержимое файловой системы. В некоторых случаях параметры или функции меню могут быть видимыми или скрытыми в зависимости от уровня разрешений пользователя; такой тип пользовательского интерфейса называется управляемым разрешениями .
Широко доступны два типа разрешений: разрешения файловой системы POSIX и списки управления доступом (ACL), которые обеспечивают более конкретный контроль.
Исходная файловая система Таблицы размещения файлов имеет атрибут «только для чтения» для каждого файла.
NTFS, реализованная в Microsoft Windows NT и ее производных, использует списки ACL [1] для предоставления сложного набора разрешений.
OpenVMS использует схему разрешений, аналогичную схеме Unix. Существует четыре категории (система, владелец, группа и мир) и четыре типа разрешений доступа (Чтение, Запись, Выполнение и Удаление). Категории не являются взаимно непересекающимися: Мир включает в себя Группу, которая, в свою очередь, включает Владельца. В категорию «Система» самостоятельно входят пользователи системы. [2]
HFS и его преемник HFS+ , реализованные в классических операционных системах Mac OS , не поддерживают разрешения.
macOS использует разрешения, соответствующие стандарту POSIX. Начиная с версии 10.4 («Tiger»), в дополнение к разрешениям, совместимым с POSIX, он также поддерживает использование списков управления доступом NFSv4. Руководство по администрированию файловых служб Apple Mac OS X Server версии 10.4+ рекомендует по возможности использовать только традиционные разрешения Unix. macOS также по-прежнему поддерживает атрибут «Защищено» классической Mac OS.
Поддержка ACL Solaris зависит от используемой файловой системы; старая файловая система UFS поддерживает списки ACL POSIX.1e, а ZFS поддерживает только списки ACL NFSv4. [3]
Linux поддерживает ext2 , ext3 , ext4 , Btrfs и другие файловые системы, многие из которых включают списки управления доступом POSIX.1e. Существует экспериментальная поддержка списков ACL NFSv4 для файловых систем ext3 [4] и ext4.
FreeBSD поддерживает списки ACL POSIX.1e в UFS и списки ACL NFSv4 в UFS и ZFS. [5] [6]
IBM z/OS реализует безопасность файлов с помощью RACF (Resource Access Control Facility) [7]
Файловая система AmigaOS, AmigaDOS, поддерживает систему разрешений, относительно продвинутую для однопользовательской ОС. В AmigaOS 1.x файлы имели разрешения/флаги «Архивирование», «Чтение», «Запись», «Выполнение» и «Удаление» (вместе известные как ARWED). В AmigaOS 2.x и выше были добавлены дополнительные разрешения/флаги Hold, Script и Pure.
Разрешения для Unix-подобных файловых систем определены в стандарте POSIX.1-2017 [8] , который использует три области действия или класса, известные как владелец , группа и другие . При создании файла его разрешения ограничиваются маской процесса , создавшего его.
Файлы и каталоги принадлежат пользователю. Владелец определяет класс пользователя файла . К владельцу применяются отдельные разрешения.
Файлам и каталогам присваивается группа , которая определяет класс группы файла . К членам группы файла применяются отдельные разрешения. Владелец может быть членом группы файла.
Пользователи, не являющиеся ни владельцами, ни членами группы, составляют класс других файла . К другим применяются отдельные разрешения.
Действующие разрешения определяются на основе первого класса, к которому относится пользователь, в следующем порядке: пользователь, группа, затем остальные. Например, пользователь, являющийся владельцем файла, будет иметь разрешения, предоставленные классу пользователя, независимо от разрешений, назначенных классу группы или другому классу.
Unix-подобные системы реализуют три конкретных разрешения, применимых к каждому классу:
Эффект установки разрешений для каталога, а не для файла, является «одной из наиболее часто неправильно понимаемых проблем с разрешениями для файлов». [9]
Если разрешение не установлено, соответствующие права запрещаются. В отличие от систем на основе ACL, разрешения в Unix-подобных системах не наследуются. Файлы, созданные в каталоге, не обязательно имеют те же разрешения, что и этот каталог.
Unix-подобные системы обычно используют три дополнительных режима. На самом деле это атрибуты, но они называются разрешениями или режимами. Эти специальные режимы предназначены для файла или каталога в целом, а не для класса, хотя в символической записи (см. ниже) бит setuid устанавливается в триаде для пользователя, бит setgid устанавливается в триаде для группы и липкий бит установлен в триаде для остальных.
Эти дополнительные режимы также называются битом setuid , битом setgid и липким битом , поскольку каждый из них занимает только один бит.
Разрешения Unix представлены либо в символьной, либо в восьмеричной записи.
Наиболее распространенной формой, используемой командой ls -l
, является символическое обозначение .
Первый символ дисплея ls
указывает тип файла и не связан с разрешениями. Остальные девять символов разделены на три набора, каждый из которых представляет класс разрешений в виде трех символов. Первый набор представляет класс пользователя . Второй набор представляет групповой класс. Третий набор представляет другой класс.
Каждый из трех символов представляет разрешения на чтение, запись и выполнение:
r
разрешено ли чтение, -
если нет.w
разрешено ли писать, -
если нет.x
разрешено ли выполнение, -
если нет.Ниже приведены некоторые примеры символьных обозначений:
-rwxr-xr-x
: обычный файл, пользовательский класс которого имеет полные разрешения, а группа и другие классы имеют только разрешения на чтение и выполнение.crw-rw-r--
: специальный символьный файл, классы пользователей и групп которого имеют разрешения на чтение и запись, а класс других имеет только разрешение на чтение.dr-x------
: каталог, пользовательский класс которого имеет разрешения на чтение и выполнение, а группа и другие классы которого не имеют разрешений.В некоторых системах разрешений дополнительные символы на ls -l
дисплее обозначают дополнительные функции разрешений:
ls -Z
.Для представления атрибутов setuid , setgid и Sticky или Text модифицируется исполняемый символ ( x
или ). -
Хотя эти атрибуты влияют на весь файл, а не только на пользователей в одном классе, атрибут setuid изменяет исполняемый символ в триаде для пользователя, атрибут setgid изменяет исполняемый символ в триаде для группы, а атрибутsticky или text изменяет исполняемый персонаж в триаде для других. Для атрибутов setuid или setgid в первой или второй триаде, x
становятся s
и -
становятся S
. Для атрибута «sticky» или «text» в третьей триаде — « x
становится» t
и « -
становится» T
. Вот пример:
-rwsr-Sr-t
: файл, пользовательский класс которого имеет разрешения на чтение, запись и выполнение; чей групповой класс имеет разрешение на чтение; чей класс других имеет разрешения на чтение и выполнение; и у которого установлены атрибуты setuid , setgid и Sticky .Другой метод представления разрешений Unix — восьмеричная запись (с основанием 8), как показано stat -c %a
. Это обозначение состоит как минимум из трех цифр. Каждая из трех крайних правых цифр представляет отдельный компонент разрешений: владельца, группу и другие. (Если присутствует четвертая цифра, самая левая (старшая) цифра соответствует трем дополнительным атрибутам: биту setuid , биту setgid и биту липкости .)
Каждая из этих цифр представляет собой сумму составляющих ее битов в двоичной системе счисления . В результате к сумме, представленной цифрой, добавляются определенные биты:
Эти значения никогда не создают неоднозначных комбинаций; каждая сумма представляет собой определенный набор разрешений. С технической точки зрения, это восьмеричное представление битового поля — каждый бит ссылается на отдельное разрешение, а группировка по 3 бита за раз в восьмеричном формате соответствует группировке этих разрешений по пользователю, группе и другим.
Это примеры из раздела символических обозначений, представленных в восьмеричной записи:
Некоторые системы отклоняются от традиционной модели пользователей и групп POSIX, создавая новую группу — «частную группу пользователей» — для каждого пользователя. Предполагая, что каждый пользователь является единственным членом своей частной группы пользователей, эта схема позволяет использовать маску 002, не позволяя другим пользователям записывать вновь созданные файлы в обычных каталогах, поскольку такие файлы назначаются частной группе создающего пользователя. Однако, если совместное использование файлов желательно, администратор может создать группу, содержащую нужных пользователей, создать каталог с возможностью записи для группы, назначенный новой группе, и, что наиболее важно, установить для каталога setgid. Установка setgid приведет к тому, что файлы, созданные в нем, будут отнесены к той же группе, что и каталог, а маска 002 (включаемая с помощью частных групп пользователей) гарантирует, что другие члены группы смогут писать в эти файлы. [10] [11]