В современных версиях Windows есть встроенный NFS клиент, который позволяет напрямую монтировать NFS директории с Linux хостов или NAS устройств и получать прозрачный доступ к файлам и папкам на них. В этой статье мы покажем, как включить NFS клиент в Windows, смонтировать сетевую папку NFS и особенности маппинга Windows пользователей в UID/GID пользователей Linux.
Установка NFS клиента в Windows
Начиная с Windows 10, появился встроенный NFS клиент, который можно использовать для подключения сетевых ресурсов NFS. По умолчанию клиент NFS не установлен. Включить его можно через панель управления компонентами Windows Features (
optionalfeatures
): разверните Services for NFS и включите опцию Client for NFS (дополнительно можно установить административные утилиты NFS).

Или можно установить клиент NFS с помощью PowerShell.
На десктопных платформах (Windows 10 и 11):
Enable-WindowsOptionalFeature -FeatureName ServicesForNFS-ClientOnly, ClientForNFS-Infrastructure -Online -NoRestart
На Windows Server:
Install-WindowsFeature NFS-Client

Вывести все настройки NFS клиента в Windows:
Get-NfsClientConfiguration

Подключаем сетевую папку NFS в Windows
Сетевую папку NFS можно смонтировать в Windows прямо из графического интерфейса проводника Windows, как обычную сетевую папку. Выберите опцию Map network drive в File Explorer, укажите сетевой путь к NFS директории (в стандартном UNC формате, например
\\192.168.158.147\nfsshare
) и укажите букву, которую нужно назначить этому диску.

Однако в таком режиме нельзя задать дополнительные опции подключения к NFS шаре.
Удобнее монтировать NFS папки из командной строки с помощью:
- Консольной утилиты
mount.exe - PowerShell командлета
New-PSdrive
mount.exe
. Дело в том, что в PowerShell команда mount является алиасом для командлета New-PSDrive.
Откройте командную строку (или PowerShell консоль) с правами пользователя (не администратора!!!, иначе смонтированный NFS диск не будет виден в проводнике пользователя, подробнее об этом в статье о доступе к сетевым дисками с правами администратора).
Выполните команду монтирования NFS директории:
mount.exe -o anon \\192.168.158.147\nfsshare K:

-
-o anon– подключаем NFS папку под анонимным пользователем -
192.168.158.147– адрес/имя NFS сервера -
/nfsshare– локальный путь к каталогу на сервере NFS. Если в качестве NFS сервера используется Linux хост c NFS3, то нужно указывать полный локальный путь к NFS директории от корня файловой системы, напримерhost:/mnt/nfs/nfsshare1 -
N:— буква диска, которую вы хотите назначить папке
casesensitive=yes
Или PowerShell аналог команды монтирования NFS:
New-PSdrive -PSProvider FileSystem -Name N -Root \\192.168.158.147\nfsshare -Persist

Опция Persist указывает, что подключение к этому NFS каталогу нужно восстанавливать автоматически после перезагрузки компьютера (у команды mount.exe такой опции нет)
Теперь вы можете получать доступ к файлам в сетевой директории NFS прямо из проводника Windows и других приложений. Обратите внимание, что в свойствах объектов в NFS папке, проводник отображает новую вкладку NFS Attributes, где можно получить информацию о разрешениях и владельцах файлов.

Также имейте в виду, что, если в имени файла в сетевой папке NFS содержатся кириллица (или друге национальные символы), он может либо не отображаться, либо имя такого файла может отображаться кракозябрами. В качестве обходного решения можно включить поддержку UTF-8 в Windows (до сих пор находится в статусе бета):
intl.cpl
-> Административные -> Изменить язык системы -> галочка Beta: Использовать UTF-8 для поддержки языков по всему миру

Отмонтировать сетевую папку NFS:
Remove-PSDrive N
Или
umount.exe K:\
Выполните команду
mount.exe
, чтобы отобразить опции, с которыми подключена NFS директория:

Windows при анонимном подключении к NFS-серверу использует UID=-2 и GID=-2 по умолчанию для сопоставления подключающегося пользователя в пользователя на удалённом сервере. Если вы хотите использовать определенные UID/GID пользователя Linux для анонимного подключения NFS директории, эти значения можно переопределить в параметрах AnonymousUid и AnonymousGid в ветке реестра
HKLM\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default
. Например, следующие параметры заставят NFS-клиент использовать
UID=0
и
GID=0
(
root
-пользователь Linux) при анонимных подключениях вместо дефолтных -2:
reg add "HKLM\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" /v AnonymousUid /t REG_DWORD /d 00000000 /f
reg add "HKLM\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default" /v AnonymousGid /t REG_DWORD /d 00000000 /f

После внесения изменения нужно перезапустить службы NFS:
Restart-Service nfsrdr,nfsclnt -Force
Однако использование анонимного доступа к NFS не самое безопасное решение. Лучше настроить маппинг Windows пользователей в UID и GID пользователя Linux:
В домене AD можно включить маппинг пользователей:
Set-NfsMappingStore -EnableADLookup $true
Set-NfsMappedIdentity -MappingStore AD -UserName "kbuldogov" -UserIdentifier 1000 -GroupIdentifier 100
Set-ADUser -identity user1 -replace @{uidNumber="<user_uid>";gidNumber="<user_gid>"}
Подробнее о настройке маппинга пользователей NFS в Windows.
На отдельно-стоящих машинах (в рабочих группах, или когда вы не хотите использовать маппинг через AD), можно настроить сопоставление имен Windows пользователей в Unix UID/GID через файлы passwd и group в каталоге
C:\Windows\System32\drivers\etc
.
Например, для локального пользователя user1:
Файл passwd:
user1:x:1000:100:User1:C:\Users\user1
Файл group:
users:x:100:user1
Проверить маппинг конкретного пользователя Windows в UID/GID Linux можно командой:
Get-NfsMappedIdentity -AccountName user1 -AccountType User


