Монтирование сетевых ресурсов в Linux

    Общий рейтинг статьи: 5 (проголосовало 1 )
    Опубликовано:  [просмотров 1680]


    В отличие от Windows, где с типовой операцией по монтированию сетевого диска справится даже человек очень далекий от IT, в Linux, как обычно, все сделано для инопланетян. В Linux ,практически во всех дистрибутивах, имеется три способа монтирования сетевых ресурсов, каждый из которых не лишен недостатков. Вместо того, что бы сделать один нормальный механизм монтирования сетевых файловых систем, сообщество дорабатывает в сторону регресса три метода. В целом как обычно и ничего не меняется.

    Монтирование сетевых ресурсов в Windows

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

    Сегодня мы рассмотрим три механизма монтирования сетевых ресурсов в Linux.

    • fstab
    • autofs
    • pam_mount

    При помощи этих трех методов мы будем монтировать три самых распространенных сетевых файловых системы:

    • NFS
    • SambaFS (CIFS)
    • sshfs

    Начнем с монтирования сетевых ресурсов при помощи fstab. В файле /etc/fstab описывается подключение файловых систем при загрузке системы сразу после завершения исполнения предварительных скриптов загрузчика из initrd. В разных дистрибутивах этот метод ведет себя по разному и связано это с тем, как система обрабатывает записи в fstab и может получиться, что будет производиться попытка подключить сетевые ресурсы до того как инициирована сетевая подсистема. Мы рассматриваем в качестве клиентских систем Ubuntu-linux версии 16.04 и выше, то есть, системы использующие систему инициализации SystemD, а не Upstart и для систем версии 14.04 есть свои нюансы.

    1. Подключение сетевых ресурсов при помощи системного файла /etc/fstab

    Начнем с подключения сетевой файловой системы NFS, как ее экспортировать на сервере мы уже рассматривали и, предположим, что у нас уже имеется экспортированный каталог /opt/share/. Для подключения сетевого ресурса в домашний каталог пользователя добавьте следующую запись в файл /etc/fstab:

    172.16.4.5:/opt/share/ /home/chernousov/network/test/ nfs auto 0 0

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

    • NFS передает только идентификаторы пользователей, а не их имена, поэтому идентификаторы пользователей должны быть синхронизированы между хостами.
    • При попытке записи в смонтированный каталог пользователем root на сервере источнике будут созданы файлы с владельцем и группой nfsnobody для отмены такого поведения на сервере необходимо добавить опцию no_root_squash (это не безопасно)

    О опциях монтирования для подмены ID пользователя и некоторых других трюках я уже писал в предыдущих заметках и повторяться не буду, перейдем к подводным камням. В Ubuntu и Debian последних версий есть баг, связанный с отмонтированием файловой сетевой файловой системы при перезагрузке и этот момент мы так же рассматривали в прошлых заметках, перезагрузка сервера с смонтированной файловой системой NFS может затянуться на полтора часа.

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

    Строка добавляемая в fstab для подключения ресурсов по протоколу Samba (стандартный Windows протокол) выглядит немного сложнее, так как ресурсы Samba предполагают авторизацию с использованием логина и пароля, а монтирование сетевого ресурса с использованием fstab, предполагает, что пользователь еще не авторизован в системе.

    //172.16.0.3/Dist /home/chernousov/network/test/ cifs credentials=/home/chernousov/.samba-cred,iocharset=utf8,sec=ntlm 0 0

    Как вы наверное догадались, файл /home/chernousov/.samba-cred содержит учетные данные пользователя используя которые ресурс и монтируется. Структура файла выглядит следующим образом:

    username=xxxLoginxxx
    password=xxxPasswordxxx
    domain=xxxDomainxxx

    Если при попытке монтирования сетевого ресурса вы получаете ошибку "wrong fs type, bad option, bad superblock on", проверьте что в системе установлен пакет cifs-utils и ,в случае его отсутствия, установите пакет командой:

    # apt-get install cifs-utils

    Данный способ монтирования ресурсов "болеет" всеми теми же проблемами, что и монтирование NFS (зависание на перезагрузке и т.п.). Стоит отметить, что эти проблемы свойственны всем методам fstab-монтирования.

    И наконец, монтирование sshfs-ресурсов. В данном методе не требуется явная передача учетных данных при монтировании сетевого ресурса, а для авторизации используется метод открытого ключа. Сгенерируйте для пользователя root ssh-ключ и передайте его на сервер сетевой ресурс которого мы будем монтировать:

    # ssh-keygen
    # ssh-copy-id root@172.16.4.5

    Строка fstab для подключения сетевого ресурса выглядит следующим образом:

    root@172.16.4.5:/ /home/chernousov/network/test/ fuse.sshfs IdentityFile=/root/.ssh/id_rsa,allow_other 0 0

    Для работы с сетевыми ресурсами sshfs требуется установить одноименный пакет sshfs командой:

    # aptitude install sshfs

    Опции монтирования довольно разнообразны и подробно описаны в документации, я в свою очередь, хотел бы обратить внимание на слабо документированные опции _netdev и reconnect, в ряде случаев, при помощи этих параметров получается устранить зависания при недоступности сетевого ресурса и переподключение при обрыве связи.

    2. Монтирование на этапе авторизации методами pam_mount

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

    # aptitude install libpam-mount

    Основным конфигурационным файлом для pam_mount является XML-файл /etc/security/pam_mount.conf.xml. На этапе тестирования рекомендую включить режим отладки:

    <debug enable="1" />

    При описании ресурсов монтирования можно использовать макро-переменные:

    • %(USER) - Логин пользователя
    • %(DOMAIN_NAME) и %(DOMAIN_USER) - при работе через winbind
    • %(USERUID) и %(USERGID) - uid и gid пользователя
    • %(GROUP) - имя группы для %(USERGID).

    XML-описания для монтирования сетевых ресурсов выглядят следующим образом:

    Samba (CIFS):

    <volume user="chernousov" fstype="cifs" server="172.16.0.3" path="Dist" mountpoint="/home/chernousov/network/test/" options="iocharset=utf8,rw" />

    Пароль для подключения сетевого ресурса не указывается, используется пароль указанный при авторизации. Если вы не указываете параметр user="xxxUsernamexxx", то данное правило будет применяться ко всем пользователям авторизующимся в системе и ,в таком случае, имеет смысл применять макро-переменные для указания каталогов монтирования для разных пользователей.

    NFS:

    <volume user="chernousov" fstype="nfs" server="172.16.4.5" path="/opt/share/" mountpoint="/home/chernousov/network/test/" />

    SSHFS:

    <volume user="chernousov" fstype="fuse" path="sshfs#root@172.16.4.5:/" mountpoint="/home/chernousov/network/test/" />

    Для монтирования sshfs используется авторизация по ключу, как и для fstab, но в отличие от fstab используется ключ пользователя авторизующегося в системе.

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

    3. Монтирование ресурсов с использованием automount

    Autofs работает от имени системы, а не авторизованного пользователя, и монтирование происходит как и в случае с fstab, с указанием данных авторизации, а для ssh используется ключ суперпользователя root. Главным отличием от монтированием при помощи fstab является, то, что ресурс монтируется при обращении к нему и отключается когда не используется, это необходимо учитывать в случае монтирования сетевых ресурсов на медленных каналах связи.

    Для работы демона autofs необходимо установит одноименный пакет командой:

    # aptitude install autofs

    Рассмотрим конфигурацию для автоматического монтирования сетевого NFS-ресурса из прошлого примера, конфигурация будет немного сложнее, чем в прошлых случаях. Основным конфигурационным файлом является /etc/auto.master в данный файл необходимо добавить описание локального каталога за которым будет производиться наблюдение:

    /home/chernousov/network/ /etc/auto.hm24.net --timeout=60

    • /home/chernousov/network/ - каталог
    • /etc/auto.hm24.net – файл описания сетевых ресурсов монтируемых в этот каталог
    • --timeout=60 – таймаут в секундах для отключения при неактивности

    В файл /etc/auto.hm24.net добавьте строку для описания монтирования сетевого ресурса NFS:

    test-nfs -fstype=nfs,rw 172.16.4.5:/opt/share/

    • test-nfs – точка монтирования внутри каталога /home/chernousov/network/
    • -fstype=nfs,rw – тип файловой системы и опции монтирования
    • 172.16.4.5:/opt/share/ - ресурс который будем монтировать.

    Почему то ни в одной инструкции не написано, что в корневом для точек монтирования каталоге не должно быть каталогов и файлов,которые называются так же как описанные точки монтирования!
    И главное, это то , что точки монтирования в проводнике не отображаются! Они невидимые и они будут смонтированы только при прямом обращении, например, выполнив команду:

    # ls /home/chernousov/network/test-nfs/

    Вы увидите содержимое каталога test-nfs и он только после этого будет отображаться в файловом менеджере вашего окружения рабочего стола.

    Настройка AutoFS не всегда проходит гладко и довольно часто требует включения режима отладки. Для включения режима отладки измените следующий параметр в файле /etc/default/autofs:

    OPTIONS="--debug"

    Лог ведется в системный журнал syslog.

    Вернемся к вопросу скрытых точек монтирования, я честно говоря, не понимаю зачем это сделано и такое поведение системы меня не устраивает, но это можно довольно легко исправить, внеся следующий параметр в файл /etc/default/autofs:

    BROWSE_MODE="yes"

    После внесения всех корректив AutoFS можно пользоваться и единственным недостатком является системное-монтирование.
    Для монтирования сетевых ресурсов Samba используется строка описание:

    test-smb -fstype=cifs,rw,credentials=/home/chernousov/.samba-cred,iocharset=utf8,sec=ntlm ://172.16.0.3/Dist

    И напоследок, рассмотрим монтирование сетевых ресурсов по протоколу sshfs:

    test-ssh -fstype=fuse,rw,allow_other :sshfs\#root@172.16.4.5\:/

    Собственно, в Linux все не так уж и плохо, просто слабо документированы некоторые подводные камни и не хватает банальных графических утилит для настройки.


    Обсуждение статьи
    Вопрос нашего пользователяautofs так же виснет при отключении кабеля LAN. Вы как-то побороли это?
    Ответ на комментарийВидимо это от версии autofs зависит. Какая у вас версия?

    Ваш комментарий: