Сетевая файловая система NFS или Network File System, это популярный протокол сетевой файловой системы, который позволяет пользователям подключать удаленные сетевые каталоги на своей машине и передавать файлы между серверами. Вы можете использовать дисковое пространство на другой машине для своих файлов и работать с файлами, расположенными на других серверах. По сути, это альтернатива общего доступа Windows для Linux, в отличие от Samba реализована на уровне ядра и работает более стабильно.
В этой статье будет рассмотрена установка NFS в Ubuntu. Мы разберем установку всех необходимых компонентов, настройку общей папки, а также подключение сетевых папок.
Содержание статьи
Немного теории
Как уже было сказано, NFS, это сетевая файловая система. Для работы необходим сервер, на котором будет размещена общая папка и клиенты, которые могут монтировать сетевую папку как обычный диск в системе. В отличие от других протоколов NFS предоставляет прозрачный доступ к удаленным файлам. Программы будут видеть файлы как в обычной файловой системе и работать с ними как с локальными файлами, nfs возвращает только запрашиваемую часть файла, вместо файла целиком, поэтому эта файловая система будет отлично работать в системах с быстрым интернетом или в локальной сети.
Установка компонентов NFS
Перед тем как мы сможем работать с NFS, нам придется установить несколько программ. На машину, которая будет сервером нужно установить пакет nfs-kernel-server, с помощью которого будет выполнено открытие шары nfs в ubuntu 16.04. Для этого выполните:
sudo apt install nfs-kernel-server
Теперь давайте проверим правильно ли установился сервер. Сервис NFS слушает соединения как для TCP, так и для UDP на порту 2049. Посмотреть действительно ли сейчас используются эти порты можно командой:
rpcinfo -p | grep nfs
Также важно проверить поддерживается ли NFS на уровне ядра:
cat /proc/filesystems | grep nfs
Видим, что работает, но если нет, нужно вручную загрузить модуль ядра nfs:
modprobe nfs
Давайте еще добавим NFS в автозагрузку:
sudo systemctl enable nfs-server
На клиентском компьютере вам нужно установить пакет nfs-common, чтобы иметь возможность работать с этой файловой системой. Вам необязательно устанавливать компоненты сервера, достаточно будет только этого пакета:
sudo apt install nfs-common
Вот и все, дальше настройка NFS в Ubuntu.
Настройка сервера NFS в Ubuntu
Мы можем открыть NFS доступ к любой папке, но давайте создадим для этих целей новую:
sudo mkdir /var/nfs
Дальше нас интересует настройка ubuntu nfs server. Все общие папки и другие настройки nfs находятся в файле /etc/exports. Синтаксис записи папки такой:
адрес_папки клиент(опции)
Адрес папки - это та папка, которую нужно сделать доступной по сети. Клиент - ip адрес или адрес сети, из которой могут получить доступ к этой папке. А вот с опциями немного сложнее. Рассмотрим некоторые из них:
- rw - разрешить чтение и запись в этой папке;
- ro - разрешить только чтение;
- sync - отвечать на следующие запросы только тогда, когда данные будут сохранены на диск (по умолчанию);
- async - не блокировать подключения пока данные записываются на диск;
- secure - использовать для соединения только порты ниже 1024;
- insecure - использовать любые порты;
- nohide - не скрывать поддиректории при, открытии доступа к нескольким директориям;
- root_squash - подменять запросы от root на анонимные, используется по умолчанию;
- no_root_squash - не подменять запросы от root на анонимные;
- all_squash - превращать все запросы в анонимные;
- subtree_check - проверять не пытается ли пользователь выйти за пределы экспортированной папки;
- no_subtree_check - отключить проверку обращения к экспортированной папке, улучшает производительность, но снижает безопасность, можно использовать когда экспортируется раздел диска;
- anonuid и anongid - указывает uid и gid для анонимного пользователя.
Например, для нашей папки, если вы хотите разрешить к ней подключаться только с определённого IP адреса, эта строка может выглядеть вот так:
sudo vi /etc/exports
Можно разрешить только нужную подсеть, например:
Для того чтобы разрешить все адреса используйте подсеть 0.0.0.0/0 или символ *.
Открытие шары NFS в Ubuntu почти завершено. Осталось разобраться с правами. Кроме ограничений IP адреса работает обычная система полномочий UNIX, поэтому если вы хотите чтобы определённый пользователь мог получить доступ к папке, то на сервере должен существовать пользователь с таким же UID и эта папка должна принадлежать ему или группе в которой он состоит.
Кроме того, обратите внимание на то, что все подключения от имени пользователя root считаются по умолчанию анонимными (nfsnobody), чтобы это отключить добавьте опцию монтирования no_root_squash, но это небезопасно, потому что любой root пользователь сможет получить доступ на запись ко всем файлам. Теперь попытаемся примонтировать эту папку.
Для того чтобы все пользователи могли получить доступ ко всем файлам можно создать пользователя с UID 1001 и попросить NFS все запросы считать запросами от анонимного пользователя, а анонимному пользователю присвоить UID 1001. Это делается такими опциями:
Когда все будет настроено, останется только обновить таблицу экспорта NFS:
sudo exportfs -a
Если на вашем сервере используется брандмауэр, то следует открыть порты 111 и 2049:
sudo ufw allow 111
sudo ufw allow 2049
Подключение NFS
Мы не будем подробно останавливаться на этом вопросе в сегодняшней статье. Это довольно большая тема, заслуживающая отдельной статьи. Но пару слов я все же скажу. Чтобы подключить сетевую папку вам не нужен никакой nfs клиент ubuntu, достаточно использовать команду mount:
sudo mount 127.0.0.1:/var/nfs/ /mnt/
Теперь вы можете попытаться создать файл в подключенной директории:
touch /mnt/test
Также мы посмотрите подключенные файловые системы с помощью df:
df -h
Чтобы отключить эту файловую систему достаточно использовать стандартный umount:
sudo umount /mnt/
Выводы
В этой статье была рассмотрена настройка NFS в Ubuntu 20.04, как видите, все делается очень просто и прозрачно. Подключение NFS шары выполняется в несколько кликов, с помощью стандартных команд, а открытие шары NFS ненамного сложнее подключения. Если у вас остались вопросы, пишите в комментариях!
Настроил монтирование nfs, добавил в fstab, однако при первом обращении к папке после загрузки клиента она пустая и файлы появляется там только после клика по примонтированной папке, а там запрашивается пароль (в kde). Можно как-то исправить ситуацию?
Добавь автомонтирование в граб этой папки , поставь права на выполнение для всех.
Купил ноутбук HONOR magicbook на deepin и знаете что!? Я был поражен тем что они не удосужились установить на него все что необходимо для полного взаимодействия их девайсов с их буком именно на deepin так как эта ОС у них стоит установленной... Да и вообще у них все девайсы на linux могли бы поднопрячься.
хорошая статья, малаца!
Есть GUI. https://github.com/Philippe734/Simple.NFS.GUI
Надо после установки добавить: sudo apt install -f
пришлось открыть ещё порт 46341 , чтобы клиент мог визуально увидеть каталоги, которые сервер предоставляет.
Здравствуйте! Подскажите пожалуйста, если у меня на сервере rpcinfo выдаёт только три строки вместо шести, это принципиально? и как можно это поправить?
$ rpcinfo -p | grep nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100003 3 udp 2049 nfs
Шара видна на линукс клиентах, но никак не видится IPTV приставкой (TVIP s-box v.530). В /etc/exports перебрал уже 100500 разных настроек - бесполезно, подозреваю, что в приведенном выше выводе нехватает нужных версий.
Упорно не могу подключится с windows 11, ошибка
PS C:\Users\maxya> Remove-Item -Path Alias:mount -ErrorAction Ignore
PS C:\Users\maxya> mount -o anon \\192.168.0.50\HDD2 Y:
Ошибка сети - 53
Для получения дополнительных сведений введите команду "NET HELPMSG 53".
Сервер в локальной сети
А NAS подключает, но диска не вижу (
PS C:\Users\maxya> mount -o anon \\192.168.100.10\HDD3 I:
I: успешно подключен к \\192.168.100.10\HDD3
Команда успешно выполнена.
Спасибо, помогло.
При попытке монтирования
sudo mount 127.0.0.1:/var/nfs/ /mnt/
пишет:
mount.nfs: Operation not permitted
Почему это может быть?