###### 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
```
Вывод должен быть таким.

Добавим 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)
```

Открытие шары 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
```
Вывод должен быть таким.
