###### tags: Linux, NFS # Настройка NFS. В этой заметки: настройка сетевой директории NFS. ## Теория Сетевая файловая система NFS или Network File System, это популярный протокол сетевой файловой системы, который позволяет пользователям подключать удаленные сетевые каталоги на своей машине и передавать файлы между серверами. Вы можете использовать дисковое пространство на другой машине для своих файлов и работать с файлами, расположенными на других серверах. По сути, это альтернатива общего доступа Windows для Linux, в отличие от Samba реализована на уровне ядра и работает более стабильно. Для работы необходим сервер, на котором будет размещена общая папка и клиенты, которые могут монтировать сетевую папку как обычный диск в системе. В отличие от других протоколов NFS предоставляет прозрачный доступ к удаленным файлам. Программы будут видеть файлы как в обычной файловой системе и работать с ними как с локальными файлами, nfs возвращает только запрашиваемую часть файла, вместо файла целиком, поэтому эта файловая система будет отлично работать в системах с быстрым интернетом или в локальной сети. ## Установка и настройка. Установим пакет nfs-kernel-server с помощью которого будет выполнено открытие общей папки nfs. ``` apt install nfs-kernel-server ``` Проверим поддерживаеться ли nfs на уровне ядра. ``` cat /proc/filesystems | grep nfs ``` Сервис NFS слушает соединения как для TCP, так и для UDP на порту 2049. Посмотреть действительно ли сейчас используются эти порты можно командой: ``` rpcinfo -p | grep nfs ``` Вывод должен быть таким. ![](https://i.imgur.com/yUDolzG.png) Добавим NFS в автозагрузку. ``` systemctl enable nfs-server ``` На клиентском компьютере вам нужно установить пакет nfs-common, чтобы иметь возможность работать с этой файловой системой. ``` apt install nfs-common ``` Создадим будующую сетевую папку на сервере nfs. ``` mkdir ~/nfs ``` Все настройки общих папок лежат в файле /etc/exports. Подробнее по настройкам: Синтаксис: **Местоположение_директории ip_адрес_клиента(опции)** Местоположение_директории - это та папка, которую нужно сделать доступной по сети. ip_адрес_клиента - 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 звездочку * или подсеть 0.0.0.0/0. Следующей строкой расшарим папку во все сети. ``` /root/nfs *(rw,sync,no_root_squash,no_subtree_check) ``` ![](https://i.imgur.com/icoUTXZ.png) Открытие шары NFS в Ubuntu почти завершено. Осталось разобраться с правами. Кроме ограничений IP адреса работает обычная система полномочий UNIX, поэтому если вы хотите чтобы определённый пользователь мог получить доступ к папке, то на сервере должен существовать пользователь с таким же UID и эта папка должна принадлежать ему или группе в которой он состоит. Кроме того, обратите внимание на то, что все подключения от имени пользователя root считаются по умолчанию анонимными (nfsnobody), чтобы это отключить добавьте опцию монтирования no_root_squash, но это не безопасно, потому что любой root пользователь сможет получить доступ на запись ко всем файлам. Обновляем таблицу экспорта NFS. ``` exportfs -a ``` Если у вас есть файрвол то необходимо открыть порт 2049. Чтобы примантировать эту сетевую директорию на удаленной машине нужно создать папку в которую будем монтировать, и после примантировать ``` mkdir /root/nfs mount ip_serv_nfs:/root/nfs /root/nfs/ ``` Для проверки используйте команду: ``` dh -h ``` Вывод должен быть таким. ![](https://i.imgur.com/1qarlOf.png)