NFS (Network File System) позволяет вам совместно использовать файлы и каталоги между Linux/Unix-подобными системами по сети.
Вот как настроить NFS на сервере Ubuntu и клиентах:
1. Настройка NFS Server (Ubuntu Server):
Установка NFS Server:
sudo apt update sudo apt install nfs-kernel-server
Создание каталога для экспорта:
Создайте каталог, который вы хотите сделать доступным для клиентов NFS. Например:
sudo mkdir -p /mnt/nfs_share sudo chown nobody:nogroup /mnt/nfs_share sudo chmod 777 /mnt/nfs_share # Временно, для простоты. В production используйте более строгие права.
- /mnt/nfs_share: Каталог, который будет экспортироваться.
- chown nobody:nogroup: Изменяет владельца и группу каталога на nobody:nogroup. Это необходимо, чтобы клиенты NFS могли читать и записывать файлы в каталог.
- chmod 777: Устанавливает права доступа к каталогу на 777 (чтение, запись и выполнение для всех). В production-окружении не рекомендуется использовать chmod 777. Вместо этого используйте более строгие права доступа, которые соответствуют вашим требованиям безопасности.
Настройка экспорта NFS:
Отредактируйте файл /etc/exports, чтобы указать, какие каталоги экспортировать и какие клиенты имеют к ним доступ.
sudo nano /etc/exports
Добавьте строку, определяющую каталог для экспорта и параметры доступа. Например:
/mnt/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check)
- /mnt/nfs_share: Каталог, который будет экспортироваться.
- 192.168.1.0/24: IP-адрес или диапазон IP-адресов клиентов, которым разрешен доступ к каталогу. В данном случае, это все IP-адреса в сети 192.168.1.0/24. Вы можете указать конкретный IP-адрес, например 192.168.1.100.
- rw: Разрешает чтение и запись для клиентов.
- sync: Требует, чтобы изменения были записаны на диск до отправки ответа клиенту. Это обеспечивает целостность данных, но может снизить производительность.
- no_subtree_check: Отключает проверку поддеревьев. Это может улучшить производительность, но может также создать проблемы безопасности, если вы экспортируете подкаталоги, которые не должны быть доступны клиентам.
Другие полезные опции:
- ro: Разрешает только чтение.
- async: Разрешает запись изменений на диск асинхронно. Это может повысить производительность, но может также привести к потере данных в случае сбоя сервера.
- root_squash: Преобразует запросы от пользователя root на клиенте в запросы от пользователя nobody на сервере. Это повышает безопасность, предотвращая возможность злоупотребления правами root на клиенте.
- no_root_squash: Не преобразует запросы от пользователя root на клиенте. Это может быть необходимо в некоторых случаях, но снижает безопасность.
- all_squash: Преобразует запросы от всех пользователей на клиенте в запросы от пользователя nobody на сервере.
- anonuid и anongid: Указывают UID и GID пользователя, которому будут сопоставлены запросы от анонимных пользователей.
Экспорт каталогов:
sudo exportfs -a
Перезапуск NFS Server:
sudo systemctl restart nfs-kernel-server
Проверка статуса NFS Server:
sudo systemctl status nfs-kernel-server
Настройка Firewall (если необходимо):
Если у вас включен firewall (например, ufw), разрешите трафик NFS:
sudo ufw allow from 192.168.1.0/24 to any port 2049 sudo ufw enable
- 192.168.1.0/24: Диапазон IP-адресов клиентов, которым разрешен доступ к NFS.
- 2049: Порт NFS.
2. Настройка NFS Client (Ubuntu Client):
Установка NFS Client:
sudo apt update sudo apt install nfs-common
Создание точки монтирования:
Создайте каталог, в который вы хотите монтировать общую папку NFS. Например:
sudo mkdir -p /mnt/nfs_client
Монтирование общей папки NFS:
sudo mount -t nfs <server_ip>:/mnt/nfs_share /mnt/nfs_client
- <server_ip>: IP-адрес NFS-сервера.
- /mnt/nfs_share: Каталог, экспортированный на сервере.
- /mnt/nfs_client: Точка монтирования на клиенте.
Проверка монтирования:
df -h
Вы должны увидеть смонтированную файловую систему NFS в списке.
Автоматическое монтирование при загрузке (опционально):
Чтобы автоматически монтировать общую папку NFS при загрузке системы, добавьте запись в файл /etc/fstab.
sudo nano /etc/fstab
Добавьте строку:
<server_ip>:/mnt/nfs_share /mnt/nfs_client nfs defaults 0 0
- <server_ip>: IP-адрес NFS-сервера.
- /mnt/nfs_share: Каталог, экспортированный на сервере.
- /mnt/nfs_client: Точка монтирования на клиенте.
- nfs: Тип файловой системы.
- defaults: Опции монтирования по умолчанию.
- 0 0: Параметры для dump и fsck (обычно устанавливаются в 0).
После редактирования /etc/fstab выполните команду:
sudo mount -a
Чтобы проверить, что монтирование работает правильно.
3. Устранение неполадок:
Проверьте сетевое соединение: Убедитесь, что клиент и сервер могут пинговать друг друга.
Проверьте настройки firewall: Убедитесь, что firewall не блокирует трафик NFS.
Проверьте файл /etc/exports: Убедитесь, что каталог экспортируется правильно и что клиенту разрешен доступ.
Проверьте права доступа к каталогу: Убедитесь, что у клиента есть права на чтение и запись в каталог.
Проверьте логи NFS: Логи NFS могут содержать полезную информацию об ошибках. Обычно они находятся в /var/log/syslog или /var/log/messages.
Пример более безопасной конфигурации:
Вместо chmod 777 и no_root_squash, рассмотрите использование root_squash, anonuid и anongid для более безопасной конфигурации. Например:
На сервере:
sudo chown nobody:nogroup /mnt/nfs_share sudo chmod 755 /mnt/nfs_share /mnt/nfs_share 192.168.1.0/24(rw,sync,no_subtree_check,root_squash,anonuid=1000,anongid=1000)
- chmod 755: Разрешает владельцу (nobody) чтение, запись и выполнение, а группе (nogroup) и остальным — только чтение и выполнение.
- root_squash: Преобразует запросы от пользователя root на клиенте в запросы от пользователя nobody на сервере.
- anonuid=1000 и anongid=1000: Указывают UID и GID пользователя, которому будут сопоставлены запросы от анонимных пользователей. В данном случае, это пользователь с UID
- 1000 (обычно первый пользователь, созданный в системе). Вам нужно заменить 1000 на UID пользователя, которому вы хотите предоставить доступ к общей папке.
На клиенте:
Убедитесь, что пользователь с UID 1000 существует на клиенте и имеет права на чтение и запись в точку монтирования /mnt/nfs_client.
Заключение:
Настройка NFS позволяет легко обмениваться файлами между Linux-системами. Не забудьте уделить внимание безопасности при настройке NFS, чтобы предотвратить несанкционированный доступ к вашим файлам. Используйте более строгие права доступа, root_squash, anonuid и anongid для повышения безопасности.