Открыть сервис

Протокол NFS

Протокол NFS (Network File System, сетевая файловая система) — это протокол распределённой файловой системы, разработанный компанией Sun Microsystems (ныне подразделение Oracle Corporation) в 1984 году. NFS позволяет пользователю или клиентской операционной системе монтировать удалённые файловые системы через сеть и работать с ними так, как если бы они были локальными. Протокол обеспечивает прозрачный доступ к файлам, поддерживает механизмы блокировок, аутентификации и кэширования, и является одним из стандартов де-факто для организации сетевого хранения данных в Unix-подобных системах.

История

Разработка и ранние версии

NFS был создан инженерами Sun Microsystems под руководством Билла Джоя и Расти Сэндберга. Первая реализация была представлена в 1984 году как часть операционной системы SunOS 2.0. Протокол изначально проектировался как открытый стандарт, что позволило другим производителям (IBM, HP, DEC) внедрить его поддержку в свои системы. В 1989 году спецификация NFS версии 2 (RFC 1094) была опубликована как стандарт Интернета.

NFSv3

В 1995 году вышла версия 3 (RFC 1813), которая стала значительным шагом вперёд. Ключевые улучшения включали:

  • Поддержку 64-битных размеров файлов и смещений (снятие ограничения в 2 ГБ).
  • Асинхронные операции записи, повышающие производительность.
  • Улучшенную обработку ошибок и механизмы повторных передач.
  • Дополнительные атрибуты файлов (например, время изменения).

NFSv3 получил широкое распространение и до сих пор используется во многих корпоративных и домашних средах.

NFSv4

В 2000 году была представлена версия 4 (RFC 3010, обновлён в 2003 году — RFC 3530). NFSv4 кардинально переработал архитектуру протокола:

  • Интеграция с безопасностью: обязательная поддержка Kerberos, LIPKEY и SPKM-3 для аутентификации и шифрования.
  • Состояние на сервере: в отличие от NFSv3, сервер теперь хранит информацию о клиентах (открытые файлы, блокировки), что упрощает реализацию и повышает надёжность.
  • Единый протокол: объединение операций с файлами, блокировками и монтированием в один протокол на порту TCP 2049.
  • Поддержка ACL (Access Control Lists): более гибкое управление правами доступа.
  • Псевдофайловая система: возможность монтировать корень сервера NFS без необходимости отдельных точек монтирования.

В 2010 году вышла версия NFSv4.1 (RFC 5661), которая добавила поддержку параллельного доступа (pNFS) для масштабирования на кластеры, а также улучшения для работы с миграцией данных и репликацией. NFSv4.2 (RFC 7862, 2016 год) ввёл такие возможности, как разреженные файлы, клонирование, сжатие и квоты на уровне протокола.

Архитектура и принцип работы

Модель клиент-сервер

NFS работает по классической модели «клиент-сервер»:

  • Сервер NFS — это компьютер или устройство хранения, которое экспортирует (делает доступными) одну или несколько локальных файловых систем. Сервер управляет доступом, аутентификацией и целостностью данных.
  • Клиент NFS — это компьютер, который монтирует удалённую файловую систему. После монтирования клиент может выполнять стандартные файловые операции (чтение, запись, создание, удаление, переименование) через системные вызовы, которые прозрачно транслируются в запросы по сети.

Протоколы и порты

Традиционно NFS использует протоколы UDP и TCP. В NFSv2 и v3 по умолчанию использовался UDP, но начиная с NFSv4 предпочтительным является TCP, так как он обеспечивает надёжную доставку и контроль перегрузок. Для NFSv3 и более ранних версий используется несколько портов:

  • Порт 111 — RPC-регистратор (portmapper).
  • Порт 2049 — NFS-демон (nfsd).
  • Порты для mountd, lockd, statd, nfsd — динамически назначаются, но могут быть фиксированы.

В NFSv4 все операции выполняются через один порт (TCP 2049), что упрощает настройку брандмауэров.

Процедура монтирования

  1. Клиент отправляет запрос к portmapper сервера (порт 111) для получения порта демона mountd.
  2. Клиент вызывает mountd, передавая путь к экспортируемой файловой системе и параметры доступа.
  3. Сервер проверяет права клиента (по IP-адресу, имени хоста или аутентификационным данным) и, в случае успеха, возвращает дескриптор файловой системы (filehandle).
  4. Клиент использует этот дескриптор для всех последующих операций с файлами.

Версии и совместимость

ВерсияГодRFCКлючевые особенности
NFSv21989RFC 109432-битные размеры файлов, UDP, простая модель
NFSv31995RFC 181364-битные файлы, асинхронная запись, улучшенная обработка ошибок
NFSv42000RFC 3010/3530Интеграция с безопасностью, состояние на сервере, единый порт, ACL
NFSv4.12010RFC 5661pNFS, миграция, репликация
NFSv4.22016RFC 7862Разреженные файлы, клонирование, сжатие, квоты

