Ещё одна ошибка прав доступа NFS: Linux NFS4 Доступ запрещён (‘Недействительные учётные данные (защита нарушена)’) из NAT’ированного виртуального компьютера

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

Внутри виртуальной машины адрес хоста – 10.0.2.2, локальный адрес – 10.0.2.15. (VirtualBox). Это переводится на стороне хоста в 127.0.0.1. Чтобы подключиться:

sudo mount -vvvt nfs4 -o clientaddr=127.0.0.1 10.0.2.2:/srv /mnt

Я указал clientaddr, потому что подумал, что проблема может быть связана с несовпадением адресов, но это ничего не меняет. Через несколько минут клиент возвращает привычное сообщение о запрете доступа, доступ запрещен сервером.

На стороне сервера я запускаю

# rpc.mountd -d all -F
# rpc.idmapd -vvvf
# rpc.nfsd -d

Я использую systemd, поэтому также слежу за журналом на предмет вывода. Когда я делаю запрос на монтирование, следующее видно в сети:

reply ERR 20: Auth Bogus Credentials (seal broken)

но в журнале ничего не появляется (где должен быть вывод rpc.nfsd) или в выводе rpc.mountd или rpc.idmapd, кроме некоторых сообщений о старте. На самом деле, в случае rpc.mountd, я иногда получаю следующее:

rpc.mountd: auth_unix_ip: inbuf 'nfsd 127.0.0.1' 
rpc.mountd: auth_unix_ip: client (nil) 'DEFAULT'

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

Я предполагаю, что проблема в моем файле exports, который выглядит следующим образом:

/srv 127.0.0.1(rw,sync,no_subtree_check,no_root_squash)

Но мне бы хотелось получить отзыв от системы о том, что идет не так, вместо того чтобы возиться с моим файлом exports методом проб и ошибок. Так что, знает ли кто-нибудь, где я могу узнать больше о том, что происходит?

Спасибо!

ИЗМЕНЕНИЕ

Недавно я выполнил
exportfs -rav

и теперь клиент сразу возвращает ‘Операция не разрешена’, а rpc.mountd выводит:

rpc.mountd: auth_unix_ip: inbuf 'nfsd 127.0.0.1'
rpc.mountd: v4root_create: path "https://serverfault.com/" flags 0x12401
rpc.mountd: v4root_create: path '/srv' flags 0x10401
rpc.mountd: auth_unix_ip: client 0x1d69d70 '127.0.0.1'
rpc.mountd: nfsd_fh: inbuf '127.0.0.1 1 \x00000000'
rpc.mountd: nfsd_fh: found 0x1d73e90 path / 

но этот вывод может быть связан с тем, что я выполнил exportfs. (Обратите внимание, что я несколько раз перезапускал демоны до этого, поэтому не знаю, как exportfs повлияло на ситуацию)

ХОРОШО, похоже, что добавление параметра ‘insecure’ решило проблему:

secure Этот параметр требует, чтобы запросы исходили с интернет-порта ниже 
       IPPORT_RESERVED. (1024). Этот параметр включён по умолчанию. Чтобы отключить его, укажите 
       insecure.

Это странно, поскольку я запускал NFS-клиент от имени root.

В любом случае, почему эта проблема не была явно указана оператору (мне)? Я не понимаю, как программное обеспечение может считаться пригодным для использования в производстве, если его диагностика полностью скрыта, что делает ее недоступной для неспециалистов.. Я не собираюсь критиковать NFS, но это кажется notoriously obfuscated системой, которой действительно нужна большая прозрачность, учитывая, как часто она используется.. В любом случае, спасибо за внимание.

Одно из решений – протестировать открытые права в /etc/exports (0.0.0.0/0, вероятно, самый правильный вариант). Если это сработает, то, возможно, дело в том, что NFS не совсем понимает, откуда поступает запрос клиента, хотя я заметил, что вы упомянули, что сетевой трафик NAT’ится.

