Представление виртуальной файловой системы процессу Linux без root-доступа

Я ищу способ представить файловую систему пользовательского пространства конкретному процессу Linux, но у меня нет root-доступа.

Очевидный ответ - FUSE, но без root-доступа я не могу загрузить модуль ядра, поэтому о FUSE, похоже, не может быть и речи (если только нет способа LD_PRELOAD?).

Следующая лучшая вещь, кажется, LD_PRELOAD с чем-то, что перехватывает соответствующие вызовы FS, а затем преобразовывает их, так же, как FUSE делает на уровне VFS.

Итак, мои вопросы:

  1. Существует ли файловая система с поддержкой LD_PRELOAD, такая как FUSE?
  2. Если я LD_PRELOAD некоторые перехваты вызовов FS для процесса, есть ли какие-либо ошибки, например, возможно, перехваты FS не наследуются форками или дочерними элементами?

person tommyvn    schedule 06.08.2015    source источник
comment
github.com/axw/mrhooker пока выглядит наиболее многообещающе, особенно учитывая, что мой Python намного лучше чем мой с. Я подожду несколько дней, чтобы узнать, будут ли сделаны какие-либо другие предложения, а затем попробую, если нет.   -  person tommyvn    schedule 10.08.2015


Ответы (1)


AFAIK LD_PRELOAD может помочь вам только добавить некоторые дополнительные библиотеки (.so), которых еще нет в системе по пути по умолчанию (ничего общего с файловой системой).

Принимая во внимание нормальный поток управления в Linux, все эти системные вызовы (связанные с файловой системой) окажутся в пространстве ядра и в конечном итоге попадут в назначенные модули ядра файловой системы. FUSE направляет его обратно в пространство пользователя. Я не думаю, что вы можете перехватить VFS, не нарушая код уровня ядра.

Исходя из ваших требований, вам может понадобиться оболочка над libc, которая рассматривает эти файлы как особый случай и обходит системные вызовы.

person Akshay Adiga    schedule 09.08.2015
comment
LD_PRELOAD действительно позволяет мне переопределять вызовы файловой системы (и любые другие вызовы функций общей библиотеки) своими собственными, я уже знаю, что это возможно. То, что мне нужно, это уже написанное, что делает это, и подтверждение того, что нет никаких ошибок. tomaz.me/2014/01/08/ содержит хороший рабочий пример того, что, по вашему мнению, сделать невозможно. - person tommyvn; 10.08.2015
comment
Ну, что я понял из вашего вопроса, так это то, что вы не заинтересованы в обработке данных, а просто заинтересованы в управлении путями/разрешениями. Как только вы делаете системный вызов с путем, все это делается при реализации поиска файловой системы в модуле ядра. Если вы хотите получить полный контроль над данными и метаданными, вы также можете взглянуть на реализацию HDFS. Они предоставляют API для отправки и извлечения данных. Хотя это предназначено для другой цели, вы можете искать в похожих строках. - person Akshay Adiga; 11.08.2015
comment
Вызовы файловой системы находятся в libc и могут быть перегружены. gnu.org/software/libc/manual/ html_node/ документирует только некоторые из вызовов, которые вы можете перегрузить с помощью библиотеки LD_PRELOADed, чтобы изменить способ, которым процесс не только открывает, но и читает, записывает, ищет и т. д. Это дает возможность прозрачного шифрования, сжатия и т. д. выходит далеко за рамки простого манипулирования путями. Я ищу файловую систему с возможностью LD_PRELOAD, к которой я могу подключиться, чтобы представить виртуальную файловую систему процессу Linux, а HDFS не такова. - person tommyvn; 11.08.2015