1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/OpenCloudOS-libfuse

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 10 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 02.03.2025 18:43 7cd96e3

libfuse

Описание

FUSE (Файловая система в пространстве пользователя) представляет собой интерфейс для программ в пространстве пользователя для экспорта файловой системы в ядро Linux. Проект FUSE состоит из двух компонентов: модуля ядра fuse (поддерживаемого в обычных репозиториях ядра) и библиотеки пользователя libfuse (поддерживаемой в этом репозитории). Библиотека libfuse предоставляет эталонную реализацию для взаимодействия с модулем ядра FUSE.

Файловая система FUSE обычно реализуется как отдельное приложение, которое связывается с библиотекой libfuse. Библиотека libfuse предлагает функции для монтирования файловой системы, демонтирования её, чтения запросов от ядра и отправки ответов обратно. Библиотека libfuse предлагает два API: высокоуровневый синхронный API и низкоуровневый асинхронный API. В обоих случаях входящие запросы от ядра передаются основному приложению через коллбэки. При использовании высокоуровневого API коллбэки могут работать с именами файлов и путями вместо inode, и обработка запроса завершается после того, как коллбэк завершает свою работу. При использовании низкоуровневого API коллбэки должны работать с inode, а ответы должны быть отправлены явно с помощью отдельного набора функций API.

Статус разработки

Библиотека libfuse распространяется всем основными дистрибутивами Linux и используется в производственных системах на протяжении многих лет. Однако в настоящее время библиотека libfuse не имеет активных регулярных участников. Текущий поддерживатель продолжает применять пулл-запросы и делает регулярные выпуски, но к сожалению, у него нет возможности заниматься разработкой за рамками решения высокоприоритетных проблем. При отчете о багах, пожалуйста, понимайте, что если вы не включили пулл-запрос или не сообщили о критической проблеме, вероятнее всего, вы не получите ответа. Если вы используете библиотеку libfuse, пожалуйста, рассмотрите возможность участия в проекте.

Поддерживаемые платформы

  • Linux (полностью)
  • BSD (в основном/прикладном подходе)
  • Для OS-X, пожалуйста, используйте OSXFUSE

Установка

Вы можете скачать библиотеку 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 обращенного элемента присутствует в кэше ядра — даже если права доступа изменились, и даже если последующее обращение выполняется другим пользователем. Это мало беспокоит, если файловая система доступна только для пользователя, который её монтирует (так как этот пользователь уже имеет полный доступ к файловой системе), но становится вопросом безопасности, когда другие пользователи имеют право доступа к файловой системе (так как они могут воспользоваться этим, чтобы выполнять операции на файловой системе, на которые они фактически не имеют прав доступа).

Эта проблема должна быть исправлена ​​в ядре Linux и известна с Yöntemler

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 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/OpenCloudOS-libfuse.git
git@api.gitlife.ru:oschina-mirror/OpenCloudOS-libfuse.git
oschina-mirror
OpenCloudOS-libfuse
OpenCloudOS-libfuse
master