Копируются ли права доступа к файлам в таблицу открытых файлов?

Вопрос или проблема

У меня есть сомнение, что запись, созданная в Open File Table при вызове open(), содержит.

Следующая схема

bytebytego linux descriptor illustrated

от bytebytego кажется довольно хорошей для понимания общей картины открытия файла, но в Open File Table я не вижу ничего о разрешениях на файл (которые изображены только в иноде внизу).

Этот источник вместо этого говорит:

Таблица открытых файлов содержит несколько частей информации о каждом файле:

  • текущая позиция (следующее место, которое будет доступно в файле)
  • счетчик ссылок (мы объясним это ниже в разделе о fork())
  • режим файла (разрешения),

Поскольку разрешения файла хранятся на диске в его иноде, если последний источник, который я упомянул, прав, означает ли это, что разрешения копируются в запись Open File Table? И если да, возможно, схема от bytebytego опустила эту деталь ради упрощения?

Да, разрешения копируются в таблицу открытых файлов. Не знаю, почему диаграмма bytebytego это опускает (в любом случае, она показывает сильно упрощенное представление данных, что не удивительно, поскольку данных много).

В ядре файлы представлены экземплярами struct file, и они включают указатель на соответствующий struct inode, который содержит копию режима файла (включая разрешения).

Если вы хотите следить за этим через задачу, task_struct имеет поле files, указывающее на таблицу открытых файлов, представленную экземплярами files_struct, которая указывает на struct fdtable, что ведет к массиву struct file.

Ответ или решение

Да, права доступа к файлам копируются в таблицу открытых файлов (Open File Table). Действительно, в схеме, представленной на bytebytego, упущен этот элемент, так как она призвана дать упрощенное представление о процессе открытия файлов, в то время как на самом деле в операционной системе Linux есть множество деталей, которые важно учитывать.

В ядре операционной системы файлы представлены экземплярами структуры struct file, которая содержит указатель на соответствующую структуру struct inode. В структурах inode хранятся метаданные файла, включая режим доступа (права), которые фактически являются частью свойств файла. Это означает, что при открытии файла и создании записи в таблице открытых файлов происходит копирование режима (параметры прав доступа) из inode в структуру file в таблице.

Если рассмотреть это на уровне структуры данных, то связанные структуры можно отслеживать через task_struct, который содержит поле files, указывающее на таблицу открытых файлов, представленную экземплярами структуры files_struct. В свою очередь, эта структура ссылается на массив struct file, в каждой из которых содержится информация о файле, включая его права доступа (permissions).

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

Оцените материал
Добавить комментарий

Капча загружается...