Почему каталоги в /mnt не видны при монтировании файловой системы с помощью NFS?

Вопрос или проблема

Я настроил общий доступ NFS на своем NFS-сервере с /etc/exports, содержащим / *(rw,no_root_squash,no_subtree_check).
Затем я выполняю exportfs -a для активации общего доступа и перезагружаю NFS-сервер.

Я монтирую общий ресурс с помощью autofs на клиентской машине с /etc/auto.nfs, содержащим foo -fstype=nfs4,soft,rw,noatime,allow_other server.tld:/

Мой auto.master содержит /mnt/nfs /etc/auto.nfs --timeout=30 --ghost

Я перезапускаю autofs (systemctl restart autofs.service)

Затем я вижу все директории с сервера. Но когда я пытаюсь перейти к смонтированным дискам сервера в /mnt/mounteddiskonserver, я больше ничего не вижу. Нет файлов, нет директорий, нет разрешения на запись через файловый менеджер nemo на клиентской машине.
Я могу перейти в /home/user на сервере и видеть, и удалять все мои файлы на сервере, которые имеют те же разрешения, что и /mnt/mounteddiskonserver/fileshere.

Когда я настраиваю NFS-сервер для общего доступа к /mnt/mounteddiskonserver конкретно с помощью /etc/exports, содержащего /mnt/mounteddiskonserver *(rw,no_root_squash,no_subtree_check), я могу видеть все файлы и директории под /mnt/mounteddiskonserver и могу читать и записывать.

Ваш список экспортных опций для корневой файловой системы не включает crossmnt. В результате вам необходимо явно экспортировать каждую отдельную файловую систему под /mnt NFS-сервера, если вы хотите, чтобы они были доступны через NFS.

Это на самом деле хорошо, так как предоставление доступа к /dev через NFS вряд ли даст что-то полезное, а доступ к /proc или /sys через NFS может быть запутанным или даже вредным. (Поскольку устройства доступны по младшим и старшим номерам устройств, узлы устройств на NFS-смонтированном /dev по-прежнему будут отображаться на соответствующие устройства клиентского хоста. Любой вид кэширования, вероятно, даст вам устаревшие данные из экспортированного по NFS /proc.)

У вас могут быть свои причины для экспорта корневой файловой системы вашего NFS-сервера (что само по себе, на мой взгляд, является сомнительной практикой), но добавление crossmnt в ее экспортные опции позволит вам выстрелить себе в ногу из многоствольного Гатлинг-пулемета, если кто-то с доступом root сделает ошибку в системе NFS-клиента. Если вам абсолютно необходимо, сделайте отдельную строку в /etc/exports для /mnt и добавьте туда опцию crossmnt.

Ответ или решение

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

Теория:

NFS (Network File System) — это распределенная файловая система, которая позволяет пользователям просматривать и взаимодействовать с файлами на отдаленных компьютерах почти так же, как если бы это были локальные файлы. Однако, чтобы NFS работал правильно, важно точно настроить параметры экспортируемых и монтируемых директорий как на сервере, так и на клиенте.

В вашем случае проблема заключается в том, что вы не видите директории и файлы под /mnt/mounteddiskonserver, когда осуществляете экспорт корневой файловой системы сервера через NFS. Это связано с тем, что поддиректории, содержащие отдельные файловые системы, такие как /mnt, не экспортируются автоматически при экспорте родительской директории. Это стандартная мера предосторожности в NFS для предотвращения случайного экспорта системных директорий, таких как /dev, /proc и /sys.

Чтобы решить эту проблему, существует опция crossmnt, которая позволяет экспортировать связанные файловые системы вместе с родительской файловой системой. Однако, как и любой мощный инструмент, эта опция должна использоваться с осторожностью из-за возможных последствий для безопасности и производительности.

Пример:

Вы упоминаете, что при настройке /etc/exports с записью:

/ *(rw,no_root_squash,no_subtree_check)

и монтировании корневой системы на клиенте, вы не видите содержимое под /mnt/mounteddiskonserver. Это обусловлено отсутствием опции crossmnt, что означает, что отдельные файловые системы не экспортируются автоматически. Однако, когда вы явно экспортируете /mnt/mounteddiskonserver, все работает корректно.

Включение crossmnt в файл /etc/exports могло бы решить проблему, например:

/ *(rw,no_root_squash,no_subtree_check,crossmnt)

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

Применение:

Чтобы корректно решить вашу задачу, я предлагаю использовать более безопасный подход. Лучше экспортировать каждую файловую систему или интересующую вас директорию отдельно в /etc/exports. Например, если вы хотите предоставить доступ только к /mnt/mounteddiskonserver, добавьте следующую строку:

/mnt/mounteddiskonserver *(rw,no_root_squash,no_subtree_check)

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

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

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

Оцените материал
Добавить комментарий

Капча загружается...