Как работают разрешения / атрибуты файлов? Уровень ядра, уровень FS или оба?

8

Вопрос, который возник у меня ранее: зависят ли права доступа к файлам / атрибуты от ОС (и, следовательно, от ядра), или они зависят от файловой системы? Мне кажется, что второй вариант является более логичным, но я никогда не слышал о reiserfsправах доступа к файлам, например: только «Права доступа к файлам Unix». С другой стороны, цитата из статьи в Википедии :

С выходом новых версий Windows Microsoft добавила в список доступных атрибутов в файловой системе NTFS

который, кажется, предполагает, что атрибуты файла Windows так или иначе связаны с файловой системой.

Может кто-нибудь, пожалуйста, просветите меня?

Джозеф Р.
источник

Ответы:

7

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

«Права доступа к файлам Unix» относятся к традиционной системе разрешений, которая включает в себя три действия (чтение, запись, выполнение), управляемых тремя типами ролей (пользователь, группа, другие). Задача файловой системы - хранить 3 × 3 = 9 бит информации. Задача ядра - интерпретировать эти биты как разрешения; в частности, когда процесс пытается выполнить операцию над файлом, ядро ​​должно определить, учитывая пользователя и группы, в которых выполняется процесс, биты разрешения файла и запрошенную операцию, разрешить ли операцию. («Права доступа к файлам Unix» также обычно включают биты setuid и setgid , которые не являются строго говоря разрешениями.)

Современные системы Unix могут поддерживать другие формы разрешений. Большинство современных систем Unix (Solaris, Linux, * BSD) поддерживают списки контроля доступа, которые позволяют назначать разрешения на чтение / запись / исключение для более чем одного пользователя и более чем одной группы для каждого файла. Файловая система должна иметь место для хранения этой дополнительной информации, а ядро ​​должно включать код для поиска и использования этой информации. Ext2, reiserfs, btrfs, zfs и большинство других современных форматов файловых систем Unix определяют место для хранения таких ACL. Mac OS X поддерживает другой набор ACL, который включает нетрадиционные разрешения, такие как «добавить» и «создать подкаталог»; формат файловой системы HFS + поддерживает их. Если вы смонтируете том HFS + в Linux, эти ACL не будут применены, поскольку ядро ​​Linux не поддерживает их.

И наоборот, существуют операционные системы и файловые системы, которые не поддерживают управление доступом. Например, FAT и варианты были разработаны для однопользовательских операционных систем и съемных носителей, и его разрешения ограничены чтением / чтением-записью и скрытым / видимым. Это разрешения, введенные DOS . Если вы смонтируете файловую систему ext2 в DOS, она не будет применять разрешения ext2. И наоборот, если вы обращаетесь к файловой системе FAT в Linux, все файлы будут иметь одинаковые разрешения.

В последующих версиях Windows добавлена ​​поддержка большего количества типов разрешений. Файловая система NTFS была расширена для хранения этих дополнительных разрешений. Если вы обращаетесь к файловой системе с более новыми разрешениями в более старой операционной системе, ОС не будет знать об этих более новых разрешениях и не будет применять их. И наоборот, если вы обращаетесь к более старой файловой системе с более новой операционной системой, она не будет содержать новых разрешений, и это зависит от ОС, чтобы обеспечить разумные отступления.

Жиль "ТАК - перестань быть злым"
источник
«Задача ядра состоит в том, чтобы интерпретировать эти биты как разрешения; в частности, когда процесс пытается выполнить операцию с файлом, ядро ​​должно определить [...]». Это не значит, что ядро ​​теоретически может быть изменено на все равно игнорировать и читать данные? (Вид прямого доступа к диску) Или что-то еще мешает этому?
Сверхразум
@ Overmind Конечно. Код ядра имеет доступ ко всему. Диск ничего не знает о процессах, пользователях или разрешениях. Ядро сообщает диску «дай мне блок 232876», и диск отвечает содержимым блока. Определение того, какие процессы могут получить доступ к каким блокам (или к каким частям блоков), является задачей ядра.
Жиль "ТАК - перестань быть злым"
4

Чтобы использовать определенные права, и ядро, и файловая система должны их поддерживать. Если файловая система даже не поддерживает самые основные права доступа, то код файловой системы должен имитировать их (например, с помощью опции монтирования umaskдля vfat).

Хауке Лагинг
источник
3

Насколько я понимаю, ядро ​​реализует inode в VFS. inode содержит информацию о разрешениях (UNIX и ACL) наряду с другими метаданными, и файловая система может расширять inode для добавления функций. Если вам интересно, почитайте о Linux VFS - что ж, если вы не системный программист.

Мел Бойс
источник
1

Как правило, права доступа к файлам и атрибуты файлов хранятся в файловой системе [точный путь зависит от рассматриваемой файловой системы (ext3 / 4, riser, NTFS и т. Д.)), Но используются ядром, как правило, для принудительного применения чего-либо.

Например, ядро ​​в * nix-подобных системах - это «вещь», которая знает значение UID, связанного с файлом / каталогом. UID файла - это просто число, которое хранится рядом с определенным файлом в файловой системе, но «преобразование» такого числа определенному пользователю (и соответствующие права на что-то делать или нет) выполняется ядром.

DavAlPi
источник