zoukankan      html  css  js  c++  java
  • 【共享服务】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
  • 相关阅读:
    使用pymysql模块进行封装,自动化不可或缺的数据库校验
    使用paramiko模块进行封装,远程操作linux主机
    提高开发效率的 Eclipse 实用操作
    遍历Map的四种方法
    key可以重复的Map集合:IdentityHashMap
    Java根据条件删除Map中元素
    用POI读取具有任意合并单元的excel数据
    【转载】说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
    面向对象的基本原则
    forward和redirect的区别
  • 原文地址:https://www.cnblogs.com/luxf0/p/15544783.html
Copyright © 2011-2022 走看看