Я запускаю два сервера nfs с домашними каталогами пользователей и другими общими ресурсами. Серверы предлагают монтирование nfsv4 с помощью Kerberos, а также старые версии v3.
До недавнего времени мне удавалось монтировать через nfs4 общий ресурс, экспортированный с помощью krb5.
с одного сервера на второй без проблем. Если я попытаюсь сейчас
Я получаю отказ в разрешении, и в журнале сервера nfs я всегда вижу эту ошибку, показанную ниже. Файловые системы с пользовательскими данными на серверах nfs расположены в /export/user1 на хосте server1.uni-ko.de и /export/user2 на хосте server2.uni-ko.de (имена хостов изменены).
Путь /export/ используется как общий корень экспорта nfs4, отмеченный fsid=0.
## запустить на хосте server1.uni-ko.de
# mount -t nfs4 -o sec=krb5 server2.uni-ko.de:/user2 /mnt
mount.nfs4: доступ запрещен сервером при монтировании server2.uni-ko.de:/user2
и в журнале nfs серверов я вижу эту ошибку:
отклонен запрос на монтирование от server1.uni-ko.de для /user2 (/): не экспортируется
То же самое произойдет, если я попытаюсь локально смонтировать общий ресурс на том же хосте.
через nfs4 вот так:
## на хосте server1.uni-ko.de
# mount -t nfs4 -o sec=krb5 server1.uni-ko.de:/user1 /mnt
mount.nfs4: доступ запрещен сервером при монтировании server1.uni-ko.de:/user1
Монтировать nfs3 (mount server1.uni-ko.de:/export/user1 /mnt) можно без проблем.
Файл /etc/exports на хосте server2.uni-ko.de выглядит так:
/export gss/krb5(rw,fsid=0,nohide,no_subtree_check,no_root_squash,async,crossmnt) \
gss/krb5i(rw,fsid=0,nohide,no_subtree_check,no_root_squash,async,crossmnt) \
gss/krb5p(rw,fsid=0,nohide,no_subtree_check,no_root_squash,async,crossmnt)
# Экспорт NFS V3 через сетевые группы NIS
/export/user2 @nfsv3client(rw,асинхронный,no_subtree_check,no_subtree_check,fsid=2000)
exportfs -v показывает, что общие ресурсы (krb5-nfs4) экспортированы:
# экспортфс -v
....
/export gss/krb5(rw,async,wdelay,nohide,crossmnt,no_subtree_check,fsid=0,sec=sys,secure,no_root_squash,no_all_squash)
/export gss/krb5i(rw,async,wdelay,nohide,crossmnt,no_subtree_check,fsid=0,sec=sys,secure,no_root_squash,no_all_squash)
/export gss/krb5p(rw,async,wdelay,nohide,crossmnt,no_subtree_check,fsid=0,sec=sys,secure,no_root_squash,no_all_squash)
/export/user2 @nfsv3client(rw,async,wdelay,hide,no_subtree_check,fsid=2000,sec=sys,secure,root_squash,no_all_squash)
Все становится еще более странным, поскольку из клиента nfs4 по умолчанию я все еще могу без проблем монтировать указанный каталог nfs4 точно так же, как описано выше, и обе системы используют одну и ту же ОС в той же версии и уровне исправления, что и SuSE SLES15SP3 с последней версией. установлены патчи.
На серверах nfs работает брандмауэр, открывающий статически назначенные порты, необходимые для NFS, такие как mountd, statd, lockd, а также порты 111 и 2049 (все открыты для tcp и udp). Это то, что я изменил недавно. До этого изменения порты сервера nfs не были статическими, а устанавливались по умолчанию, но я не понимаю, как это могло привести к описанному странному поведению при монтировании. Я также полностью отключил брандмауэр и снова проверил с тем же результатом.
За кулисами работает сервер kerberos, поддерживающий все необходимые принципы. Для серверов nfs и всех клиентов nfs4 доступны принципы «nfs» и «host», и каждый сервер и клиент имеет /etc/krb5.keytab, содержащую экспортированные принципы «nfs» и «host» для этого хоста. Разумеется, участники-пользователи также хранятся на сервере Kerberos. Все это работало безупречно в течение многих лет и работает до сих пор, за исключением описанной проблемы, которая является новой.