Суть инновации: FailFS против NULLFS
Разработчики ядра Linux анонсировали включение в ветку 7.3 новой файловой системы FailFS. Она является «братом» уже существующей NULLFS, которая создает пустые, неизменяемые каталоги, возвращающие ошибку ENOENT (файл не найден). FailFS идет дальше: любая операция, направленная на эту файловую систему, немедленно прерывается с кодом ошибки EOPNOTSUPP (операция не поддерживается).
Технические характеристики и ограничения
FailFS спроектирована как «полностью кататоническая» система. Она монтируется один раз во время раннего запуска системы через kern_mount() и логически отделена от всех пространств имен монтирования. Это означает, что:
- На FailFS невозможно смонтировать другие файловые системы.
- Она не клонируется через
OPEN_TREE_CLONE. - Не отображается в
/proc/mountinfo,statmount()или/proc/filesystems. - Недоступна для монтирования из пользовательского пространства (userspace).
Механизм изоляции и безопасность
Главная цель FailFS — позволить процессам полностью сбросить свое состояние файловой системы. Если корневой или рабочий каталог процесса находится в FailFS, любые попытки разрешения путей (absolute paths, симлинки, AT_FDCWD) обречены на провал. Процесс обязан якорить каждый поиск пути по явным файловым дескрипторам.
Разработчик Christian Brauner отметил интересный побочный эффект: из-за того, как работает динамическое выполнение бинарных файлов с PT_INTERP, FailFS в текущей реализации блокирует выполнение динамических бинарных файлов, так как загрузчики используют абсолютные пути. Для управления этим состоянием планируются новые системные вызовы fchdir() и fchroot() с новым дескриптором FD_FAILFS_ROOT.
Минимализм кода
Драйвер FailFS отличается экстремальной простотой: сам код драйвера занимает менее 200 строк. Это делает его идеальным инструментом для тестирования и специфических задач изоляции, где требуется гарантированное отсутствие взаимодействия с файловой системой.
| Характеристика | NULLFS | FailFS |
|---|---|---|
| Основная функция | Возврат ошибки ENOENT (файл не найден) |
Возврат ошибки EOPNOTSUPP (операция не поддерживается) |
| Видимость в системе | Доступна для монтирования | Не видна в /proc, недоступна для userspace |
| Влияние на бинарники | Не блокирует выполнение напрямую | Блокирует динамические бинарники (из-за PT_INTERP) |
| Объем кода драйвера | Информация недостаточна | Менее 200 строк |
Почему это важно
Интеграция FailFS в Linux 7.3 открывает новые возможности для создания высокоизолированных сред выполнения. Хотя текущая версия блокирует динамические бинарники, это открывает путь для разработки специализированных инструментов безопасности и тестирования, где критически важно исключить любое взаимодействие процесса с файловой системой на уровне ядра.
Источник: Phoronix ↗