Это может не решить проблему других пользователей, но вот что сработало для меня. После изменения имени хоста сервера и перезагрузки я получал этот “Богусный учетные данные” бред.

  1. Убедитесь, что вы выполнили свою привязку. Для меня мой экспорт был /srv/nfs4/foo, поэтому я сделал

    sudo mount –bind /home/jay/foo /srv/nfs4/foo

  2. Очистите кеш nfs etab и переэкспортируйте свои экспорты

    exportfs -rav

Как по волшебству, это снова работает. Я поместил эти две вещи в скрипт, чтобы, если они мне снова понадобятся, мне не пришлось бы охотиться и ругаться.

#!/bin/bash
sudo mount --bind /home/jay/foo /srv/nfs4/foo
exportfs -rav

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

Ответ на вопрос: Ошибка прав доступа NFS4: "Auth Bogus Credentials (seal broken)" в NAT’ованной ВМ

Введение

Ошибка "Auth Bogus Credentials (seal broken)" при использовании NFS (Network File System) часто возникает из-за проблем с аутентификацией и разрешениями. В вашем случае, NAT-ированная виртуальная машина (ВМ) пытается подключиться к NFS-серверу через адреса, которые могут не подходить под ожидаемые параметры сервера. Мы детально рассмотрим вашу ситуацию и предложим проверенные решения для устранения данной проблемы.

Проблема

Согласно предоставленным данным, вы пытаетесь смонтировать NFS-ресурс с использованием следующей команды:

sudo mount -vvvt nfs4 -o clientaddr=127.0.0.1 10.0.2.2:/srv /mnt

При этом возникают ошибки доступа, связанные с аутентификацией. Вы также отметили, что на стороне сервера происходит вывод сообщения reply ERR 20: Auth Bogus Credentials (seal broken), что указывает на проблему с аутентификацией клиента.

Основные причины проблемы

  1. Несоответствие адресов: Использование clientaddr=127.0.0.1 может вызвать проблемы, если конфигурация сервера не позволяет подключаться к NFS с данного IP-адреса, поскольку клиентская сторона фактически находится на виртуальном адресе 10.0.2.15.

  2. Неправильная настройка /etc/exports: Ваша запись в файле /etc/exports:

    /srv 127.0.0.1(rw,sync,no_subtree_check,no_root_squash)

    допускает доступ только с IP-адреса 127.0.0.1. Это ограничивает возможность подключения с других адресов, даже если вы используете NAT.

  3. Проблемы с безопасностью: Параметры безопасности, такие как использование опции secure, могут препятствовать подключению с портов, превышающих 1024, что приводит к дополнительным проблемам с аутентификацией при выполнении операций от имени root.

Рекомендуемые решения

  1. Широкие права доступа: Рассмотрите возможность временного изменения конфигурации в /etc/exports, чтобы дать доступ всем IP-адресам:

    /srv *(rw,sync,no_subtree_check,no_root_squash)

    После изменения не забудьте выполнить:

    exportfs -rav

    Это позволит проверить, не связано ли отсутствие доступа с ограничениями по IP-адресам.

  2. Использование параметра insecure: Как вы уже выяснили, добавление опции insecure в экспорт позволяет более свободно работать с NFS:

    /srv *(rw,sync,no_subtree_check,no_root_squash,insecure)

    Это разрешает подключения с высоких портов (выше 1024).

  3. Проверка аутентификации и хостов: Убедитесь, что DNS и имена хостов правильно сконфигурированы. Запустите команду:

    hostname

    и проверьте, не возникает ли конфликтов с разрешением имен.

  4. Мониторинг сетевых подключений: Используйте инструменты мониторинга сетевых соединений, такие как tcpdump, для отслеживания запросов и ответов NFS. Это может дать вам дополнительную информацию о том, что происходит на уровне сети.

Заключение

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

Если у вас будут дополнительные вопросы, не стесняйтесь обращаться.

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

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