由于主体名称错误,NFS/krb5 身份验证服务器查找失败

由于主体名称错误,NFS/krb5 身份验证服务器查找失败

使用 Kerberos 安装 NFSv4 时,身份验证失败,并且 krb5kdc.log 显示 NFS 服务器的错误主体名称。

LOOKING_UP_SERVER: ... host/[email protected] for nfs/[email protected]
... Server not found in Kerberos database

主要的nfs/containershost.internal.domain.tld应该nfs/nfs.internal.domain.tld

我是否正确地假设正在执行反向 DNS 查询并返回容器主机.内部.域.tld? 如果是,那么在流程的哪一步(以及从哪台机器)进行此查找?

$ dig -x 192.111.111.111
111.111.111.192.in-addr.arpa. 6009 IN PTR containershost.internal.domain.tld.

有没有办法防止发生这种反向 DNS 查询?IP 为 192.111.111.111 (containershost.internal.domain.tld) 的主机正在运行多个容器,因此无法添加 PTR 记录。

Docker 容器主机

主机名:容器主机.内部.域.tld
IP地址:192.111.111.111

FreeIPA 服务器 (docker)

图像:freeipa/freeipa 服务器:centos-8-4.8.4
容器名称:自由派
容器主机:容器主机.内部.域.tld
主机名:freeipa.internal.domain.tld
IP地址:172.222.222.222
领域:ipa.域名.tld
领域:IPA.域名.TLD
密钥表:

$ klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
   2 host/[email protected]

/etc/krb5.conf:

[libdefaults]
    default_realm = IPA.DOMAIN.TLD
    dns_lookup_realm = false
    dns_lookup_kdc = true
    rdns = false
    ticket_lifetime = 24h
    forwardable = true
    udp_preference_limit = 0

[realms]
    IPA.DOMAIN.TLD = {
        kdc = freeipa.internal.domain.tld:88
        master_kdc = freeipa.internal.domain.tld:88
        admin_server = freeipa.internal.domain.tld:749
        default_domain = ipa.domain.tld
        pkinit_anchors = FILE:/var/lib/ipa-client/pki/kdc-ca-bundle.pem
        pkinit_pool = FILE:/var/lib/ipa-client/pki/ca-bundle.pem
    }

[domain_realm]
    .ipa.domain.tld = IPA.DOMAIN.TLD
    ipa.domain.tld = IPA.DOMAIN.TLD
    freeipa.internal.domain.tld = IPA.DOMAIN.TLD
    .internal.domain.tld = IPA.DOMAIN.TLD
    internal.domain.tld = IPA.DOMAIN.TLD

NFS 服务器 (docker)

图像:Ubuntu:最新版
容器名称:网络文件系统
容器主机:容器主机.内部.域.tld
主机名:nfs.内部.域.tld
IP地址:172.333.333.333
正在运行的服务:

- /usr/sbin/rpc.mountd --port 32767 --no-nfs-version 2 --no-nfs-version 3 -F --debug all
- /usr/sbin/rpc.idmapd -S -vvv -f
- /usr/sbin/rpc.nfsd --debug --port 2049 --no-nfs-version 2 --no-nfs-version 3 -L 10 -G 10
- /usr/sbin/rpc.svcgssd -f -vvv -rrr -iii -p nfs/nfs.internal.domain.tld

密钥表:

$ klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
  74 host/[email protected]
  66 nfs/[email protected]

/etc/krb5.conf:

[libdefaults]
    default_realm = IPA.DOMAIN.TLD
    dns_lookup_realm = false
    dns_lookup_kdc = false
    rdns = false

[realms]
    IPA.DOMAIN.TLD = {
        kdc = freeipa
        admin_server = freeipa
        default_domain = domain.tld
    }

[domain_realm]
    .domain.tld = IPA.DOMAIN.TLD
    domain.tld = IPA.DOMAIN.TLD

NFS 客户端

操作系统:Ubuntu 20.04
主机名:nfsclient.内部.域.tld
IP地址:192.444.444.444
密钥表:

$ klist -k /etc/krb5.keytab
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
  5 host/[email protected]

挂载命令:

$ sudo mount -vvv -t nfs4 -o sec=krb5p 192.111.111.111:/ /mountpoint
mount.nfs4: trying text-based options 'sec=krb5,vers=4.2,addr=192.111.111.111,clientaddr=192.444.444.444'
mount.nfs4: mount(2): Permission denied
mount.nfs4: access denied by server while mounting 192.111.111.111:/

结果

/var/log/krb5kdc.log:

freeipa krb5kdc[288](info): TGS_REQ (4 etypes {aes256-cts-hmac-sha1-96(18), aes128-cts-hmac-sha1-96(17), 
DEPRECATED:des3-cbc-sha1(16), DEPRECATED:arcfour-hmac(23)}) 192.444.444.444: LOOKING_UP_SERVER: authtime 0, 
etypes {rep=(0)} host/[email protected] for nfs/[email protected], 
Server not found in Kerberos database

答案1

nfs 服务器将其自身名称解析为容器主机.内部.域.tld。因此,它会在 keytab 文件中查找该名称。您可能应该明确将容器名称设置为nfs.内部.域.tld(使用 docker-compose 中的 -name 选项或 host 指令)或者在 keytab 文件中添加另一个条目。

相关内容