nfs/ 주체를 kinit할 수 없습니다.

nfs/ 주체를 kinit할 수 없습니다.

NFSv4 공유를 마운트하려고 하는데 mount명령이 공유를 마운트할 수 있는 권한을 얻지 못합니다.

공유를 마운트하려고 하면 다음 메시지가 나타납니다.

mount.nfs4: mount(2): Permission denied

다음을 사용하여 nfs 주체를 초기화하려고 하면 다음이 반환됩니다.
kinit -k -t /etc/krb5.keytab nfs/[email protected]

kinit: Client 'nfs/[email protected]' not found in Kerberos database while getting initial credentials

서비스를 구성하고 테스트하려고 시도한 방법에 대한 모든 세부 정보는 다음과 같습니다. 모든 호스트는 Debian 12입니다.

NFS 서버에서:
/etc/hosts파일

127.0.0.1   localhost
172.17.0.10 nfshost.domain.com nfshost
...

/etc/krb5.conf문서

[libdefaults]
  dns_lookup_realm = false
  dns_lookup_kdc = false
  default_realm = DOMAIN.COM
  default_keytab_name = FILE:/etc/krb5.keytab
  default_tkt_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
  default_tgs_enctypes = aes256-cts-hmac-sha1-96 aes128-cts-hmac-sha1-96
  allow_weak_crypto = 0

[realms]
  DOMAIN.COM = {
  kdc = 172.17.0.20
  master_kdc = 172.17.0.20
  default_domain = domain.com
  admin_server = 172.17.0.20
  }

[domain_realm]
domain.com = DOMAIN.COM
.domain.com = DOMAIN.COM

/etc/exports문서

/exports         172.17.0.0/16(rw,sync,fsid=0,no_subtree_check,crossmnt,sec=krb5)
/exports/users   172.17.0.0/16(rw,sync,no_subtree_check,sec=krb5)

/etc/idmapd.conf문서

[General]
Verbosity = 0
Domain = domain.com

[Mapping]
Nobody-User = nobody
Nobody-Group = nogroup

[Translation]
Method = nsswitch

/etc/default/nfs-kernel-server문서

RPCNFSDCOUNT=8
RPCNFSDPRIORITY=0
RPCMOUNTDOPTS="--manage-gids"
NEED_SVCGSSD="yes"
RPCSVCGSSDOPTS=""

/etc/default/nfs-common문서

NEED_STATD=no
STATDOPTS=
NEED_IDMAPD=yes
NEED_GSSD=yes

NFS 서버 항목을 도메인(AD Samba)에 추가하는 명령

# kdestroy
# kinit administrator
# msktutil delete --computer-name NFSHOST --server 172.17.0.20
# msktutil -c -b "CN=COMPUTERS" -s HOST/nfshost.domain.com -h nfshost -k /etc/krb5.keytab --computer-name NFSHOST --server 172.17.0.20 --dont-expire-password --verbose --enctypes 28

AD(Samba는 172.17.0.20에 있음):
추가된 NFS 서버 호스트에 다음 SPN을 추가합니다.

# samba-tool spn add nfs/nfshost NFSHOST$
# samba-tool spn add nfs/nfshost.domain.com NFSHOST$
# samba-tool spn add RestrictedKrbHost/nfshost NFSHOST$
# samba-tool spn add RestrictedKrbHost/nfshost.domain.com NFSHOST$

다음 명령을 사용하여 NFS 서버 호스트 항목을 확인하십시오 samba-tool computer show nfshost.

dn: CN=NFSHOST,CN=Computers,DC=domain,DC=com
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: user
objectClass: computer
cn: NFSHOST
instanceType: 4
whenCreated: 20230901104446.0Z
uSNCreated: 202585
name: NFSHOST
objectGUID: 305c91e0-328d-47f4-ab30-7a4c0ea951dc
badPwdCount: 0
codePage: 0
countryCode: 0
badPasswordTime: 0
lastLogoff: 0
lastLogon: 0
pwdLastSet: 133380386868301530
primaryGroupID: 515
objectSid: S-1-5-21-2898533208-202842514-1397044296-107323
accountExpires: 9223372036854775807
logonCount: 0
sAMAccountName: NFSHOST$
sAMAccountType: 805306369
objectCategory: CN=Computer,CN=Schema,CN=Configuration,DC=domain,DC=com
isCriticalSystemObject: FALSE
dNSHostName: nfshost.domain.com
msDS-SupportedEncryptionTypes: 28
userAccountControl: 69632
servicePrincipalName: HOST/nfshost.domain.com
servicePrincipalName: host/nfshost
servicePrincipalName: nfs/nfshost
servicePrincipalName: nfs/nfshost.domain.com
servicePrincipalName: RestrictedKrbHost/nfshost
servicePrincipalName: RestrictedKrbHost/nfshost.domain.com
whenChanged: 20230901104626.0Z
uSNChanged: 202594
distinguishedName: CN=NFSHOST,CN=Computers,DC=domain,DC=com

NFS 호스트 키 탭을 생성합니다.

# samba-tool domain exportkeytab --principal=nfs/nfshost.domain.com keytab.NFSHOST-nfs

NFS 서버로 돌아가기:
AD에서 생성된 키탭을 검색합니다.

scp [email protected]:/root/keytab.NFSHOST-nfs .

/etc/krb5.keytab파일 로 병합합니다 .

# ktutil
   rkt /etc/krb5.keytab
   rkt /root/keytab.NFSHOST-nfs
   wkt /etc/krb5.keytab
   quit

# chmod 600 /etc/krb5.keytab
# chown root:root /etc/krb5.keytab

SPN이 있는지 확인하십시오.
klist -kte /etc/krb5.keytab | grep nfs/nfshost.domain.com다음을 반환하십시오.

1 01/09/2023 07:59:33 nfs/[email protected] (aes256-cts-hmac-sha1-96) 
1 01/09/2023 07:59:33 nfs/[email protected] (aes128-cts-hmac-sha1-96)

일부 서비스 다시 시작

exportfs -rav
/etc/init.d/nfs-kernel-server restart
/etc/init.d/nfs-common restart
mount --bind /home/users /exports/users

AD와 NFS 서버 간의 시계가 동기화됩니다.
호스트는 동일한 VLAN에 있으며 둘 사이나 누구에게도 방화벽이 없습니다.

시험:

공유(여전히 NFS 서버에 있음)를 마운트하려고 하면
mount -t nfs4 nfshost.domain.com:/users /mnt -o sec=krb5 -v다음이 반환됩니다.

mount.nfs4: timeout set for Fri Sep  1 08:03:22 2023
mount.nfs4: trying text-based options 'sec=krb5,vers=4,addr=172.17.0.10,clientaddr=172.17.0.10'
mount.nfs4: mount(2): Permission denied
mount.nfs4: access denied by server while mounting nfshost.domain.com:/users

kinit nfs 주체:반환을 시도하십시오:
kinit -k -t /etc/krb5.keytab nfs/[email protected]

kinit: Client 'nfs/[email protected]' not found in Kerberos database while getting initial credentials

/var/log/syslog파일은 다음과 같습니다:

Sep  1 08:03:25 nfshost rpc.gssd[111218]: ERROR: No credentials found for connection to server nfshost.domain.com

이 NFS 서비스를 올바르게 구성하려면 무엇이 부족합니까?

답변1

알고보니 /etc/krb5.keytab파일에 문제가 있어서 실행하지 않고 파일을 삭제하고 kdestroy나머지 과정을 실행한 결과 마운트에 성공했습니다.

파일이 너무 큰 것 같아서(+2M) 키탭과 ktutil.

나는 그 kdestroy작업이 파일을 정리하는 것이라고 잘못 생각했지만 /etc/krb5.keytab에 설명된 대로 man 1 kdestroy그의 기능은 다음과 같습니다:
"kdestroy 유틸리티는 자격 증명을 덮어쓰고 삭제하여 사용자의 활성 Kerberos 인증 티켓을 파괴합니다.은닉처그들을 격리하세요. "

관련 정보