Эта заметка доступна на: English Castellano Deutsch Francais Nederlands Russian Turkce |
автор Frédéric Raynal Об авторе: Frédéric Raynal Пишет диссертацию в области компьютерной науки на тему picture's tatoo в INRIA. Также в настоящее время он читает детектив, рассказывающий о жизни Th. Roosevelt в начале века, когда он был полицейским префектом. В основе сюжета поиск серийного убийцы детей. В расследовании использовались новые технологии ( психология, отпечатки пальцев и т.д.). Этот детектив, написанный Caleb Carr, L'ange des tйnиbres, раскрывает удивительную картину жизни начала века. Содержание: |
Резюме:
С помощью NFS ( Network File System ) можно управлять файлами с разных компьютеров, находящихся в сети, также как и локальными. Если кратко - нет необходимости знать о местонахождении файла, чтобы использовать его.
NFS позволяет легко обмениваться данными между компьютерами. Например : когда пользователь входит в сеть - ему не обязательно подключаться к какому - либо специальному компьютеру для доступа к своему home directory - он это осуществляет с помощью NFS.
Но в то же время это не достаточно эффективный протокол, особенно при модемном соединении. Скорее всего это удобное решение применительно к локальной сети.
Вы должны контролировать работу этого сервиса - ведь не совсем хорошая мысль позволять помещать данные в вашу сеть кому угодно;-) Несколько обычных настроек уменьшат вероятность возникновения такой ситуации.
Заметка построена следующим образом - сначала кратко вообще о файловых
системах, затем рассмотрим протокол NFS, далее ( менее теоретическая часть ) -
инсталляция NFS - сервера и клиента, и наконей пример взаимодействия NFS,
NIS и autofs.
Пример - предположим, что любой носитель информации ( например жесткий
диск) - набор ячеек определенного размера для хранения информации, так
называемые блоки ( blocks ). Каждая файловая система работает с этими
блоками по - своему. На рисунке 1 изображена попытка разместить файл,
состоящий из 2 блоков. На верхнем рисунке файл размещается за последним
занятым блоком, оставляя свободными блоки в начале, на другом рисунке - файл
помещается в первое свободное место. Если термин "фрагментация"
напоминает вам что - нибудь - теперь вы знаете о чем речь ;-)
Наиболее популярная файловая система для ОС Linux - ext2fs (extended 2 file system), в которой каждый файл представлен таким термином как inode1. Каталоги содержат списки входящих файлов, доступ к которым осуществляется посредством операций чтения/записи.
Основная функция NFS - сервера - раздать клиентам запрашиваемые inodes.
Тем не менее этого не достаточно - клиенты не могут взаимодействовать с
файловыми inode, поэтому NFS - сервер предоставляет дополнительную
информацию для корректной работы удаленных компьютеров с ними.
Рассмотрим функции каждого протокола :
Протокол |
|
|
nfs | создание, чтение/запись, поиск файлов. Также управляет аутентификацией и статистикой. |
|
mountd | ответственный за присоединение внешних систем для доступа через nfs. Сервер получает запросы mount и umount и хранит информацию об экспортируемых системах. |
|
nsm
(Network Status Monitor) |
следит за текущим состоянием компьютера ( сервера или клиента ) для информирования ( например о перезагрузке ). |
|
nlm
(Network Lock Manager) |
для предотвращения одновременного изменения данных разными клиентами ( используется система блокировки ). С помощью Nsm протокол получает информацию о начале работы клиента, соответственно снимаются все блокировки для осуществления доступа и если он происходит - ресурс опять блокируется. |
|
Демон knfsd, доступный в последних версиях ядра поддерживает
протоколы nfs и nlm. С другой стороны - протоколы mountd
и nsm больше не поддерживаются. Когда NFS инсталлирован и запущен
можно проконтролировать его работу следующим образом :
>> ps auxwww | egrep "nfs|mount|lock|stat"В настоящее время существуют две версии NFS - 2 и 3, обозначаемые NFSv2 и NFSv3 соответственно. NFS - серверы Linux поддерживают только версию 2 ( в соответствии с опцией mountd из предыдущего примера ).
root 1370 0.0 0.2 1176 580 ? S 22:28 0:00 rpc.mountd --no-nfs-version 3
root 1379 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1380 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1381 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1382 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1383 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1384 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1385 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1386 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [nfsd]
root 1399 0.0 0.0 0 0 pts/0 SW 22:28 0:00 [lockd]
root 1409 0.0 0.2 1156 560 ? S 22:28 0:00 rpc.statd
root 1652 0.0 0.1 1228 484 pts/3 S 22:49 0:00 egrep nfs|mount|lock|stat
В сочетании с термином NFS используется термин file handle. Он включает в себя inode файла и файл, представляющий устройство, где находится данный файл. Следовательно мы можем сказать, что NFS является файловой системой встроенной в другую файловую систему.
root >>/usr/sbin/rpcinfo -pОпция -p команды rpcinfo позволяет просмотреть сервисы RPC, работающие в данный момент на компьютере. Сначала мы видим, что portmap не запущен, активизируем его ( многие дистрибутивы Linux осуществляют это при запуске системы специальными скриптами ) и проверяем еще раз. Другой причиной негативного отклика системы на команду rpcinfo являются файлы /etc/hosts.{allow,deny}, другими словами запрет в них на отклики portmapper.
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
root >>/sbin/portmap
root >>/usr/sbin/rpcinfo -p
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
Перед запуском NFS необходимо провести конфигурацию. Файл конфигурации ( единственный ) /etc/exports состоит из строк включающих в себя ресурс и список клиентов, которым разрешен доступ к нему. Если необходимо - можно добавить опции после имени каждого клиента. Man exports подробно рассказывает об этом.
В качестве имени клиента можно использовать :
Так как мы изменили /etc/exports - необходимо оповестить об этом daemons. Команда exportfs передает эту информацию серверам : опция -r - синхронизирует файл /etc/mtab 2 c /etc/exports; опция -v - экспортируемые ресурсы получают свои установки.
Некоторая важная информация в процессе работы содержится в следующих файлах :
С помощью команды mount можно получить доступ к разным файловым системам. Команда сообщает ядру тип файловой системы, устройство и точку монтирования. Опция -t для обозначения типа файловой системы - например для NFS выглядит следующим образом : -t nfs.
Для NFS существуют специальные опции команды mount : например rsize и wsize меняют размер блоков для чтения/записи, которые можно комбинировать с обычно используемыми, такими как intr, noexec или nosuid. Man page mount рассказывает о всех доступных.
Пример : предположим, что на компьютере charly работает NFS - сервер и предоставляет в пользование свой /usr/local, для доступа к которому с компьютера с именем jill необходимо выполнить следующую команду :
root@jill >> mount -t nfs -o nosuid,hard,intr charly:/usr/local /usr/localВ команде используются следующие опции - -t nfs ( доступ к файловой системе NFS ), nosuid, hard. Рассмотрим подробнее последние два аргумента : предпоследний определяет "что" надо монтировать ( обратите внимание на синтаксис - для NFS отличается от обычно используемого : сначала указываем имя сервера, а затем каталог ( Внимание : обычно каталог, а не устройство )), последний - "куда". Совместное использование каталога /usr/local компьютерами charly и jill предотвращает повторную установку некоторых программ. В файле etc/fstab указываются устройства, монтируемые при загрузке. В данном случае файл etc/fstab будет содержать следующую строку :
# device mount point file system options dump fsckorder
charly:/usr/local /usr/local nfs nosuid,hard,intr 0 0
Теперь немного о серверной стороне - также не доверять root'у, соответственно клиента. Ранее мы уже упоминали об этом - файл /etc/exports, опция root_squash. Механизм работы следующий : пользователь с UID 0 ( root ) клиента при обращении к серверу с запросом на доступ к данным - получает UID nobody. Эта опция используется в Linux по умолчанию, но может быть отменена с помощью no_root_squash. Также можно определить набор UID для которого использовать опцию. Вспомним, что опции anonuid и anongid помогают в изменении пользовательского UID/GID с nobody на любой другой.
Некоторые действия направлены на взаимодействие с portmapper. Например
можно запретить доступ с любого компьютера, поместив следующую строку в файл
/etc/hosts.deny :
# hosts.deny : absolute prohibition for every one to
# use the portmap
portmap: ALL
Затем в файле /etc/hosts.allow
можно указать компьютеры, которым разрешен доступ.
Не следует забывать и об использовании firewall'ов. В таблице указаны
сервисы, номера портов и используемые протоколы :
RPC сервис | Порт | Протокол |
portmap | 111 | upd / tcp |
nfsd | 2049 | udp |
mountd | variable | udp / tcp |
Сначала рассмотрим конфигурацию нашего сервера charly - во-первых определим некоторые NIS maps, содержащие всю необходимую информацию.
В файле /etc/netgroup перечислены группы компьютеров со схожими характеристиками ( например с одинаковой архитектурой ). Данная NIS map очень полезна для NFS. Мы собрали вместе все компьютеры, у которых есть право на доступ к одной и той же экспортируемой файловой системе и далее эта группа будет использоваться в файле /etc/exports вместо определения каждого компьютера в отдельности :
# /etc/netgroupЧто касается NFS - конфигурирование ограничено. Посмотрим на содержимое файла /etc/exports на сервере charly:
charlysangels (sabrina,,) (jill,,) (kelly)
# /etc/exportsМы решили использовать automount для каталога /usr/local вместо монтирования при загрузке, эта процедура будет выполнена автоматически при попытке пользователя использовать файл из него. Также создадим файл /etc/auto.map и определим что будет одновременно доступно и automount и NIS:
/usr/local @charlysangels(ro)
# /etc/auto.mapДалее, если мы хотим чтобы информация из файлов auto.map и netgroup была интегрирована в базу данных NIS - необходимо изменить Makefile. Мы должны быть уверены, что netgroup будет обязательно добавлен, что касается auto.map - этот файл не определен по умолчанию и поэтому надо указать на его присутствие, добавив новый элемент в Makefile ( на основе существующих, взяв их в качестве основы ):
charly charly:/usr/local
#To be added in the Yellows Pages's Makefile
AUTO_MAP = $(YPSRCDIR)/auto.map
# ...
#...
auto.map: $(AUTO_MAP) $(YPDIR)/Makefile
@echo "Updating $@..."Это правило удаляет комментарии, добавляет новый элемент и пересылает информацию всем серверам.
-@sed -e "/^#/d" -e s/#.*$$// $(AUTO_MAP) | $(DBLOAD) \
-i $(AUTO_MAP) -o $(YPMAPDIR)/$@ - $@
-@$(NOPUSH) || $(YPPUSH) -d $(DOMAIN) $@
Далее необходимо выполнить make из каталога /var/yp.
Теперь о клиентах sabrina, jill and kelly. Эдесь ничего особенного делать не надо:) Просто информируем autofs об управлении новой картой представляемой YP. Следующая строка присутствует в каждом файле /etc/auto.master у клиентов и позволяет получать информацию о наличии auto.map от YP сервисов.
#/etc/auto.masterПерезапускаем autofs.
/usr/local yp auto.map --intr,nosuid,nodev
После установки программ на компьютере charly, все клиенты могут использовать их.
Можно пойти еще дальше и создать один /usr на всех, один /usr/doc на
всех, но как показывает практика - это не совсем хорошая идея. Это влечет
за собой изменения в каталоге /etc и других. Далее приходится обновлять
не экспортируемые файлы на компьютерах и т.д.
NFS
|
Webpages maintained by the LinuxFocus Editor team
© Frédéric Raynal, FDL LinuxFocus.org Click here to report a fault or send a comment to Linuxfocus |
Translation information:
|
2000-12-10, generated by lfparser version 2.1