【共享服務】nfs常見問題處理


一、nfs服務端防火牆策略配置

1、問題描述

啟用nfs服務端防火牆之后,客戶端無法進行showmount及掛載操作

  • 服務端開啟防火牆
ufw allow 22
ufw enable
  • 客戶端showmount失敗
[root@node189 ~]# showmount -e 172.16.21.62
clnt_create: RPC: Port mapper failure - Timed out

2、原因分析

nfs服務端未開放相關服務組件訪問端口

  • 查看服務端rpc狀態信息,其中mountdnlockmgr 服務啟動端口不固定(可通過重啟rpcbindnfs-server服務前后對比打印信息)
root@node62:~# 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
    100005    1   udp  49828  mountd
    100005    1   tcp  48723  mountd
    100005    2   udp  39593  mountd
    100005    2   tcp  37875  mountd
    100005    3   udp  60110  mountd
    100005    3   tcp  45926  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049
    100227    3   tcp   2049
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049
    100227    3   udp   2049
    100021    1   udp  55554  nlockmgr
    100021    3   udp  55554  nlockmgr
    100021    4   udp  55554  nlockmgr
    100021    1   tcp  43039  nlockmgr
    100021    3   tcp  43039  nlockmgr
    100021    4   tcp  43039  nlockmgr
  • 確認nfs相關服務組件及端口占用如下
服務名稱 端口名稱 協議名稱 備注
nfs 2049 tcp/udp 端口固定
portmapper 111 tcp/udp 端口固定
mountd 20048 tcp/udp 端口不固定,需人為修改固定
nlockmgr 42315 tcp/udp 端口不固定,需人為修改固定

3、解決方法

3.1、更改相關服務為固定端口
  • 更改mountd 服務端口為20048
echo "mountd 20048/tcp" >> /etc/services
echo "mountd 20048/udp" >> /etc/services
  • 更改nlockmgr 服務端口為42315
echo "fs.nfs.nlm_udpport=42315" >> /etc/sysctl.conf
echo "fs.nfs.nlm_tcpport=42315" >> /etc/sysctl.conf
sysctl -p
3.2、nfs服務端防火牆開放相關服務固定端口

服務端防火牆開放20491112004842315 端口,此時客戶端可正常訪問掛載

ufw allow 2049/tcp
ufw allow 2049/udp
ufw allow 111/tcp
ufw allow 111/udp
ufw allow 20048/tcp
ufw allow 20048/udp
ufw allow 42315/tcp
ufw allow 42315/udp
  • 此時客戶端可正常showmount及掛載訪問
[root@node189 ~]# showmount -e 172.16.21.62
clnt_create: RPC: Port mapper failure - Timed out

[root@node189 ~]# showmount -e 172.16.21.62
Export list for 172.16.21.62:
/cephnfs/cephfs/nfsdir *
/cephnfs/cephfs        127.0.0
[root@node189 ~]# mount -t nfs 172.16.21.62:/cephnfs/cephfs/nfsdir /mnt

二、漏洞掃描工具檢測nfs服務端存在漏洞,可以對nfs服務端進行showmount -e操作

1、問題描述:

客戶使用漏洞掃描工具,檢測到nfs服務端存在被攻擊風險,相關信息如下

  • 詳細描述:可以對目標主機進行"showmount -e"操作,此操作將泄漏目標主機大量敏感信息,比如目錄結構。更糟糕的是,如果訪問控制不嚴的話,攻擊者可能直接訪問到目標主機上的數據
  • 修補建議:限制可以獲取到NFS輸出列表的IP和用戶。
    除非絕對必要,請關閉NFS服務,MOUNTD

2、解決方法:

默認情況下,nfs服務端未做任何限制,任意主機都可以對nfs服務端進行"showmount -e"操作。
一個IP請求連入,linux的檢查策略是先看/etc/hosts.allow中是否允許,如果允許直接放行;如果沒有,則再看/etc/hosts.deny中是否禁止,如果禁止那么就禁止連入。
兩個配置文件的關系為:/etc/hosts.allow 的設定優先於/etc/hosts.deny
service_name 必須與/etc/rc.d/init.d/* 里面的程序名稱要相同

  • 1、修改/etc/hosts.allow配置文件,添加允許訪問的服務及客戶端IP地址
    注:當存在多個IP地址時可使用, 分割開,如mountd:172.16.21.111,172.16.21.245
 [root@node117 ~]# cat /etc/hosts.allow 
 mountd:172.16.21.111
 rpcbind:172.16.21.111:allow
  • 2、修改/etc/hosts.deny配置文件,默認不允許任何客戶端訪問mountd和rpcbind服務
[root@node117 ~]# cat /etc/hosts.deny
mountd:ALL
rpcbind:ALL:deny
  • 3、重啟nfs服務
[root@node117 ~]# systemctl restart nfs

在白名單的客戶端可以正常進行"showmount -e"操作,而不在白名單的客戶端禁止訪問

[root@node111 ~]# showmount -e 172.16.21.117
Export list for 172.16.21.117:
/cephnfs/cephfs/ftp 172.16.21.111
.
[root@node112 ~]# showmount -e 172.16.21.117
clnt_create: RPC: Port mapper failure - Authentication error

三、客戶端掛載nfs失敗,提示"mount.nfs:access denied by server while mounting"

1、問題描述

客戶端掛載nfs失敗,提示"mount.nfs:access denied by server while mounting"

mount -t nfs x.x.x.x:/share /mnt
mount.nfs: access denied by server while mounting x.x.x.x:/share

2、原因分析

客戶端掛載nfs失敗是一個比較常見的問題,通常有很多原因會導致出現這樣的結果
掛載的時候可以指定-vvvv參數查看更多具體錯誤信息

mount -t nfs -vvvv server.example.com:/share /mnt

3、解決方法

此處列舉一些常見可能導致掛載失敗的原因,以及對應解決方法

3.1、客戶端nfs掛載協議與服務端不一致
  • 問題原因
    服務端只支持nfs v3協議連接,而客戶端默認掛載通常使用nfs v4協議,協議不匹配導致掛載失敗
  • 解決辦法
    通常遇到這種問題,客戶端掛載指定-o nfsvers=3即可
mount -t nfs -o nfsvers=3 x.x.x.x:/share /mnt
3.2、nfs無法提供鎖服務
  • 問題原因
    問題錯誤打印信息如下,nfs默認使用遠程鎖(即local_lock=none),但是提供遠程鎖的rpc.statd服務未啟動
mount.nfs:rpc.statd is not running but is required for remote locking.
mount.nfs:Either use '-o nolock' to keep locks local,or start statd.
  • 解決方法
    有以下兩種解決方法:
    1、使用遠程鎖:啟動服務端rpc.statd服務,使用這個服務提供遠程鎖
    2、使用本地鎖:客戶端掛載指定-o nolock,查看此時客戶端掛載參數使用本地鎖(local_lock=all)
mount -t nfs -o nolock x.x.x.x:/share /mnt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM