mount.nfs4: 마운트하는 동안 서버 액세스가 거부되었습니다(이전에는 동일한 구성이 제대로 작동했던 경우).

mount.nfs4: 마운트하는 동안 서버 액세스가 거부되었습니다(이전에는 동일한 구성이 제대로 작동했던 경우).

다시 시작된 서버에 nfs 폴더 세트를 다시 마운트하려고 시도했지만 이제 "서버 액세스 거부" 오류가 발생합니다. 클라이언트 서버(clientserver.co.local)에서 다음을 실행합니다.

[root@clientserver ~]# mount -t nfs -vvvv 172.18.4.97:/datalake/raw/org /datalake/org/raw/
mount.nfs: timeout set for Wed Dec 30 19:41:35 2020
mount.nfs: trying text-based options 'vers=4.1,addr=172.18.4.97,clientaddr=172.18.4.98'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'vers=4.0,addr=172.18.4.97,clientaddr=172.18.4.98'
mount.nfs: mount(2): Permission denied
mount.nfs: trying text-based options 'addr=172.18.4.97'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 172.18.4.97 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 172.18.4.97 prog 100005 vers 3 prot UDP port 20048
mount.nfs: mount(2): Permission denied
mount.nfs: access denied by server while mounting 172.18.4.97:/datalake/raw/org

위에 표시된 오류를 수신합니다. (다른 버전의 nfs를 모두 시도했지만 여전히 실패했습니다.) 어떤 보안 스타일을 사용해야 할지 잘 모르겠습니다(이전에 이것을 지정한 기억이 없습니다. SSSD를 사용하여 Windows AD 계정을 클라이언트 및 nfs 서버에 연결하므로 이것이 기본값이라고 가정합니다). 어쨌든 -o sec=sys-o sec=krb5옵션을 모두 사용해 보았습니다. 동일한 결과를 얻습니다.

tcmpdump설치 명령 중에 패킷 트래픽 모니터링을 실행했습니다(제안 사항에 따라) .여기), 그러나 로그를 해석하는 방법을 모릅니다(도움이 된다면 마지막 10줄과 같은 내용을 게시할 수 있음).

클라이언트의 호스팅된 nfsserver.co.local 서버에서 네트워크의 설치를 확인하면 다음이 표시됩니다.

[root@clientserver ~]# showmount -e
Export list for clientserver.co.local:
[root@clientserver ~]# showmount -e 172.18.4.97
Export list for 172.18.4.97:
/datalake/raw/org/HI_BRFSS               clientserver.co.local,otherclient.co.local
/datalake/raw/org                        clientserver.co.local,otherclient.co.local
/datalake/analytics/org                  clientserver.co.local,otherclient.co.local


[root@clientserver ~]# service nfs status
Redirecting to /bin/systemctl status nfs.service
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled; vendor preset: disabled)
   Active: active (exited) since Wed 2020-12-30 18:32:09 HST; 11min ago
  Process: 93274 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
  Process: 93271 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
  Process: 93266 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
  Process: 93307 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=0/SUCCESS)
  Process: 93290 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 93288 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 93290 (code=exited, status=0/SUCCESS)
    Tasks: 0
   CGroup: /system.slice/nfs-server.service

Dec 30 18:32:09 clientserver.co.local systemd[1]: Starting NFS server and services...
Dec 30 18:32:09 clientserver.co.local systemd[1]: Started NFS server and services.

그래서 모든 것이 제가 상상했던 것과 같습니다( showmount마운트하려는 nfs 폴더가 표시됩니다).

명령을 실행 한 후 mount스트림 파일에 표시되는 것은 /var/log/messages다음과 같은 메시지입니다.

Jan  4 18:37:12 clientserver gssproxy: gssproxy[2557]: (OID: { 1 2 840 113554 1 2 2 }) Unspecified GSS failure.  Minor code may provide more information, Client 'host/[email protected]' not found in Kerberos database

이것이 무엇을 의미하는지 잘 모르겠지만 gssproxy.conf 파일을 확인하면 다음과 같습니다.

[root@mclientserver ~]# cat /etc/gssproxy/gssproxy.conf 
[gssproxy]

과거에 (nfs 마운트가 여전히 작동했을 때) 이것과 상호 작용한 기억이 없기 때문에 이것이 무엇을 의미하는지 잘 모르겠습니다.

우리는 Windows AD 계정을 컴퓨터에 연결하기 위해 SSSD(설정하지 않고)를 사용하지만 이것이 여기서 관련된 것인지 아니면 단지 다른 것인지는 알 수 없습니다. 어쨌든 sssd.conf는 다음과 같습니다

[root@clientserver ~]# cat /etc/sssd/sssd.conf 

[sssd]
domains = co.local
config_file_version = 2
services = nss, pam

[domain/co.local]
ad_domain = co.local
ad_server = adserver.CO.local
ad_backup_server = adserverbackup.CO.local
krb5_realm = CO.LOCAL
realmd_tags = manages-system joined-with-samba 
cache_credentials = False
enumerate = true
id_provider = ad
krb5_store_password_if_offline = True
default_shell = /bin/bash
ldap_id_mapping = False
use_fully_qualified_names = False
override_homedir = /home/%u
access_provider = ad

하지만 그 외에는 명령 오류에서 본 것 외에는 로그에 많은 정보가 없는 것 같습니다...

[root@clientserver ~]# grep mount -rnw /var/log/messages* -e "nfs"
grep: mount: No such file or directory
/var/log/messages:2782:Jan  4 17:21:23 clientserver kernel: FS-Cache: Netfs 'nfs' registered for caching
/var/log/messages:2844:Jan  4 17:21:24 clientserver mount: mount.nfs: access denied by server while mounting nfsserver.co.local:/datalake/analytics/org
/var/log/messages:2845:Jan  4 17:21:24 clientserver mount: mount.nfs: access denied by server while mounting nfsserver.co.local:/datalake/raw/org
/var/log/messages-20201227:3590:Dec 23 17:46:04 clientserver kernel: FS-Cache: Netfs 'nfs' registered for caching
[root@clientserver ~]# 
[root@clientserver ~]# 
[root@clientserver ~]# 
[root@clientserver ~]# grep mount -rnw /var/log/messages* -e "mount"
grep: mount: No such file or directory
/var/log/messages:2380:Jan  4 17:20:55 clientserver kernel: XFS (dm-3): Ending clean mount
/var/log/messages:2530:Jan  4 17:21:07 clientserver kernel: XFS (sda1): Ending clean mount
/var/log/messages:2537:Jan  4 17:21:07 clientserver kernel: XFS (dm-5): Ending clean mount
/var/log/messages:2844:Jan  4 17:21:24 clientserver mount: mount.nfs: access denied by server while mounting nfsserver.co.local:/datalake/analytics/org
/var/log/messages:2845:Jan  4 17:21:24 clientserver mount: mount.nfs: access denied by server while mounting nfsserver.co.local:/datalake/raw/org
/var/log/messages:2846:Jan  4 17:21:24 clientserver systemd: datalake-org-analytics.mount mount process exited, code=exited status=32
/var/log/messages:2847:Jan  4 17:21:24 clientserver systemd: Failed to mount /datalake/org/analytics.
/var/log/messages:2850:Jan  4 17:21:24 clientserver systemd: Unit datalake-org-analytics.mount entered failed state.
/var/log/messages:2851:Jan  4 17:21:24 clientserver systemd: datalake-org-raw.mount mount process exited, code=exited status=32
/var/log/messages:2852:Jan  4 17:21:24 clientserver systemd: Failed to mount /datalake/org/raw.
/var/log/messages:2853:Jan  4 17:21:24 clientserver systemd: Unit datalake-org-raw.mount entered failed state.
/var/log/messages:3014:Jan  4 17:21:27 clientserver dracut: Executing: /usr/sbin/dracut --hostonly --hostonly-cmdline --hostonly-i18n -o "plymouth dash resume ifcfg" --mount "/dev/mapper/centos_mapr001-root /sysroot xfs defaults,x-systemd.device-timeout=0" --no-hostonly-default-device -f /boot/initramfs-3.10.0-862.6.3.el7.x86_64kdump.img 3.10.0-862.6.3.el7.x86_64
/var/log/messages-20201227:3669:Dec 23 17:47:35 clientserver systemd: mapr.mount mounting timed out. Stopping.
/var/log/messages-20201227:3823:Dec 23 17:47:37 clientserver systemd: Unit mapr.mount entered failed state.
[root@clientserver ~]#
[root@clientserver ~]#
[root@clientserver ~]#
[root@clientserver ~]# tail -n 15 /var/log/dmesg
[  148.561016] piix4_smbus 0000:00:01.3: SMBus Host Controller at 0x700, revision 0
[  148.643519] sd 0:0:0:0: Attached scsi generic sg0 type 0
[  148.643580] sd 0:0:1:0: Attached scsi generic sg1 type 0
[  148.643639] sd 0:0:2:0: Attached scsi generic sg2 type 0
[  148.643846] sd 0:0:3:0: Attached scsi generic sg3 type 0
[  148.643907] sd 0:0:4:0: Attached scsi generic sg4 type 0
[  148.643962] sd 0:0:5:0: Attached scsi generic sg5 type 0
[  148.644030] sr 1:0:0:0: Attached scsi generic sg6 type 5
[  148.718917] ppdev: user-space parallel port driver
[  148.723858] Adding 8900604k swap on /dev/mapper/centos_mapr001-swap.  Priority:-1 extents:1 across:8900604k FS
[  148.865301] XFS (sda1): Mounting V5 Filesystem
[  149.497874] XFS (sda1): Ending clean mount
[  150.110208] XFS (dm-5): Mounting V5 Filesystem
[  150.190558] XFS (dm-5): Ending clean mount
[  150.966314] type=1305 audit(1609816868.676:4): audit_pid=2500 old=0 auid=4294967295 ses=4294967295 subj=system_u:system_r:auditd_t:s0 res=1

ping클라이언트의 이름과 IP 주소를 통해 nfsserver 시스템에 액세스 할 수 있습니다 (nfsserver 시스템에서는 그 반대도 마찬가지입니다).

SE Linux 설정을 확인해보니...

[root@clientserver /]$ sestatus
SELinux status:                 enabled
SELinuxfs mount:                /sys/fs/selinux
SELinux root directory:         /etc/selinux
Loaded policy name:             targeted
Current mode:                   permissive
Mode from config file:          enforcing
Policy MLS status:              enabled
Policy deny_unknown status:     allowed
Max kernel policy version:      31

나는 이것을 설정하지 않았지만 (또는 실제로 SE Linux에 대한 많은 경험이 있습니다) "용서"는 이것이 방화벽 문제가되어서는 안된다고 생각하게 만듭니다.

포트 문제로 인해 이 문제가 발생할 수 있다고 들었습니다. 사용하다 rpcinfo보니

[root@clientserver ~]# rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  34584  status
    100024    1   tcp  53605  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  36667  nlockmgr
    100021    3   udp  36667  nlockmgr
    100021    4   udp  36667  nlockmgr
    100021    1   tcp  39608  nlockmgr
    100021    3   tcp  39608  nlockmgr
    100021    4   tcp  39608  nlockmgr

그러나 나는 이것이 정상적인지 알 수 있을 만큼 네트워킹에 대해 충분히 알지 못합니다.

nfsserver 서버를 보면 다음과 같습니다.

[root@nfsserver ~]# cat /etc/exports
/datalake/analytics/org         otherclient(rw,no_root_squash,sync) clientserver(rw,root_squash,sync)
/datalake/raw/org               otherclient(rw,no_root_squash,sync) clientserver(ro,root_squash,sync)
/datalake/raw/org/HI_BRFSS      otherclient(ro,no_root_squash,sync) clientserver(ro,root_squash,sync)
[root@nfsserver ~]# exportfs -rav
exporting otherclient.co.local:/datalake/raw/org/HI_BRFSS
exporting clientserver.co.local:/datalake/raw/org/HI_BRFSS
exporting otherclient.co.local:/datalake/raw/org
exporting clientserver.co.local:/datalake/raw/org
exporting otherclient.co.local:/datalake/analytics/org
exporting clientserver.co.local:/datalake/analytics/org


[root@nfsserver ~]# systemctl status nfs
● nfs-server.service - NFS server and services
   Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
   Active: active (exited) since Wed 2020-12-30 18:38:00 HST; 22min ago
  Process: 135417 ExecStopPost=/usr/sbin/exportfs -f (code=exited, status=0/SUCCESS)
  Process: 135414 ExecStopPost=/usr/sbin/exportfs -au (code=exited, status=0/SUCCESS)
  Process: 135412 ExecStop=/usr/sbin/rpc.nfsd 0 (code=exited, status=0/SUCCESS)
  Process: 135447 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl reload gssproxy ; fi (code=exited, status=
0/SUCCESS)
  Process: 135430 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
  Process: 135428 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
 Main PID: 135430 (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/nfs-server.service

Dec 30 18:38:00 nfsserver.co.local systemd[1]: Starting NFS server and services...
Dec 30 18:38:00 nfsserver.co.local systemd[1]: Started NFS server and services.

다시 말하지만 모든 것이 필요에 따라 구성된 것 같습니다. (특정 구성을 제안하는 몇 가지 답변을 보았지만 /etc/exports그대로 두는 것을 선호하며 이 구성은 지금까지 작동했습니다.) 그리고 nfsserver 파일의 DNS 이름을 IP로 변경 /etc/exports하고 실행해도 exportfs -rav상황은 바뀌지 않았습니다.

더 많은 경험을 가진 사람이 여기서 무엇이 잘못될 수 있는지 알고 있습니까? 이 문제를 개선할 수 있는 추가 디버깅 제안/정보(예: 누구든지 이 게시물에서 어떤 가능성에 대한 추가 조사가 필요한 내용을 볼 수 있습니까?)

답변1

NFS 서버에 시스템 드라이브 공간이 부족한 경우:

  1. mount.nfs: access denied by server while mounting고객에 대한 메시지를 받게 됩니다.
  2. nfs 서비스가 좋아 보이고 통과했습니다.systemctl status nfs-kernel-server
  3. 로그에 오류가 표시되지 않을 수 있습니다(단, 공간이 부족하여 로그에 명백한 오류가 있을 수 있음).

증상이 매우 유사하기 때문에 이 답변을 게시합니다(핑에 응답하고 정상으로 보이는 서버에 정상적인 NFS 서버 리소스를 마운트하려고 할 때 갑자기 설명할 수 없는 "액세스 거부" 오류 발생).

공간이 부족할 때 해결 방법은 로그, Docker 컨테이너 등 일반적인 모든 것입니다.

관련 정보