FUSE (Файловая система в пространстве пользователя) представляет собой интерфейс для программ в пространстве пользователя для экспорта файловой системы в ядро Linux. Проект FUSE состоит из двух компонентов: модуля ядра fuse (поддерживаемого в обычных репозиториях ядра) и библиотеки пользователя libfuse (поддерживаемой в этом репозитории). Библиотека libfuse предоставляет эталонную реализацию для взаимодействия с модулем ядра FUSE.
Файловая система FUSE обычно реализуется как отдельное приложение, которое связывается с библиотекой libfuse. Библиотека libfuse предлагает функции для монтирования файловой системы, демонтирования её, чтения запросов от ядра и отправки ответов обратно. Библиотека libfuse предлагает два API: высокоуровневый синхронный API и низкоуровневый асинхронный API. В обоих случаях входящие запросы от ядра передаются основному приложению через коллбэки. При использовании высокоуровневого API коллбэки могут работать с именами файлов и путями вместо inode, и обработка запроса завершается после того, как коллбэк завершает свою работу. При использовании низкоуровневого API коллбэки должны работать с inode, а ответы должны быть отправлены явно с помощью отдельного набора функций API.
Библиотека libfuse распространяется всем основными дистрибутивами Linux и используется в производственных системах на протяжении многих лет. Однако в настоящее время библиотека libfuse не имеет активных регулярных участников. Текущий поддерживатель продолжает применять пулл-запросы и делает регулярные выпуски, но к сожалению, у него нет возможности заниматься разработкой за рамками решения высокоприоритетных проблем. При отчете о багах, пожалуйста, понимайте, что если вы не включили пулл-запрос или не сообщили о критической проблеме, вероятнее всего, вы не получите ответа. Если вы используете библиотеку libfuse, пожалуйста, рассмотрите возможность участия в проекте.
Вы можете скачать библиотеку libfuse с https://github.com/libfuse/libfuse/releases. Чтобы сборка и установка были успешными, вам потребуются Meson и Ninja. После распаковки tar-архива библиотеки libfuse создайте временную директорию сборки и запустите Meson:
$ mkdir build; cd build
$ meson ..
Обычно, стандартные параметры сборки будут работать хорошо. Если вы всё же хотите скорректировать их, вы можете сделать это с помощью команды meson configure:
$ meson configure # список параметров
$ meson configure -D disable-mtab=true # установка параметра
Для сборки, тестирования и установки библиотеки libfuse затем используйте Ninja:
$ ninja
$ sudo python3 -m pytest test/
$ sudo ninja install
Запуск тестов требует наличия Python-модуля py.test. Вместо выполнения тестов с правами root большинство тестов также можно выполнять с правами обычного пользователя, если util/fusermount3 сделан setuid root:
$ sudo chown root:root util/fusermount3
$ sudo chmod 4755 util/fusermount3
$ python3 -m pytest test/
Программа fusermount3 устанавливается с правами setuid root. Это позволяет обычным пользователям монтировать свои собственные реализации файловых систем.
Чтобы ограничить вред, который злонамеренные пользователи могут причинить этим способом, программа fusermount3 применяет следующие ограничения:
Пользователь может монтировать только на точки монтирования, для которых он имеет права записи
Точка монтирования не должна быть липкой директорией, которая не принадлежит пользователю (например, /tmp
обычно является таковой)
Никто другой (включая root) не может получить доступ к содержимому монтированной файловой системы (хотя это можно ослабить, разрешив использование опций монтирования allow_other и allow_root в /etc/fuse.conf)
Если вы планируете использовать опцию монтирования allow_other, будьте осведомлены о том, что FUSE имеет нерешённую безопасность: если опция монтирования default_permissions не используется, результат первой проверки прав доступа, выполненной файловой системой для записи в каталог, будет повторно использоваться для последующих обращений до тех пор, пока inode обращенного элемента присутствует в кэше ядра — даже если права доступа изменились, и даже если последующее обращение выполняется другим пользователем. Это мало беспокоит, если файловая система доступна только для пользователя, который её монтирует (так как этот пользователь уже имеет полный доступ к файловой системе), но становится вопросом безопасности, когда другие пользователи имеют право доступа к файловой системе (так как они могут воспользоваться этим, чтобы выполнять операции на файловой системе, на которые они фактически не имеют прав доступа).
FUSE, example
dizininde birçok örnek dosya sistemiyle birlikte gelir. Örneğin, passthrough örneği kök klasörünün içeriğini montaj noktasının altına yansır. Oradan başlayıp kodu uyarlayın!
FUSE поставляется с множеством примеров файловых систем в директории example
. Например, пример passthrough зеркалит содержимое корневой директории под точкой монтирования. Начните оттуда и адаптируйте код!Документация функций API и необходимых коллбэков в основном содержится в файлах include/fuse.h
(для высокоуровневого API) и include/fuse_lowlevel.h
(для низкоуровневого API). Автоматически сгенерированная HTML-версия API доступна в директории doc/html
и по адресу http://libfuse.github.io/doxygen.
Если вам нужна помощь, пожалуйста, обратитесь на почтовый список fuse-devel@lists.sourceforge.net (подписывайтесь по адресу https://lists.sourceforge.net/lists/listinfo/fuse-devel).
Пожалуйста, сообщайте любые ошибки на трекере задач GitHub по адресу https://github.com/libfuse/libfuse/issues.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )