Установка и настройка NFS в Ubuntu

Network File System — это сетевая файловая система, позволяющая пользователям обращаться к файлам и каталогам, расположенным на удалённых компьютерах, как если бы эти файлы и каталоги были локальными. Главным преимуществом такой системы является то, что отдельно взятые рабочие станции могут использовать меньше собственного дискового пространства, так как совместно используемые данные хранятся на отдельной машине и доступны для других машин в сети. NFS - это клиент-серверное приложение. Т.е. в системе пользователя должен быть установлен NFS-клиент, а на компьютерах, которые предоставляют свое дисковое пространство - NFS-сервер.

Установка и настройка NFS-сервера.

Устанавливаем NFS-сервер:
sudo aptitude install nfs-kernel-server
Настраиваем, какие именно директории мы хотим открыть для совместного пользования и кому. Все это делается в файле /etc/exports:
sudo nano /etc/exports
В приведенном ниже примере я выделил директорию /home/donet/download (директория с данными на сервере) в пользование компьютеру с IP - 192.168.0.3 с правами чтения и записи:
/home/donet/download        192.168.0.3(rw,async,subtree_check)
Опции: ro - права только на чтение. Можно и не указывать, так как она установлена по умолчанию. rw - дает клиентам право на запись. no_root_squash - по умолчанию пользователь root на клиентской машине не будет иметь доступа к разделяемой директории сервера. Этой опцией мы снимаем это ограничение. В целях безопасности этого лучше не делать. noaccess - запрещает доступ к указанной директории. Может быть полезной, если перед этим вы задали доступ всем пользователям сети к определенной директории, и теперь хотите ограничить доступ в поддиректории лишь некоторым пользователям. insecure - если планируется подключение компьютера под управлением Mac OS X, эта опция обязательна. О других опция можно почитать здесь. Теперь нужно перезапустить nfs-kernel-server:
sudo /etc/init.d/nfs-kernel-server restart
Если после этого вы захотите поменять что-нибудь в файле /etc/exports, то для того, чтобы изменения вступили в силу, достаточно запустить следующую команду:
sudo exportfs -a
Все. NFS-сервер установлен и настроен. Можно переходить к настройке NFS клиента.

Установка и настройка NFS-клиента.

Установка:
sudo aptitude install nfs-common
Монтирование: Создаем точку монтирования. Допустим, это будет папка в вашей домашней директории с названием downloads:
cd && mkdir downloads
Монтировать можно двумя способами - каждый раз вручную или прописав опции монтирования в файл /etc/fstab. Мне больше нравится второй способ:
sudo nano /etc/fstab
и в конце дописываем следующую строку:
192.168.0.20:/home/donet/downloads           /home/donet/downloads           nfs            rw,hard,intr,rsize=8192,wsize=8192    0 0
Вместо 192.168.0.20:/home/donet/downloads впишите IP или имя сервера и путь к директории совместного пользования. Опции монтирования можно изменить. Записав и сохранив изменения, можно монтировать:
sudo mount -a
и набрав в терминале
df -h
вы увидете смонтированные папки на вашем компьютере. Если после всего проделанного у вас все же что-нибудь не получилось, либо вам хочется чего-нибудь большего, например, лучше разобраться в различных опциях и принципах работы - русский перевод NFS HOWTO.

Network File System (NFS) — протокол сетевого доступа к файловым системам, первоначально разработан Sun Microsystems в 1984 году. Основан на протоколе вызова удалённых процедур (ONC RPC, Open Network Computing Remote Procedure Call, RFC 1057, RFC 1831). Позволяет подключать (монтировать) удалённые файловые системы через сеть, описан в RFC 1094, RFC 1813, и RFC 3530. NFS абстрагирована от типов файловых систем как сервера, так и клиента, существует множество реализаций NFS-серверов и клиентов для различных операционных систем и аппаратных архитектур. В настоящее время (2007) используется наиболее зрелая версия NFS v.4 (RFC 3010), поддерживающая различные средства аутентификации (в частности, Kerberos и LIPKEY с использованием протокола RPCSEC_GSS) и списки контроля доступа (как POSIX, так и Windows-типов).
в заметке были использованы источники: "Let's Learn Linux Together" - статья бессовестно отредактирована под собственные нужды, прошу прощения у автора Википедия

Установка и настройка ftp-сервера (ubuntu & proftpd)

Задача: установить фтп-сервер и настроить доступ из интернета.

ОС - ubuntu-sever 8.04 (только консоль).

Примечание: "donet" - это мой логин, важно заменить его на собственный

Устанавливаю пакет proftpd:

sudo aptitude install proftpd

Перед установке потянулись еще три зависимости, согласился.
При установке пакет спрашивает о способе запуска: самостоятельно или через inetd?

Я выбираю "самостоятельно".

Затем открываю файл /etc/shells:

sudo nano /etc/shells

добавляю в него одну строку:

/bin/false

И создаю в /HOME каталоге папку FTP-shared:

sudo mkdir /home/FTP-shared

После этого создаю пользователя с именем userftp:

sudo useradd userftp -p parol -d /home/FTP-shared -s /bin/false

где вместо "parol" - ввожу слово или фразу в качестве пароля :)

В папке FTP-shared создаю две дополнительные папки:

sudo mkdir /home/FTP-shared/public 
sudo mkdir /home/FTP-shared/upload

и даю нужные права созданным папкам:

sudo chmod 755 /home/FTP-shared
sudo chmod 755 /home/FTP-shared/public
sudo chmod 777 /home/FTP-shared/upload