Все версии NFS обратно совместимы: сервер NFSv4 может обслуживать клиентов NFSv3 (через эмуляцию), но не наоборот. На практике NFSv3 и NFSv4 являются наиболее распространёнными.

Реализации

В Unix-подобных системах

NFS является встроенной функцией большинства дистрибутивов Linux и BSD. В Linux используется реализация от проекта Linux NFS, которая поддерживает все версии, включая pNFS. Для настройки используются утилиты exportfs, mount, nfsstat, а также файлы конфигурации /etc/exports (на сервере) и /etc/fstab (на клиенте).

В Windows

Microsoft Windows поддерживает NFS начиная с Windows Server 2008 и Windows 7 (в редакциях Enterprise и Ultimate). Реализация включает клиент NFSv3 и сервер NFSv4.1. Для активации требуется установка компонента «Службы для NFS».

В macOS

macOS (начиная с OS X) включает встроенный клиент NFSv3 и NFSv4. Серверная часть доступна в macOS Server (до версии 10.15 Catalina) или через настройку вручную.

Сторонние реализации

Существуют коммерческие и открытые реализации NFS для различных платформ, например:

  • NFS-Ganesha — серверная реализация NFSv3, v4, pNFS для Linux, поддерживающая различные бэкенды (Lustre, Ceph, GPFS).
  • UNFS3 — легковесная реализация NFSv3 для Unix.
  • Samba — хотя в первую очередь является реализацией SMB/CIFS, может работать как NFS-шлюз.

Безопасность

Аутентификация и шифрование

В NFSv2 и v3 аутентификация основана на IP-адресе клиента (слабая модель). Для повышения безопасности используется Kerberos (через RPCSEC_GSS), который обеспечивает:

  • Аутентификацию пользователей и серверов.
  • Целостность данных (проверка, что данные не были изменены).
  • Шифрование трафика (конфиденциальность).

NFSv4 требует обязательной поддержки Kerberos (или альтернативных механизмов, таких как LIPKEY), что делает его более безопасным по сравнению с предыдущими версиями.

Экспорт и права доступа

На сервере администратор задаёт список экспортируемых файловых систем в файле /etc/exports. Для каждой записи можно указать:

  • IP-адреса или подсети клиентов.
  • Режим доступа (чтение/запись или только чтение).
  • Опции отображения пользователей (root squash — отображение root в анонимного пользователя).
  • Использование Kerberos.

Уязвимости

Исторически NFSv2 и v3 не имеют встроенного шифрования, что делает их уязвимыми для перехвата трафика и атак типа «человек посередине». Рекомендуется использовать NFSv4 с Kerberos или туннелирование через VPN/SSH. В 2021 году были обнаружены уязвимости в реализации NFS в ядре Linux (CVE-2021-20322, CVE-2021-20323), позволяющие повышение привилегий или отказ в обслуживании.

Применение

Корпоративные и научные среды

NFS широко используется в:

  • Кластерных вычислениях: для общего доступа к данным на вычислительных узлах (например, в суперкомпьютерах).
  • Виртуализации: для хранения образов виртуальных машин (например, в VMware ESXi, KVM).
  • Домашних и офисных сетях: для централизованного хранения файлов (документы, медиа) на сервере NAS.
  • Разработке ПО: для совместного доступа к исходным кодам и инструментам сборки.

Альтернативы

Основными конкурентами NFS являются:

  • SMB/CIFS — протокол Microsoft, более распространён в средах Windows, но менее производительный в Unix-средах.
  • AFS (Andrew File System) — распределённая файловая система с кэшированием, разработанная в Университете Карнеги-Меллон.
  • CephFS — распределённая файловая система с поддержкой параллельного доступа, часто используется в облачных средах.
  • GlusterFS — масштабируемая распределённая файловая система.

Интересные факты

  • NFS был одним из первых протоколов, реализованных поверх протокола RPC (Remote Procedure Call), который также был разработан в Sun Microsystems.
  • В 1990-х годах NFS был основным протоколом для организации бесшовного доступа к файлам в гетерогенных сетях Unix-систем.
  • Несмотря на появление более современных протоколов (SMBv3, CephFS), NFS остаётся стандартом для высокопроизводительных вычислений и корпоративных хранилищ благодаря своей простоте, зрелости и широкой поддержке.

Источники

  • RFC 1094 — NFS: Network File System Protocol Specification (Version 2)
  • RFC 1813 — NFS Version 3 Protocol Specification
  • RFC 3530 — Network File System (NFS) Version 4 Protocol
  • RFC 5661 — Network File System (NFS) Version 4 Minor Version 1 Protocol
  • RFC 7862 — Network File System (NFS) Version 4 Minor Version 2 Protocol
  • Linux NFS Project — документация и исходные коды
  • Oracle Corporation — техническая документация по NFS

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →