![Почему при монтировании общего ресурса NFS с поддержкой Kerberos возникает ошибка «Нет кэша учетных данных»?](https://rvso.com/image/89157/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83%20%D0%BF%D1%80%D0%B8%20%D0%BC%D0%BE%D0%BD%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8%20%D0%BE%D0%B1%D1%89%D0%B5%D0%B3%D0%BE%20%D1%80%D0%B5%D1%81%D1%83%D1%80%D1%81%D0%B0%20NFS%20%D1%81%20%D0%BF%D0%BE%D0%B4%D0%B4%D0%B5%D1%80%D0%B6%D0%BA%D0%BE%D0%B9%20Kerberos%20%D0%B2%D0%BE%D0%B7%D0%BD%D0%B8%D0%BA%D0%B0%D0%B5%D1%82%20%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%20%C2%AB%D0%9D%D0%B5%D1%82%20%D0%BA%D1%8D%D1%88%D0%B0%20%D1%83%D1%87%D0%B5%D1%82%D0%BD%D1%8B%D1%85%20%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85%C2%BB%3F.png)
У меня есть две системы в локальной сети, nfsclient (CentOS 7) и nfsserver (CentOS 6). Эти имена правильно разрешаются в их IP-адреса, и Kerberos работает между ними (nfsserver — это KDC). У меня есть общий ресурс NFSv4 с Kerberized, экспортированный на nfsserver; мой /etc/exports выглядит следующим образом:
/export *(rw,sync,fsid=0,no_subtree_check,sec=krb5p)
/export/home *(rw,sync,no_subtree_check,no_root_squash,sec=krb5p)
Я вижу эти экспорты из nfsclient:
[root@nfsclient ~]# showmount -e nfsserver
Export list for nfsserver:
/export/home *
/export *
Если я удалю параметры sec=krb5p в /etc/exports, я смогу смонтировать общий ресурс из nfsclient, используя
[root@nfsclient ~]# mount -t nfs4 nfsserver:/ /mnt/nfs
Однако когда NFS керберизован, дела идут не так хорошо:
[root@nfsclient ~]# mount -t nfs4 -o sec=krb5p nfsserver:/ /mnt/nfs
mount.nfs4: access denied by server while mounting nfsserver:/
Это сопровождается серией повторяющихся сообщений об ошибках в /var/log/messages:
Jun 22 19:55:02 oxo gssproxy: gssproxy[769]: (OID: { 1 2 840 113554 1 2 2 }) Unspecified GSS failure. Minor code may provide more information, No credentials cache found
Jun 22 19:55:02 oxo gssproxy: gssproxy[769]: (OID: { 1 2 840 113554 1 2 2 }) Unspecified GSS failure. Minor code may provide more information, No credentials cache found
Jun 22 19:55:02 oxo gssproxy: gssproxy[769]: (OID: { 1 2 840 113554 1 2 2 }) Unspecified GSS failure. Minor code may provide more information, No credentials cache found
Jun 22 19:55:02 oxo gssproxy: gssproxy[769]: (OID: { 1 2 840 113554 1 2 2 }) Unspecified GSS failure. Minor code may provide more information, No credentials cache found
Jun 22 19:55:02 oxo gssproxy: gssproxy[769]: (OID: { 1 2 840 113554 1 2 2 }) Unspecified GSS failure. Minor code may provide more information, No credentials cache found
Jun 22 19:55:02 oxo gssproxy: gssproxy[769]: (OID: { 1 2 840 113554 1 2 2 }) Unspecified GSS failure. Minor code may provide more information, No credentials cache found
В журналах на сервере ничего не отображается. Запуск klist на клиенте показывает, что у root есть кэш учетных данных в /tmp/krb5cc_0, поэтому я думаю, что проблема в gss-proxy.
/etc/gssproxy/gssproxy.conf:
[gssproxy]
[service/HTTP]
mechs = krb5
cred_store = keytab:/etc/gssproxy/http.keytab
cred_store = ccache:/var/lib/gssproxy/clients/krb5cc_%U
euid = 48
[service/nfs-server]
mechs = krb5
socket = /run/gssproxy.sock
cred_store = keytab:/etc/krb5.keytab
trusted = yes
kernel_nfsd = yes
euid = 0
[service/nfs-client]
mechs = krb5
cred_store = keytab:/etc/krb5.keytab
cred_store = ccache:FILE:/var/lib/gssproxy/clients/krb5cc_%U
cred_store = client_keytab:/var/lib/gssproxy/clients/%U.keytab
cred_usage = initiate
allow_any_uid = yes
trusted = yes
euid = 0
Поэтому gss-proxy должен искать кэш учетных данных в /var/lib/gssproxy/clients. Он также получает ключи из /etc/krb5.keytab (в котором есть ключи для принципалов nfs/nfsclient и host/nfsclient). Однако /var/lib/gssproxy/clients, похоже, всегда пуст на nfsclient.
Я что-то упустил? Не могу понять, что именно не так с монтированием этого ресурса.
решение1
Проблема с конфигурацией файла по умолчанию при определении пути кэша. Попробуйте с этой конфигурацией клиента, в /etc/gssproxy/gssproxy.conf
:
[service/nfs-client]
mechs = krb5
cred_store = keytab:/etc/krb5.keytab
cred_store = ccache:FILE:/tmp/krb5cc_%U
cred_usage = initiate
allow_any_uid = yes
trusted = yes
euid = 0
debug = true
решение2
убедитесь, что ваш клиент подключен к домену.
ipa-client-install --force-join
Тогда убедитесь, что у вас есть билет.
kinit admin
и затем дважды проверьте krb5.keytab
restorecon -v /etc/krb5.keytab
убедитесь, что ваш клиент находится в keytab
kinit -k
host/ < client > . < domain > @REALM
Затем вы сможете выполнить монтирование с помощьюsec=krb5p