Alt linux настройка nfs

NFSv4

Задача — экспортировать часть ФС (/ftp/pub) с iso`шками и репозиториями (часть репозиториев — подмонтированные iso).

mkdir -p /export/pub mount --rbind /ftp/pub /export/pub

Теперь в /export/pub доступно всё содержимое /ftp/pub, в том числе — и смонтированные туда /ftp/pub/foo* (содержимое соответствующего /ftp/pub/ISO/foo*.iso). Несмотря на это, в /etc/exports придётся упомянуть каждую из неявно (за счёт mount --rbind) подмонтированных в /export/pub/* ФС: иначе клиенты их видеть не будут.

В /etc/exports мне потребовалось примерно следующие (сильно упрощённо):

/export (ro,nohide,fsid=0) /export/pub (ro,nohide,fsid=1) /export/pub/foo1 (ro,nohide,fsid=2) /export/pub/foo2 (ro,nohide,fsid=3) /export/pub/foo (ro,nohide,fsid=)

При этом числа в параметре fsid должны различаться. При совпадении — видна только одна из ФС с совпадающими fsid. Корень для всех экспортируемых систем должен быть указан с fsid=0.

Насколько я помню, fsid надо указывать только у /export. То есть только там, где значение должно равняться "0". Эта точка станет корнем для NFSv4.

То есть код ниже, тоже работает:

/export (ro,nohide,fsid=0) /export/pub (ro,nohide) /export/pub/foo1 (ro,nohide) /export/pub/foo2 (ro,nohide) /export/pub/foo (ro,nohide)

Примечание: При экспортировании чего либо нерасположеного в /export (например /ftp/pub непосредствено) — экспортированное доступно только по NFSv3. (Точнее — уменя наблюдалась такая картина.)

Если не вдаваться в подробности (настройка firewall — ниже), то с сервером всё.

Монтирование клиентом

На клиенте всё монтируется в одной точке, но пути к ресурсу для NFSv4 и NFSv3 различаются:

mount -t nfs4 :/ mount -t nfs :/export

При этом как mount -t nfs4 смонтировать удаётся только содержимое /export: при экспорте какого нибудь /ftp/pub напрямую — он доступен только по mount -t nfs

Если при выполнении монтирования команда mount зависает — значит вероятно, что у вас включена опция использования gssd. Чтобы не мучатся с его настройками, пропишите в файл /etc/sysconfig/nfs параметр SECURE_NFS=no.

NFSv4 и NFSv3 через firewall

Так как для меня критична одновременная поддержка клиентов обоих версий NFS (v4 и v3), то фиксацию и открытие портов выполнял по рецептам для NFSv3, как для более беспроблемного варианта. (Меня убеждают что NFSv4 требования мягче. Причин не верить у меня нет, но и специально не проверял.) Использовал http://ipesin.linux.kiev.ua/translations/rhm/tipstricks10.htm и http://nfs.sourceforge.net/nfs-howto/ar01s06.html

Фиксировал и открывал на серверном firewall следующие:

  • nfs — работает по 2049 tcp/udp по умолчанию. Если требуется сдвинуть специально — см. altbug:9769
  • mountd — параметром MOUNTD_PORT/etc/sysconfig/nfs)
  • nlockmgr — параметрами nlm_tcpport и nlm_udpport модуля lockd (строка вида options lockd nlm_tcpport=N nlm_udpport=M в /etc/modules.conf)
  • portmapper — стандартные 111 tcp/udp
Читайте также:  Linux kernel image name

С firewall на клиентах пока не экспериментировал. Есть подозрение, что там придётся фиксировать и открывать порт для status (см. altbug:9770 .

Частые проблемы

Stale NFS file handle

Бывает, что при перезагрузке NFS-сервера обращение к смонтированным ресурсам на NFS-клиентах выдаёт сообщение “Stale NFS file handle”. Обычно это происходит из-за смены идентификатора файловой системы при перезагрузке. Если для обычных устройств он может быть получен из номера устройства, то при использовании LVM он формируется более случайным образом. В man написано что нужно делать:

This option forces the filesystem identification portion of the file handle and file attributes used on the wire to be num instead of a number derived from the major and minor number of the block device on which the filesystem is mounted. Any 32 bit number can be used, but it must be unique amongst all the exported filesystems.

This can be useful for NFS failover, to ensure that both servers of the failover pair use the same NFS file handles for the shared filesystem thus avoiding stale file handles after failover.

Some Linux filesystems are not mounted on a block device; exporting these via NFS requires the use of the fsid option (although that may still not be enough).

Ссылки

Источник

Alt linux настройка nfs

Важной особенностью NFS является то, что она рассчитана на использование внутри безопасной сети, рабочим станциям в которой можно доверять, поскольку авторизация доступа к файлам, смонтированным на NFS осуществляется на основании идентификатора пользователя, а подлинность пользователя каждая машина в сети проверяет самостоятельно. Вытекающим отсюда требованием является то, что пользователь должен быть зарегистрирован и на клиенте и на сервере NFS и иметь там одно и то же входное имя (login) и идентификатор. Это достигается использованием централизованной аутентификации (например, с помощью PAM и сервера аутентификации или NIS).

Для запуска nfs требуется, чтобы в системе были установлены следующие пакеты:

  • nfs-server или unfs3 (в OpenVZ VE ядерный NFS-сервер не работает)
  • rpcbind (с шестой платформы; ранее нужен был portmap)
  • nfs-clients (содержит в себе nfslock)

(в некоторых системах вместо nfs-server и nfs-clients имеется пакет nfs-utils)

Настройка portmap (для p5 и ранее, устарело с p6)

Для работы nfs необходим сервис portmap . По умолчанию, сервис portmap запущен только на loopback (lo) интерфейсе в целях безопасности. Этого достаточно для раздачи сетевых ресурсов через nfs4.

Однако при этом не будет работать монтирование каталогов по nfs3. Если это действительно нужно, то нехотя коментируем в файле /etc/sysconfig/portmap строку PORTMAP_ARGS=»-l», прописываем в /etc/hosts.allow сеть, в которую раздаем:

portmap mountd nfsd statd lockd rquotad : 192.168.ххх.0/255.255.255.0
portmap mountd nfsd statd lockd rquotad : ALL

после этого еще раз вдумчиво читаем http://tldp.org/HOWTO/NFS-HOWTO/security.html. и глубоко размышляем над глубокой небезопасностью запуска portmap без PORTMAP_ARGS=»-l» и использования nfs3.

Читайте также:  Linux open file by user

Настройка rpcbind, для шестой платформы

Начиная с шестой платформы portmap заменен на rpcbind. Настраивается аналогично portmap. Конфигурационный файл /etc/sysconfig/rpcbind, для использования nfs 3, закомментировать:

Настройка kerberos

Для rw каталогов желательно настроить kerberos.

Для read-only можно просто закоментировать в файле /etc/sysconfig/nfs строку

Настройка сервера NFS

1. В файле /etc/exports указываются каталоги, которые мы экспортируем (разрешаем монтировать с других машин) (см. man exports).

По соображениям безопасности не рекомендуется экспортировать каталоги по протоколу NFS 3. Рекомендуется использовать NFS 4.

синтаксис для экспорта через NFS 3

/mysharedir ipaddr1(rw) ipaddr2(ro)

В скобочках указываются дополнительные параметры:

rw — разрешены чтение и запись ro — разрешено только чтение no_root_squash — отключение ограничения прав root

По умолчанию пользователь root имеет на смонтированных ресурсах права пользователя nobody.

Можно указывать разрешение экспорта сразу для подсети. Например разрешение для машин из подсети 192.168.0.X строка будет выглядеть так:

Подробную информацию о формате файла можно посмотреть командой man exports

синтаксис для экспорта через NFS 4

экспортируемые по NFS 4 каталоги имеют тот же синтаксис, что и через NFS3, за исключением того, что все они должны быть в одном подкаталоге (chroot для безопасности). Пусть это каталог /exports. Тогда необходимо подмонтировать остальные экспортированные каталоги внутрь /exports с помощью mount —bind ( mount —bind /mysharedir /exports/mysharedir ), прописать в fstab:

/mysharedir /exports/mysharedir none bind 0 0

и прописать в /etc/exports: отличие от NFS3 в том, что нужно будет добавить nohide к mysharedir и явно обьявить корневой каталог экспорта с fsid=0.

/exports 192.168.0.1/24(fsid=0,ro,insecure,all_squash) /exports/mysharedir 192.168.0.1/24(nohide,ro,insecure,all_squash)

Запуск NFS

1. После настройки файла необходимо запустить сервис rpcbind (для p6,portmap для p5) командой:

2. Запустить непосредственно nfs-server командой:

3. Запустить сервис блокировок командой:

Если все команды прошли успешно и не выдавали ошибок, то сервер можно считать работающим. Дополнительно можно запустить команду exportfs, которая выведет текущие настройки на данный момент. В случае нормальной работы она должна вывести на экран записи из файла /etc/exports

Для запуска сервисов при старте системы:

chkconfig rpcbind on (chkconfig portmap on) chkconfig nfs on chkconfig nfslock on

проблемы с запуском nfs на p8

# systemctl start nfs.service Job for nfs-server.service failed because the control process exited with error code. See "systemctl status nfs-server.service" and "journalctl -xe" for details.
#systemctl status nfs-server.service ● nfs-server.service - NFS server and services Active: failed (Result: exit-code) since Сб 2016-11-12 14:10:48 EET; 3s ago Process: 4812 ExecStart=/usr/sbin/rpc.nfsd $NFSD_OPTIONS $NFSDCOUNT (code=exited, status=1/FAILURE) Process: 4810 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 4812 (code=exited, status=1/FAILURE) ноя 12 14:10:48 birthday.localdomain systemd[1]: Starting NFS server and services. ноя 12 14:10:48 birthday.localdomain rpc.nfsd[4812]: rpc.nfsd: unable to set any sockets for nfsd ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Main process exited, status=1/FAILURE ноя 12 14:10:48 birthday.localdomain systemd[1]: Failed to start NFS server and services. ноя 12 14:10:48 birthday.localdomain systemd[1]: nfs-server.service: Unit entered failed state.

отлаживаем rpc.nfsd (опция -d):

# rpc.nfsd -d 8 rpc.nfsd: knfsd is currently down rpc.nfsd: Writing version string to kernel: -2 +3 +4 rpc.nfsd: Created AF_INET TCP socket. rpc.nfsd: Created AF_INET UDP socket. rpc.nfsd: Created AF_INET6 TCP socket. rpc.nfsd: writing fd to kernel failed: errno 97 (Address family not supported by protocol) rpc.nfsd: unable to set any sockets for nfsd

Оказывается, включен ipv6 и включен протокол v.3 (см. version string to kernel: -2 +3 +4) который не получается повесить на ipv6 адрес.

  • Решение1 (если nfs3 не нужен): выключить v.3 (опция -N3) в $NFSD_OPTIONS: прописываем в /etc/sysconfig/nfs
Читайте также:  Линукс для 64 бит

после чего nfs нормально запускается.

в /etc/netconfig закомментировать

#udp6 tpi_clts v inet6 udp - - #tcp6 tpi_cots_ord v inet6 tcp - -

Использование NFS

Подключение к nfs-серверу можно производить вручную, а можно настроить автоматическое подключение при загрузке.

Допустим машина где запущен nfs-server называется server, и нам необходимо смонтировать с сервера каталог /myshare Тогда, для ручного способа достаточно (из под пользователя root) выполнить команду:

mount -t nfs4 -o proto=tcp,port=2049 server:/myshare /mnt/myshare
mount -t nfs server:/myshare /mnt/myshare

где, /mnt/myshare — локальный каталог куда монтируется удалённый каталог.

Для автоматического монтирования к nfs-серверу при загрузке необходимо добавить следующую строку в файл /etc/fstab:

server:/myshare /mnt/myshare nfs4 proto=tcp,port=2049,intr,soft,lock,_netdev 0 0
server:/myshare /mnt/myshare nfs intr,soft,lock,_netdev

где, intr — позволяет прервать процесс при необходимости soft — предотвращает от зависания в случае недоступности удалённой машины.

Кроме того, стоит убедиться, что сервис netfs запускается при старте системы.

Прежде чем изменять /etc/fstab, попробуйте смонтировать вручную и убедитесь, что всё работает.

Автомонтирование

Осуществляется при помощи automount, autofs или subfs.

subfs (для p5 и ранее, устарело)

Рецепт mike@ для subfs (фрагмент /etc/fstab), NFS4

server:/var/ftp/pub /pub subfs fs=nfs4,program=/sbin/net-submountd,interval=5,proto=tcp,port=2049,soft,_netdev 0 0
server:/var/ftp/pub /pub subfs fs=nfs,program=/sbin/net-submountd,interval=5,soft,_netdev 0 0

autofs + avahi

Использование avahi. Создайте на сервере файл /etc/avahi/services/nfs.service , используется nfs4:

 version="1.0" standalone='no'?> >  replace-wildcards="yes">%h > > >_nfs._tcp > >2049 > > >

и запустите на сервере nfs сервис avahi-daemon. Проверьте с машин-клиентов, что сервер nfs виден с этих машин с помощью команды

avahi-browse -tkrp _nfs._tcp

Установите на машины-клиенты autofs. С настройками по умолчанию, ресурсы nfs будут монтироваться как /mnt/net/servername/netshare.

Для домашней локальной сети, когда nfs раздается не с сервера, а с другой рабочей станции, которую могут выключить в любой момент, рекомендуется прописывать у клиентов в /etc/sysconfig/autofs timeout поменьше (например, 5 сек):

Ссылки

Источник

Оцените статью
Adblock
detector