1

Представлен новый проект vdev (virtual device filesystem), нацеленный на разработку менеджера файлов-устройств, выступающего в роли кросс-платформенной и не зависящей от систем инициализации альтернативы udev и devfs. Работа vdev изначально тестируется не только в Linux, но и во FreeBSD и OpenBSD.

Vdev представляет собой виртуальную файловую систему, отражающую в форме файлов подключенные к машине устройства. В отличие от devfs (FreeBSD) и udev/eudev/mdev (Linux), Vdev обеспечивает контроль доступа на уровне процессов, не привязанный к особенностям Linux или BSD-систем. Обращение к специфичным особенностям ОС вынесены в отдельную прослойку, в то время как базовая логика абстрагирована от предоставляемого операционными системами API доступа к устройствам.

В Vdev используется похожая на devfs и udev событийная (Event-driven) модель работы с устройствами, позволяющая на лету добавлять новые устройства и исключать отключенные. Для выполнения данных задач в vdev поддерживаются различные системные API получения уведомлений об изменении состояния оборудования. При этом источником связанных с оборудованием событий может быть не только операционная система, но и другие экземпляры vdev или правки существующего дерева /dev, что делает vdev интересным решением для систем контейнерной виртуализации. Как и в devfs, в vdev реализована возможность отображения для процессов различного контекста корневого дерева устройств, в зависимости от заданных прав доступа.

Особенностью vdev является расширенная система управления доступом, позволяющая задавать фильтры, ограничивающие доступ к дереву устройств не только на основании штатных прав доступа и идентификаторов пользователей/групп, но и в привязке к заданным процессам. Подобный подход позволяет обойтись без установки флагов setuid/setgid и без менеджера управления сеансами при необходимости предоставления процессу доступа к привилегированным файлам устройств. Например, доступ к /dev/dri/* и /dev/input/* может быть предоставлен процессу /usr/bin/X, независимо от пользователя под которым он запущен, что позволяет обойтись без systemd-logind.

Код проекта написан на языке C++ и распространяется под лицензией GPLv3. Виртуальная файловая система создаётся с использованием механизма FUSE. Из зависимостей отмечаются OpenSSL, libfuse, libc, libstdc++ (для STL) и libpthread, а также библиотеки fskit и libpstat, развиваемые автором vdev.


Источник: http://www.opennet.ru/opennews/art.shtml?num=41328