여기에 설명된 대로 NFS 및 Kerberos를 구성했습니다.Red Hat Enterprise Linux 7에서 Kerberos NFS 서버를 구성하는 방법
모든 진단 결과는 양호하지만 클라이언트에 공유를 마운트하려고 하면 다음 메시지가 나타납니다.
mount.nfs4: access denied by server while mounting kdc.example.com:/var/backup
서버와 클라이언트 IP는 모두 /etc/hosts(서버 및 클라이언트 컴퓨터)에서 IP 다음 첫 번째 위치에 있습니다. 내 구성은 다음과 같습니다
/etc/krb5.conf
[logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmind.log
[libdefaults]
default_realm = EXAMPLE.COM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d
forwardable = true
[realms]
EXAMPLE.COM = {
kdc = kdc.example.com
admin_server = kdc.example.com
}
[domain_realm]
.example.com = EXAMPLE.COM
example.com = EXAMPLE.COM
/etc/export:
/var/backup client.example.com(rw,sync,no_wdelay,nohide,no_subtree_check,no_root_squash,sec=krb5)
/mnt/storage client.example.com(rw,sync,no_wdelay,nohide,no_subtree_check,no_root_squash,sec=krb5)
/var/kerberos/krb5kdc:
[kdcdefaults]
kdc_ports = 88
kdc_tcp_ports = 88
[realms]
EXAMPLE.COM = {
kdc_ports = 88
admin_keytab = /etc/kadm5.keytab
database_name = /var/kerberos/krb5kdc/principal
acl_file = /var/kerberos/krb5kdc/kadm5.acl
key_stash_file = /var/kerberos/krb5kdc/stash
max_life = 10h 0m 0s
max_renewable_life = 7d 0h 0m 0s
master_key_type = des3-hmac-sha1
supported_enctypes = arcfour-hmac:normal des3-hmac-sha1:normal des-cbc-crc:normal des:normal des:v4 des:norealm des:onlyrealm des:afs3
default_principal_flags = +preauth
}
krb5kdc 및 kadmin 서비스가 서버에서 실행되고 있습니다.
클라이언트의 /etc/fstab:
#NFS area
kdc.example.com:/var/backup /mnt/backup nfs4 rsize=65536,wsize=65536,nolock,hard,sec=krb5
kdc.example.com:/mnt/storage /mnt/storage nfs4 rsize=65536,wsize=65536,nolock,hard,sec=krb5
내가 할 때 :
mount -vv -t nfs4 -o sec=krb5 kdc.example.com:/var/backup backup
다음 메시지를 받았습니다.
mount.nfs4: timeout set for Mon May 22 23:32:59 2017
mount.nfs4: trying text-based options 'sec=krb5,addr=95.85.33.75,clientaddr=192.168.0.2'
mount.nfs4: mount(2): Permission denied
mount.nfs4: access denied by server while mounting kdc.example.com:/var/backup
첫 번째 의견 - /etc/hosts에 설정된 client.example.com이 아닌 clientaddr이 192.168.0.2인 이유는 무엇입니까? 어쨌든, mount의 -o 옵션에 clientaddr=client.example.com을 추가하면 같은 메시지가 나타납니다.
두 번째 메시지는 서버의 /var/log/krb5kdc.log에 있습니다.
CLIENT_NOT_FOUND: [email protected] for krbtgt/[email protected], Client not found in Kerberos database
서버에서 klist -k:
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
3 host/[email protected]
3 host/[email protected]
3 host/[email protected]
3 nfs/[email protected]
3 nfs/[email protected]
3 nfs/[email protected]
클라이언트의 klist -k:
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
2 host/[email protected]
2 host/[email protected]
2 host/[email protected]
2 nfs/[email protected]
2 nfs/[email protected]
2 nfs/[email protected]
kadmin -p 루트/관리자:
kadmin: listprincs
K/[email protected]
[email protected]
host/[email protected]
host/[email protected]
kadmin/[email protected]
kadmin/[email protected]
kadmin/[email protected]
krbtgt/[email protected]
nfs/[email protected]
nfs/[email protected]
root/[email protected]
그렇다면 문제는 무엇입니까? NFS 공유를 탑재할 수 없는 이유는 무엇입니까?
답변1
나는 같은 문제에 직면했다. 이 작은 튜토리얼에 따르면https://www.certdepot.net/rhel7-use-kerberos-control-access-nfs-network-shares/ 서버 측에서는 nfs-secure-server 서비스를 활성화하고 클라이언트 측에서는 nfs-secure 서비스를 활성화해야 합니다. 이것은 트릭을 수행해야합니다.
답변2
어제도 같은 문제가 있었는데 KDC의 주체가 누락되고 rpc-gssd.service가 클라이언트에서 중지되어 발생한 것 같습니다.
KDC 서버에서 tail -f /var/log/krb5kdc.log가 시작되어야 하며 클라이언트에서 NFS 공유를 마운트하려고 할 때 누락된 주체(있는 경우)가 로그에 표시되어야 합니다.
[vagrant@desktop1 ~]$ sudo mount -o sec=krb5 server1:/knfs /knfs -v
mount.nfs: timeout set for Sun Feb 24 09:44:35 2019
mount.nfs: trying text-based options 'sec=krb5,vers=4.1,addr=192.168.121.163,clientaddr=192.168.121.26'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'sec=krb5,vers=4.0,addr=192.168.121.163,clientaddr=192.168.121.26'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'sec=krb5,addr=192.168.121.163'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query failed: RPC: Remote system error - No route to host
^C
[vagrant@desktop1 ~]$
누락된 주체가 로그 출력에서 식별되었습니다.
[vagrant@server1 ~]$ sudo tail -f /var/log/krb5kdc.log
Feb 24 09:42:35 server1 krb5kdc[2870](info): TGS_REQ (8 etypes {18 17 20 19 16 23 25 26}) 192.168.121.26: LOOKING_UP_SERVER: authtime 0, nfs/[email protected] for nfs/[email protected], Server not found in Kerberos database
Feb 24 09:42:35 server1 krb5kdc[2870](info): TGS_REQ (4 etypes {18 17 16 23}) 192.168.121.26: LOOKING_UP_SERVER: authtime 0, nfs/[email protected] for nfs/[email protected], Server not found in Kerberos database
Feb 24 09:42:35 server1 krb5kdc[2870](info): TGS_REQ (8 etypes {18 17 20 19 16 23 25 26}) 192.168.121.26: LOOKING_UP_SERVER: authtime 0, nfs/[email protected] for nfs/[email protected], Server not found in Kerberos database
Feb 24 09:42:35 server1 krb5kdc[2870](info): TGS_REQ (8 etypes {18 17 20 19 16 23 25 26}) 192.168.121.26: LOOKING_UP_SERVER: authtime 0, nfs/[email protected] for nfs/[email protected], Server not found in Kerberos database
누락된 주체를 KDC에 추가하고 클라이언트 키를 클라이언트 {/etc/krb5.keytab}로 내보내야 합니다.
sudo kadmin.local -q "ktadd nfs/kerberos.example.com"
sudo kadmin.local -q "ktadd -k /tmp/krb5.keytab nfs/desktop1.example.com"
클라이언트의 키탭:
[vagrant@desktop1 ~]$ sudo klist -ek
Keytab name: FILE:/etc/krb5.keytab
KVNO Principal
---- --------------------------------------------------------------------------
3 nfs/[email protected] (aes256-cts-hmac-sha1-96)
3 nfs/[email protected] (aes128-cts-hmac-sha1-96)
3 nfs/[email protected] (des3-cbc-sha1)
3 nfs/[email protected] (arcfour-hmac)
3 nfs/[email protected] (camellia256-cts-cmac)
3 nfs/[email protected] (camellia128-cts-cmac)
3 nfs/[email protected] (des-hmac-sha1)
3 nfs/[email protected] (des-cbc-md5)
[vagrant@desktop1 ~]$
거부된 권한은 더 이상 표시되지 않지만 잘못된 매개변수에 대한 또 다른 경고가 표시되어야 합니다.
[vagrant@desktop1 ~]$ sudo mount -o sec=krb5 server1:/knfs /knfs -v
mount.nfs: timeout set for Sun Feb 24 09:07:32 2019
mount.nfs: trying text-based options 'sec=krb5,vers=4.1,addr=192.168.121.54,clientaddr=192.168.121.195'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'sec=krb5,vers=4.0,addr=192.168.121.54,clientaddr=192.168.121.195'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'sec=krb5,addr=192.168.121.54'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query failed: RPC: Remote system error - No route to host
mount.nfs: trying text-based options 'sec=krb5,vers=4.0,addr=192.168.121.54,clientaddr=192.168.121.195'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'sec=krb5,addr=192.168.121.54'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query failed: RPC: Remote system error - No route to host
mount.nfs: trying text-based options 'sec=krb5,vers=4.0,addr=192.168.121.54,clientaddr=192.168.121.195'
mount.nfs: mount(2): Invalid argument
mount.nfs: trying text-based options 'sec=krb5,addr=192.168.121.54'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: portmap query failed: RPC: Remote system error - No route to host
^C
[vagrant@desktop1 ~]$
rpc-gssd.service 서비스를 시작한 후 오류가 사라지고 NFS 공유가 올바르게 마운트되었습니다.
[vagrant@desktop1 ~]$ sudo systemctl start rpc-gssd.service
[vagrant@desktop1 ~]$ sudo mount -o sec=krb5 server1:/knfs /knfs -v mount.nfs:
timeout set for Sun Feb 24 09:07:47 2019 mount.nfs: trying text-based options 'sec=krb5,vers=4.1,addr=192.168.121.54,clientaddr=192.168.121.195'
[vagrant@desktop1 ~]$
티켓은 다음과 같습니다:
[vagrant@desktop1 ~]$ sudo klist -e
Ticket cache: KEYRING:persistent:0:krb_ccache_kfAgj83
Default principal: nfs/[email protected]
Valid starting Expires Service principal
01/01/70 00:00:00 01/01/70 00:00:00 Encrypted/Credentials/v1@X-GSSPROXY:
[vagrant@desktop1 ~]$
답변3
좀 오래되었다는 건 알지만, 아직도 이걸 찾고 계시다면, 저도 비슷한 문제가 있었고 해결책을 직접 찾았습니다. 질문에 대한 내 답변에서 찾을 수 있습니다."Fedora 26 NFS + Kerberos "사전 인증 실패"(마운트 결과 권한 없음)", RHEL이 이러한 설정을 따를 수 있다고 확신합니다.
답변4
FreeIPA를 사용하는 Kerberos 관리 환경의 RHEL 7 서버에서 비슷한 문제가 발생했습니다. 일부 설정:
이 환경은 FreeIPA(서버 idm.nix.example.com
)가 Windows DC에서 양방향 신뢰를 갖는 AD/FreeIPA 환경입니다 dc.example.com
. Linux와 Windows 서버는 모두 동일한 서브넷에 있습니다 172.16.0.0/24
. 따라서 FreeIPA를 구성할 때 nix.example.com
MSAD가 먼저 생성되므로 호스트에 대해 역방향 영역이 동적으로 생성되지 않습니다. 이는 알려진 문제이며 다음을 통해 추적할 수 있습니다.이 버그Zilla.
mount 명령을 실행하면 다음 오류가 발생합니다. NFS 서버에 해당 오류가 없습니다.
[root@idm1 ~]# mount -v -o sec=krb5:krb5i:krb5p -t nfs 172.16.0.9:/share /mnt
mount.nfs: timeout set for Tue Sep 8 21:58:01 2020
mount.nfs: trying text-based options 'sec=krb5:krb5i:krb5p,vers=4.1,addr=172.16.0.9,clientaddr=172.16.0.6'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'sec=krb5:krb5i:krb5p,vers=4.0,addr=172.16.0.9,clientaddr=172.16.0.6'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'sec=krb5:krb5i:krb5p,addr=172.16.0.9'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 172.16.0.9 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 172.16.0.9 prog 100005 vers 3 prot UDP port 20048
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting 172.16.0.9:/share
변경 사항을 적용하여 이 작업을 수행했는데 systemctl status rpc-gssd.service
다음과 같은 오류가 발생했습니다.
[root@idm1 ~]# systemctl status rpc-gssd.service
● rpc-gssd.service - RPC security service for NFS client and server
Loaded: loaded (/usr/lib/systemd/system/rpc-gssd.service; static; vendor preset: disabled)
Active: active (running) since Tue 2020-09-08 15:32:28 EDT; 6h ago
Process: 28217 ExecStart=/usr/sbin/rpc.gssd $GSSDARGS (code=exited, status=0/SUCCESS)
Main PID: 28218 (rpc.gssd)
CGroup: /system.slice/rpc-gssd.service
└─28218 /usr/sbin/rpc.gssd
Sep 08 21:50:39 idm1.nix.example.com rpc.gssd[28218]: **ERROR: unable to resolve 172.16.0.9 to hostname: Name or service not known**
Sep 08 21:50:39 idm1.nix.example.com rpc.gssd[28218]: **ERROR: failed to parse nfs/clntf3/info**
이 환경에서는 PTR이 동적으로 생성되지 않으므로 NIX
NFS 서버를 추가 /etc/hosts
하거나 관련 PTR 레코드를 수동으로 생성해야 합니다. NFS 서버를 다음 위치에 추가하여 문제가 해결되었는지 확인할 수 있습니다 /etc/hosts
.
[root@idm1 ~]# echo "172.16.0.9 nfs.nix.example.com" >> /etc/hosts
[root@idm1 ~]# ls /mnt
hgfs
[root@idm1 ~]# mount -v -o sec=krb5:krb5i:krb5p -t nfs 172.16.0.9:/share /mnt
mount.nfs: timeout set for Tue Sep 8 22:01:00 2020
mount.nfs: trying text-based options 'sec=krb5:krb5i:krb5p,vers=4.1,addr=172.16.0.9,clientaddr=172.16.0.6'
[root@idm1 ~]# ls /mnt
idm1 idm1-2
간단히 말해서:MSAD <-> IPA 신뢰 환경에서는 일부 서비스가 NFS와 같은 서비스에 대한 PTR 레코드를 제공하는지 확인하세요. 이러한 레코드는 동적으로 생성되지 않기 때문입니다.