Еще одна ошибка разрешений NFS: Linux NFS4 отказано в доступе ('подлинные поддельные учетные данные (печать нарушена)') с виртуальной машины NAT'd
Внутри виртуальной машины адрес хоста - 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, а также не требуется настройка. Я указал подробные режимы для каждой команды, так что я не знаю, как мне следует диагностировать эту проблему.
Я предполагаю, что это проблема с моим файлом экспорта, который выглядит следующим образом:
/srv 127.0.0.1(rw,sync,no_subtree_check,no_root_squash)
Но я бы предпочел получить некоторую обратную связь от системы о том, что происходит не так, как возиться с моим файлом экспорта методом проб и ошибок. Итак, кто-нибудь знает, где я могу узнать больше о том, что происходит?
Спасибо!
РЕДАКТИРОВАТЬ
Я недавно запускал exportfs -rav
и теперь клиент немедленно возвращает "Операция не разрешена" и выводит rpc.mountd:
rpc.mountd: auth_unix_ip: inbuf 'nfsd 127.0.0.1'
rpc.mountd: v4root_create: path '/' 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 изменил ситуацию)
ОК, похоже, что добавление опции "небезопасно" исправило это:
secure This option requires that requests originate on an Internet port less than
IPPORT_RESERVED. (1024). This option is on by default. To turn it off, specify
insecure.
Это странно, так как я запускал NFS-клиент от имени пользователя root.
В любом случае, почему эта проблема не была понятна оператору (мне)? Я не понимаю, каким образом часть программного обеспечения может считаться пригодной для производственного использования, если его диагностика полностью скрыта, чтобы сделать ее недоступной для неэкспертов. Я не хочу здесь разбивать NFS, но, похоже, как заведомо запутанная система, которая могла бы действительно использовать некоторую прозрачность, учитывая, как часто она используется.. В любом случае, спасибо за чтение.
2 ответа
Возможно, это не решит чью-либо проблему, но вот что сработало у меня. После изменения имени хоста сервера и перезагрузки я получил эту чушь «Auth Bogus Credential».
Убедитесь, что вы выполнили монтирование привязки. Для меня экспорт был /srv/nfs4/foo, поэтому я так и сделал.
sudo mount --bind /home/jay/foo /srv/nfs4/foo
Очистите кэш nfs etab и повторно экспортируйте экспортированные данные.
экспортфс -рав
Как по волшебству, оно снова работает. Я записал эти две вещи в сценарий, чтобы, если они мне понадобятся снова, мне не пришлось ходить на охоту и ругаться.
#!/bin/bash
sudo mount --bind /home/jay/foo /srv/nfs4/foo
exportfs -rav
Одна вещь, которую нужно попробовать, - проверить широко открытые разрешения в
/etc/exports
(0.0.0.0/0, вероятно, правильный широко открытый). Если это работает, то, вероятно, это связано с тем, что NFS не совсем понимает, откуда исходит клиентский запрос, хотя я заметил, что вы упомянули, что сетевой трафик является NAT.