Большинство файловых систем включают атрибуты файлов и каталогов, которые контролируют возможность пользователей читать, изменять, перемещаться и выполнять содержимое файловой системы. В некоторых случаях опции меню или функции могут быть сделаны видимыми или скрытыми в зависимости от уровня разрешений пользователя; такой тип пользовательского интерфейса называется управляемым разрешениями .
Широко распространены два типа разрешений: разрешения файловой системы POSIX и списки контроля доступа (ACL), которые позволяют осуществлять более конкретный контроль.
В исходной файловой системе File Allocation Table для каждого файла установлен атрибут «только для чтения» для всех пользователей.
NTFS , реализованная в Microsoft Windows NT и ее производных, использует списки управления доступом [1] для предоставления сложного набора разрешений.
OpenVMS использует схему разрешений, похожую на схему Unix. Существует четыре категории (система, владелец, группа и мир) и четыре типа разрешений доступа (чтение, запись, выполнение и удаление). Категории не являются взаимно непересекающимися: мир включает группу, которая в свою очередь включает владельца. Категория система независимо включает системных пользователей. [2]
HFS и его преемник HFS+ , реализованные в классических операционных системах Mac OS , не поддерживают разрешения.
macOS использует разрешения, совместимые с POSIX, и поддерживает их как в HFS+, так и в APFS . Начиная с версии 10.4 («Tiger»), он также поддерживает использование списков контроля доступа NFSv4 в дополнение к разрешениям, совместимым с POSIX. В руководстве по администрированию файловых служб Apple Mac OS X Server версии 10.4+ рекомендуется использовать только традиционные разрешения Unix, если это возможно. macOS также по-прежнему поддерживает атрибут «Protected» классической Mac OS.
Поддержка Solaris ACL зависит от используемой файловой системы; более старая файловая система UFS поддерживает POSIX.1e ACL, тогда как ZFS поддерживает только NFSv4 ACL. [3]
Linux поддерживает ext2 , ext3 , ext4 , Btrfs и другие файловые системы, многие из которых включают POSIX.1e ACL. Существует экспериментальная поддержка NFSv4 ACL для файловых систем ext3 [4] и ext4.
FreeBSD поддерживает списки контроля доступа POSIX.1e на UFS и списки контроля доступа NFSv4 на UFS и ZFS. [5] [6]
IBM z/OS реализует безопасность файлов с помощью RACF (Resource Access Control Facility) [7] [ постоянная неработающая ссылка ]
Файловая система AmigaOS, AmigaDOS поддерживает систему разрешений, относительно развитую для однопользовательской ОС. В AmigaOS 1.x файлы имели разрешения/флаги Archive, Read, Write, Execute и Delete (совместно известные как ARWED). В AmigaOS 2.x и выше были добавлены дополнительные разрешения/флаги Hold, Script и Pure.
Операционная система OpenHarmony наряду с ее клиентской экосистемой в Oniro OS и HarmonyOS с версиями HarmonyOS NEXT , а также серверная ОС openEuler на базе Linux изначально использует свою распределенную файловую систему Harmony (HMDFS), которая поддерживает менеджер токенов доступа ( управление доступом на основе ролей ) и API Core File Kit на основе возможностей с детализированным управлением разрешениями за исключением openEuler. [8] [ проверка не удалась ]
Разрешения в файловых системах типа Unix определены в стандарте POSIX.1-2017, [9] который использует три области действия или класса, известные как владелец , группа и другие . Когда файл создается, его разрешения ограничиваются umask процесса , который его создал.
Файлы и каталоги принадлежат пользователю. Владелец определяет класс пользователя файла . К владельцу применяются отдельные разрешения.
Файлам и каталогам назначается группа , которая определяет класс группы файла . К членам группы файла применяются различные разрешения. Владелец может быть членом группы файла.
Пользователи, которые не являются владельцами и не являются членами группы, составляют класс others файла . К другим применяются отдельные разрешения.
Действующие разрешения определяются на основе первого класса, к которому относится пользователь в порядке: пользователь, группа, затем другие. Например, пользователь, являющийся владельцем файла, будет иметь разрешения, предоставленные классу пользователя, независимо от разрешений, назначенных классу группы или классу других.
Unix-подобные системы реализуют три конкретных разрешения, которые применяются к каждому классу:
Эффект установки прав доступа к каталогу, а не к файлу, является «одной из наиболее часто неправильно понимаемых проблем с правами доступа к файлам» [10] .
Если разрешение не установлено, соответствующие права отклоняются. В отличие от систем на основе ACL, разрешения в Unix-подобных системах не наследуются. Файлы, созданные в каталоге, не обязательно имеют те же разрешения, что и этот каталог.
Unix-подобные системы обычно используют три дополнительных режима. На самом деле это атрибуты, но они называются разрешениями или режимами. Эти специальные режимы предназначены для файла или каталога в целом, а не для класса, хотя в символической нотации (см. ниже) бит setuid устанавливается в триаде для пользователя, бит setgid устанавливается в триаде для группы, а бит sticky устанавливается в триаде для других.
Эти дополнительные режимы также называются битом setuid , битом setgid и битом sticky , поскольку каждый из них занимает только один бит.
Разрешения 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 и бит sticky .)
Каждая из этих цифр является суммой своих компонентных битов в двоичной системе счисления . В результате определенные биты добавляются к сумме, как она представлена цифрой:
Эти значения никогда не создают неоднозначных комбинаций; каждая сумма представляет определенный набор разрешений. Более технически, это восьмеричное представление битового поля – каждый бит ссылается на отдельное разрешение, а группировка 3 битов за раз в восьмеричном формате соответствует группировке этих разрешений по пользователю, группе и другим.
Ниже приведены примеры из раздела символической записи, приведенные в восьмеричной системе счисления:
Некоторые системы отходят от традиционной модели пользователей и групп POSIX, создавая новую группу – «частную группу пользователей» – для каждого пользователя. Предполагая, что каждый пользователь является единственным членом своей частной группы пользователей, эта схема позволяет использовать umask 002, не позволяя другим пользователям записывать в недавно созданные файлы в обычных каталогах, поскольку такие файлы назначаются частной группе создающего пользователя. Однако, когда желательно совместное использование файлов, администратор может создать группу, содержащую нужных пользователей, создать доступный для записи группой каталог, назначенный новой группе, и, что самое важное, сделать каталог setgid. Если сделать его setgid, файлы, созданные в нем, будут назначены той же группе, что и каталог, а umask 002 (включенный с помощью частных групп пользователей) гарантирует, что другие члены группы смогут записывать в эти файлы. [11] [12]