Поиск по сайту:

Как установить клиент и сервер NFS в Ubuntu 20.04


Это руководство существует для этих версий ОС

  • Ubuntu 10.04 (Lucid Lynx)

На этой странице

  1. Предпосылки
  2. Шаг 1. Установите NFS на сервере и клиенте
    1. Хост
    2. Клиент

    1. Первый метод
    2. Второй метод

    Сетевая файловая система или сокращенно NFS — это протокол распределенной файловой системы, который позволяет вам монтировать удаленные каталоги на вашем сервере. NFS позволяет вам получать доступ к файлам и папкам с другого сервера или клиента. Вы можете писать на этот сервер с нескольких клиентов или удаленных систем по сети. Эта технология обеспечивает гибкость совместного использования ресурса несколькими системами.

    В этом руководстве мы узнаем, как настроить сервер NFS и как смонтировать общие ресурсы NFS на клиенте с помощью Ubuntu 20.04.

    Предпосылки

    • Две системы Ubuntu 20.04. На каждом сервере должен быть пользователь без полномочий root с привилегиями sudo и установленным брандмауэром UFW.
    • Вы можете настроить сервер и клиент в частной сети. В нашем руководстве я буду использовать host_ip для обозначения адреса host_ip и client_ip для обозначения IP-адреса клиента.

    Шаг 1. Установите NFS на сервере и клиенте.

    Хозяин

    Нам нужно установить пакет nfs-kernel-server на хост, чтобы поделиться вашими каталогами.

    $ sudo apt update
    $ sudo apt install nfs-kernel-server
    

    Клиент

    Для клиента мы установим пакет nfs-common, который позволяет клиенту монтировать каталог хоста, но не может размещать сам каталог.

    $ sudo apt update
    $ sudo apt install nfs-common
    

    Шаг 2. Создайте общие каталоги на хосте.

    Есть два способа предоставить клиенту доступ к каталогам на хосте. По умолчанию сервер NFS не разрешает операции, требующие привилегий sudo. Это означает, что суперпользователи на клиенте не могут записывать файлы как root, переназначать права собственности или выполнять любые задачи, требующие повышенных привилегий.

    Но иногда клиенту необходимо выполнить определенные операции на хосте, для которых требуются повышенные привилегии, но для этого не требуется доступ суперпользователя.

    Первый метод

    Это стандартный способ совместного использования каталогов. Это затрудняет взаимодействие пользователя root на клиенте с хостом с повышенными привилегиями.

    Сначала создайте общий каталог.

    $ sudo mkdir /var/nfs/general -p
    

    Если вы выполняете какие-либо корневые операции на клиенте, то NFS преобразует их в учетные данные nobody:nogroup на хост-компьютере. Следовательно, нам необходимо предоставить соответствующее право собственности на общий каталог.

    $ sudo chown nobody:nogroup /var/nfs/general
    

    Второй метод

    Здесь мы поделимся домашним каталогом хоста с клиентом. Это позволит root-пользователям на клиенте получить правильный доступ к хосту.

    Поскольку домашний каталог уже существует на хост-сервере, нам не нужно его создавать. Также нет необходимости изменять разрешения для него, поскольку это создаст множество проблем для пользователей на хост-компьютере.

    Шаг 3. Настройте NFS на хосте.

    Пришло время настроить NFS для настройки общего доступа.

    Откройте файл /etc/exports на хост-сервере.

    $ sudo nano /etc/exports
    

    Добавьте следующие строки внизу, по одной для каждого общего каталога.

    /var/nfs/general    client_ip(rw,sync,no_subtree_check)
    /home               client_ip(rw,sync,no_root_squash,no_subtree_check)
    

    Давайте рассмотрим все эти варианты и их значение.

    • rw: Это дает клиенту доступ для чтения и записи в каталогах хоста.
    • синхронизация: этот параметр заставляет NFS записывать изменения перед ответом. Это означает, что NFS сначала завершит запись в каталог узла, а затем ответит клиенту. Это гарантирует отражение фактического состояния хост-сервера, но может снизить скорость файловых операций.
    • no_subtree_check: этот параметр отключает проверку поддерева. Проверка поддерева — это операция, при которой при каждом запросе NFS сервер должен проверять наличие файла, к которому осуществляется доступ, и его присутствие в экспортируемом дереве. Эта операция вызывает проблемы, когда файлы, к которым обращается клиент, переименовываются. Поэтому в большинстве случаев лучше оставить его отключенным. Это имеет некоторые незначительные последствия для безопасности, но может повысить надежность.
    • no_root_squash: по умолчанию NFS транслирует все операции, выполняемые клиентом от имени пользователя root, непривилегированному пользователю на сервере. Это сделано с целью повышения безопасности. Этот параметр отключает такое поведение для определенных общих ресурсов.

    Когда вы закончите, закройте файл, нажав Ctrl + X и введя Y при появлении запроса.

    Перезапустите сервер NFS, чтобы изменения вступили в силу.

    $ sudo systemctl restart nfs-kernel-server
    

    Шаг 4. Настройте хост-брандмауэр

    Лучшей практикой с NFS является включение его специально для каждого IP-адреса клиента отдельно, вместо того, чтобы разрешать доступ к нему отовсюду.

    NFS использует порт 2049. Включите доступ для NFS с помощью следующей команды.

    $ sudo ufw allow from client_ip to any port nfs
    

    Проверьте статус, чтобы убедиться.

    $ sudo ufw status
    Status: active
    
    To                         Action      From
    --                         ------      ----
    OpenSSH                    ALLOW       Anywhere                 
    2049                       ALLOW       167.100.34.78        
    OpenSSH (v6)               ALLOW       Anywhere (v6)
    

    Шаг 5 — Создайте точки монтирования на клиенте

    Теперь, когда наш хост настроен, пришло время настроить клиент.

    Создайте две директории для монтирования на клиенте.

    $ sudo mkdir -p /nfs/general
    $ sudo mkdir -p /nfs/home
    

    Теперь, когда мы установили все на стороне хоста, мы можем смонтировать общие ресурсы, используя IP-адрес хоста.

    $ sudo mount host_ip:/var/nfs/general /nfs/general
    $ sudo mount host_ip:/home /nfs/home
    

    Вы можете проверить, успешно ли они были смонтированы, с помощью следующей команды.

    $ df -h
    Filesystem                      Size  Used Avail Use% Mounted on
    udev                            448M     0  448M   0% /dev
    tmpfs                            99M  664K   98M   1% /run
    /dev/vda1                        25G  3.2G   21G  14% /
    tmpfs                           491M     0  491M   0% /dev/shm
    tmpfs                           5.0M     0  5.0M   0% /run/lock
    tmpfs                           491M     0  491M   0% /sys/fs/cgroup
    tmpfs                            99M     0   99M   0% /run/user/1000
    123.175.112.87:/var/nfs/general  25G   18G  6.3G  74% /nfs/general
    123.175.112.87:/home             25G   18G  6.3G  74% /nfs/home
    

    Вы можете увидеть обе подключенные папки в нижней части списка. Поскольку оба они были смонтированы из одной и той же файловой системы, они показывают полное использование диска, а не фактическое использование смонтированных каталогов.

    Чтобы увидеть, сколько фактического пространства используется под каждым креплением, используйте следующую команду.

    $ du -sh /nfs/general
    36K     /nfs/general
    

    Шаг 6. Проверка совместного использования NFS

    Создайте тестовый файл в общей папке /var/nfs/general.

    $ sudo touch /nfs/general/general.test
    

    Проверьте его право собственности.

    $ ls -l /nfs/general/general.test
    -rw-r--r-- 1 nobody nogroup 0 Aug  1 13:31 /nfs/general/general.test
    

    Это было смонтировано с использованием параметров NFS по умолчанию, и, поскольку мы создали файл с помощью root на клиентской машине, право собственности на хост было передано nobody:nogroup. Здесь пользователь-клиент не может выполнять административные задания на хост-компьютере.

    Создайте тестовый файл в папке /nfs/home\\.

    $ sudo touch /nfs/home/home.test
    

    Проверьте его право собственности.

    $ ls -l /nfs/home/home.test
    -rw-r--r-- 1 root root 0 Aug  1 13:32 /nfs/home/home.test
    

    Здесь, поскольку мы создали тестовый файл с использованием root на клиентской машине, право собственности было сохранено на хост-компьютере. Это было связано с тем, что мы использовали флаг no_root_squash, который разрешал пользователю root на клиентском компьютере также быть пользователем root на хост-компьютере.

    Шаг 7. Смонтируйте общие ресурсы NFS во время загрузки

    Эти монтирования не будут сохранены после загрузки клиентской машины. Чтобы сделать их постоянными, нам нужно отредактировать файл /etc/fstab.

    Откройте файл /etc/fstab для редактирования.

    $ sudo nano /etc/fstab
    

    Вставьте следующие строки в конец файла. Каждая строка соответствует каждому каталогу, который мы хотим смонтировать во время загрузки.

    . . .
    host_ip:/var/nfs/general    /nfs/general   nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
    host_ip:/home               /nfs/home      nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0
    

    Чтобы узнать об этих параметрах, проверьте справочную страницу nfs.

    $ man nfs
    

    Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.

    Перезагрузите сервер, чтобы проверить монтирование.

    $ sudo reboot
    

    Войдите в клиент-сервер и убедитесь, что монтирования присутствуют.

    $ df -h
    Filesystem                      Size  Used Avail Use% Mounted on
    udev                            448M     0  448M   0% /dev
    tmpfs                            99M  664K   98M   1% /run
    /dev/vda1                        25G  3.2G   21G  14% /
    tmpfs                           491M     0  491M   0% /dev/shm
    tmpfs                           5.0M     0  5.0M   0% /run/lock
    tmpfs                           491M     0  491M   0% /sys/fs/cgroup
    tmpfs                            99M     0   99M   0% /run/user/1000
    123.175.112.87:/var/nfs/general  25G   18G  6.3G  74% /nfs/general
    123.175.112.87:/home             25G   18G  6.3G  74% /nfs/home
    

    Шаг 8. Размонтируйте общие ресурсы NFS

    Если вам больше не нужны монтирования NFS, вы можете размонтировать их с помощью следующей команды.

    $ sudo umount /nfs/home
    $ sudo umount /nfs/general
    

    Распространенной ошибкой является использование unmount вместо umount, что является фактической командой.

    Убедитесь, что они правильно размонтированы.

    $ df -h
    Filesystem                      Size  Used Avail Use% Mounted on
    udev                            448M     0  448M   0% /dev
    tmpfs                            99M  664K   98M   1% /run
    /dev/vda1                        25G  3.2G   21G  14% /
    tmpfs                           491M     0  491M   0% /dev/shm
    tmpfs                           5.0M     0  5.0M   0% /run/lock
    tmpfs                           491M     0  491M   0% /sys/fs/cgroup
    tmpfs                            99M     0   99M   0% /run/user/1000
    

    Вам также потребуется удалить их записи из файла /etc/fstab, чтобы они не переустанавливались при загрузке. Вы также можете просто раскомментировать их записи, поместив перед ними символ # на тот случай, если вам понадобится снова использовать крепления.

    Заключение

    На этом мы завершаем наше руководство, в котором мы узнали, как создавать монтирования NFS на хост-компьютере и как получать к ним доступ с разных клиентских компьютеров. Если у вас есть какие-либо вопросы, пишите их в комментариях ниже.