После этого переименовываю имеющийся конфигурационный файл proftpd.conf и создаю новый:

sudo mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.old
sudo nano /etc/proftpd/proftpd.conf

добавив в него следующие строки:
# отключаю протокол
UseIPv6 off

AllowOverwrite on
AuthAliasOnly on

# Здесь присваивается alias пользователю (я присвоил имя donet)
UserAlias donet userftp

ServerName "server"
ServerType standalone
DeferWelcome on

MultilineRFC2228 on
DefaultServer on
ShowSymlinks off

TimeoutNoTransfer 600
TimeoutStalled 100
TimeoutIdle 2200

DisplayChdir .message
ListOptions "-l"

RequireValidShell off

TimeoutLogin 20

RootLogin off

# пути для логов
ExtendedLog /var/log/ftp.log
TransferLog /var/log/xferlog
SystemLog /var/log/syslog.log

#DenyFilter \*.*/

# Я не использую файл /etc/ftpusers (здесь вводим имена пользователей, для ограничения их доступа)
UseFtpUsers off

# Allow to restart a download
AllowStoreRestart on

# Стандартный порт для фтп 21, для повышения безопасности можно выбрать другой (произвольный):
Port 21

# повышение безопасности
MaxInstances 8

# пользователь и группа
User nobody
Group nogroup

# Umask 022 ограничение на создание файлов и папок
Umask 022 022

PersistentPasswd off

MaxClients 8 "Достигнут предел на количество клиентов"
MaxClientsPerHost 8 "Достигнут предел на количество клиентов с Вашего хоста"
MaxClientsPerUser 8 "Достигнут предел на количество подключений (%m)"
MaxHostsPerUser 8 "Больше нельзя"

# вывод приветствия после успешного входа
AccessGrantMsg "Добро пожаловать!!!"
# идентификация
ServerIdent on "Мой домашний сервер"

# делаем /home/FTP-shared папку домашней
DefaultRoot /home/FTP-shared

# запрещаем выходить пользователям за пределы домашней папки (строго рекомендуется)
DefaultRoot ~

MaxLoginAttempts 5 "Количество попыток входа исчерпано - придется подождать, ничего не поделаешь, безопасность превыше всего"

#VALID LOGINS

AllowUser userftp
DenyALL


Umask 022 022
AllowOverwrite off

DenyAll


Umask 022 022
AllowOverwrite off

DenyAll

/home/FTP-shared/upload/>
Umask 022 022
AllowOverwrite on

DenyAll


AllowAll

# # анонимный доступ
#
# User userftp
# Group nogroup
# UserAlias anonymous userftp
# MaxClients 8 "Извините, максимум %m пользователей - попробуйте подключиться позже"
# DisplayChdir .message
#
#
#
# DenyAll
#

#

#

Все, настройка закончена, я буду иметь доступ к фтп-серверу с параметрами доступа:
user (пользователь): donet
password (пароль): parol (тот, что я присвоил для userftp)

Если нужно сделать анонимный доступ, следует закомментировать обе секции для donet и раскомментировать секцию для анонима

Теперь осталось только запустить сервер с измененными параметрами (он уже запущен, но с параметрами по умолчанию):

sudo /etc/init.d/proftpd restart

Для проверки синтаксиса созданного конфиг-файла можно выполнить

sudo proftpd -td5

Что бы узнать, кто подключен к фтп-серверу в данный момент использую команду ftptop (клавиша t меняет отображение, q - выход), можно также использовать команду ftpwho

В итоге я получил фтп-сервер с двумя папками, одна из них (public) доступна только на чтение, а другая (upload) - на запись

Полезные советы:

Если нужно подключить какую-либо папку или партицию к фтп-серверу (например, проверить работу только что созданного фтп-сервера) без редактирования конфига пригодится команда:

sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/public

или с доступом на запись:

sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/upload

Таким образом можно в срочном порядке временно подключить папку или диск и потом отмонтировать командой:

sudo umount /home/FTP-shared/public

или:

sudo umount /home/FTP-shared/upload

Для постоянного доступа к нужным папкам я подключил их посредством fstab.
Рекомендую предварительно сделать бэкап файла fstab:

sudo cp /etc/fstab /etc/fstab.old

Открыть файл /etc/fstab

sudo nano /etc/fstab

и добавить нужные пути:

/здесь/путь/папки/что/я/хочу/расшарить /home/FTP-shared/public none bind 0 0

Теперь даже при рестарте сервера (компьютера) информация будет доступна, но только в локальной сети. Это потому, что моя локальная сеть находится за роутером. Что бы увидеть фтп-сервер из интернета нужно дать ему внешний ip-адрес. Для этого я просто открываю нужный порт (в моем случае 21) для локального адреса (вида 192.168.xxx.xxx) на котором висит мой сервер, для доступа извне.

Теперь нужно дать моему внешнему динамическому айпи-адресу осмысленный и постоянный адрес. Я иду на DynDNS.com и регистрируюсь. Затем создаю себе удобный и запоминающийся адрес (вида moj-server.homeip.net). Дальше - проще. Вношу регистрационные данные с сервиса DynDNS в настройки роутера1 (этот пункт меню называется у меня Dynamic DNS) и ... все. Работает!!!
Теперь только осталось поменять ServerName "server" в файле proftpd.conf на ServerName "moj-server.homeip.net" и рестартануть фтп-сервер.

При написания статьи были использованы материалы:
ubuntuforums.org
knowledge76.com

  1. 1. если это невозможно, можно воспользоваться другим вариантом

Синдикация материалов