• linux上nfs挂载


    环境准备

    NFS服务端 CentOS7 192.168.1.11
    NFS客户端 CentOS7 192.168.1.12

    安装NFS与配置

    NFS的常用目录:

    /etc/exports        #NFS服务的主要配置文件
    /usr/sbin/exportfs  #NFS服务的管理命令
    /usr/sbin/showmount #客户端的查看命令
    /var/lib/nfs/etab   #记录NFS分享出来的目录的完整权限设定值
    /var/lib/nfs/xtab   #记录曾经登录过的客户端信息

    服务端

    #CentOS系统服务端
    yum -y install nfs-utils
    yum -y install rpcbind 

    将服务加入开机自启动,并启动服务:

    systemctl enable rpcbind nfs-server
    systemctl start rpcbind nfs-server

    查看nfs服务向rpc注册的端口信息(当前nfs-server未启动,所有没有注册端口):

    [root@localhost ~]# 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

    如果此时启动nfs,可以发现nfs随机注册的端口如下(对于此种情况下,如果未开启防火墙,随机端口是没有问题的,一旦开启就需要将端口固定下来了):

    [root@localhost ~]# 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  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  37045  nlockmgr
    100021    3   udp  37045  nlockmgr
    100021    4   udp  37045  nlockmgr
    100021    1   tcp  39375  nlockmgr
    100021    3   tcp  39375  nlockmgr
    100021    4   tcp  39375  nlockmgr

    防火墙配置

    NFS的防火墙很难设定规则,除了固定的nfs2049、portmapper111之外, 还有很多不固定的端口是由rpc.mountd, rpc.rquotad等服务所开启的。因此我们需要在/etc/sysconfig/nfs指定特定的端口,这样每次启动nfs时,相关服务启动的端口就会固定,如此即可设置防护墙!

    固定nfs服务端口

    固定端口nfs 2049、portmapper 111,另外3个服务端口可设置为mountd 892、rpc.statd 662、 nlockmgr 32803、32769

    配置:
    1.修改/etc/sysconfig/nfs文件,将下列内容的注释去掉,如果没有则添加:

    # TCP port rpc.lockd should listen on.
    LOCKD_TCPPORT=32803
    # UDP port rpc.lockd should listen on.
    LOCKD_UDPPORT=32769
    
    # Port rpc.mountd should listen on.
    MOUNTD_PORT=892
    
    # Port rpc.statd should listen on.
    STATD_PORT=662
    # Outgoing port statd should used. The default is port
    # is random
    STATD_OUTGOING_PORT=2020
    

    端口配置完成后查看(注意重启nfs与服务器):

    [root@localhost ~]# rpcinfo -p

    CentOS7下配置

    编辑文件 /etc/firewalld/zones/public.xml:

    #vim /etc/firewalld/zones/public.xml
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
      <short>Public</short>
      <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
      <service name="ssh"/>
      <service name="http"/> 
      <service name="https"/> 
      <port protocol="tcp" port="8080"/>
      <port protocol="tcp" port="22"/>
      <port protocol="tcp" port="111"/>
      <port protocol="tcp" port="662"/>
      <port protocol="tcp" port="892"/>
      <port protocol="tcp" port="2049"/>
      <port protocol="tcp" port="32803"/>
      <port protocol="udp" port="111"/>
      <port protocol="udp" port="662"/>
      <port protocol="udp" port="892"/>
      <port protocol="udp" port="2049"/>
      <port protocol="udp" port="32769"/>
    </zone>

    注意重启防火墙

    创建共享目录

    创建服务端共享目录,例如:

    mkdir /nfs

    NFS共享目录文件配置

    /etc/exports文件内容:

    #vi /etc/exports
    /nfs     192.168.1.76(rw,sync,secure,no_root_squash,no_all_squash)

    以上配置分为三个部分:

    第一部分就是本地要共享出去的目录。
    第二部分为允许访问的主机(可以是一个IP,一个IP段如192.168.0.0/24、192.168.0.0/255.255.255.0,指定域名的主机 www.example.com ,指定域中的所有主机 .example.com ,所有主机)。
    第三部分小括号里面的,为一些权限选项。权限说明:

    rw :读写;
    ro :只读;
    sync :同步模式,内存中数据时时写入磁盘
    async :不同步,把内存中数据定期写入磁盘中
    secure :nfs通过1024以下的安全TCP/IP端口发送
    insecure :nfs通过1024以上的端口发送
    no_root_squash:NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,
                也拥有root权限。 显然开启这项是不安全的
    root_squash:当客户端登陆NFS的身份为root用户时,将客户端的root用户及所属组都映射为匿名用户
                或用户组(默认设置), 通常使用nobody或nfsnobody身份
    subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)。
    no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
    no_all_squash :无论客户端登陆NFS的身份为何,都将映射为root用户(默认设置)
    all_squash :不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限;
    anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定
    anongid:匿名用户的GID值
    

    配置完成后,重新加载nfs配置(exportfs -rv)或重启nfs服务。

    exportfs [-aruv]
    参数说明:
    -a  全部挂载(或卸载)/etc/exports文件内的设定
    -r  重新挂载/etc/exports中的设置,此外同步更新/etc/exports及/var/lib/nfs/xtab中的内容
    -u  卸载某一目录
    -v  在export时将共享的目录显示在屏幕上
    

    例如:

    [root@localhost /]# exportfs -rv
    exporting 192.168.1.12:/nfs

    客户端

    #CentOS系统客户端
    yum -y install nfs-utils

    挂载NFS共享目录

    1、查看showmount -e IP来查看NFS共享状态:

    [root@localhost /]# showmount -e 192.168.1.11
    Export list for 192.168.1.11:
    /data 192.168.1.12
    

    2、挂载NFS共享目录

    1)创建服务端共享目录,例如:

    mkdir /test
    

    2)挂载目录

    #临时挂载,即时生效
    mount -t nfs -o nfsvers=3 192.168.1.11:/nfs /test
    
    #配置永久挂载nfs文件系统,保存后重启服务器即可生效
    $ vim /etc/fstab
    $ 192.168.1.11:/data /test nfs defaults,nfsvers=3 0 0  
    

    客户端执行nfsstat -m命令,查看当前所使用的nfs版本:

    [root@localhost ~]# nfsstat -m
    /data from 192.168.1.11:/data
     Flags:    rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,
     proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=192.168.1.60,mountvers=3,
     mountport=892,mountproto=udp,local_lock=none,addr=192.168.1.11
    

    3)查看挂载是否成功:

    [root@localhost /]# df -h
    Filesystem               Size  Used Avail Use% Mounted on
    devtmpfs                 994M     0  964M   0% /dev
    tmpfs                   100M  8.4M  962M   1% /run
    /dev/mapper/centos-root  6.7G  3.5G  2.2G  53% /
    /dev/sda1                497M  118M  350M  24% /boot
    192.168.1.11:/nfs       6.2G  4.5G  1.2G  72% /test

    常用命令

    nfsstat

    查看NFS的运行状态,对于调整NFS的运行有很大帮助:

    nfsstat -s #查看服务端的情况
    nfsstat -c #查看客户端的情况
    

    exportfs

    启动了NFS之后又修改了/etc/exports,使用exportfs命令来使改动立刻生效

    rpcinfo

    查看rpc执行信息,可以用于检测rpc运行情况的工具

    实例

    实例一

    服务端NFS配置:

    #vi /etc/exports
    /nfs  192.168.1.12(rw,sync,secure,no_root_squash,no_all_squash)
    

    客户端创建文件:touch a,客户端显示如下:

    [root@localhost test]# touch a
    [root@localhost test]# ls -al 
    total 4
    drwxr-xr-x.  2 root root   15 Feb 24 20:52 .
    dr-xr-xr-x. 19 root root 4096 Feb 24 20:51 ..
    -rw-r--r--.  1 root root    0 Feb 24 20:52 a
    

    服务端”/data”显示如下:

    [root@localhost /]# ls -al /data
    total 0
    drwxr-xr-x.  2 root root  15 Feb 24 20:52 .
    dr-xr-xr-x. 18 root root 236 Feb 19 00:43 ..
    -rw-r--r--.  1 root root   0 Feb 24 20:52 a

    实例二

    服务端NFS配置:

    #vi /etc/exports
    /data  192.168.1.12(rw,sync,secure,root_squash)
    

    此时服务端”/nfs”的权限:

    [root@localhost /]# ls -al | grep nfs
    drwxr-xr-x.   2 root root   15 Feb 24 20:52 nfs   
    

    客户端创建文件:touch b,客户端显示如下:

    [root@localhost test]# touch b
    touch: cannot touch 'b': Permission denied
    

    此时客户端是不能创建,主要是因”/nfs”的权限:所在组group和其他用户other的权限不能写,需要修改权限:

    [root@localhost /]# chmod go+w /nfs
    [root@localhost /]# ls -al | grep nfs
    drwxrwxrwx.   2 root root   15 Feb 24 20:52 nfs
    

    客户端再次创建文件:touch b,客户端显示如下:

    [root@localhost test]# touch b
    [root@localhost test]# ls -al 
    total 4
    drwxrwxrwx.  2 root      root        24 Feb 24 21:03 .
    dr-xr-xr-x. 19 root      root      4096 Feb 24 20:51 ..
    -rw-r--r--.  1 root      root         0 Feb 24 20:52 a
    -rw-r--r--.  1 nfsnobody nfsnobody    0 Feb 24 21:03 b
    

    服务端”/nfs”显示如下:

    [root@bogon /]# ls -al /nfs
    total 0
    drwxrwxrwx.  2 root      root       24 Feb 24 21:03 .
    dr-xr-xr-x. 18 root      root      236 Feb 19 00:43 ..
    -rw-r--r--.  1 root      root        0 Feb 24 20:52 a
    -rw-r--r--.  1 nfsnobody nfsnobody   0 Feb 24 21:03 b

    实例三

    服务端NFS配置:

    创建group和user 
    # groupadd -g 1000 jason
    # useradd -u 1000 -g jason -M -s /bin/bash jason
    设置共享目录权限
    setfacl -m u:jason:rwx /nfs
    
    #vi /etc/exports
    /data  192.168.1.12(rw,sync,secure,all_squash,,anonuid=1000,anongid=1000))
    

    此时服务端”/nfs”的权限:

    [root@localhost /]# ls -al | grep nfs
    drwxr-xr-x.   2 root root   15 Feb 25 12:41 data
    [root@localhost /]# getfacl /nfs
    getfacl: Removing leading '/' from absolute path names
    # file: nfs
    # owner: root
    # group: root
    user::rwx
    group::r-x
    other::r-x
    
    [root@localhost /]# setfacl -m u:jason:rwx  /nfs
    [root@localhost /]# getfacl /data
    getfacl: Removing leading '/' from absolute path names
    # file: nfs
    # owner: root
    # group: root
    user::rwx
    user:jason:rwx #多出来一个用户jason的权限rwx
    group::r-x
    mask::rwx
    other::r-x
    

    备注: ACL(Access Control List),主要的目的是在提供传统的 owner,group,others 的 read,write,execute 权限之外的细部权限配置
    1)、setfacl可以更精确的控制权限的分配
    2)、getfacl取得某个文件/目录的 ACL 配置项目

    客户端创建文件:touch a,客户端显示如下:

    [root@localhost test]# touch a
    [root@localhost test]# ls -al
    total 4
    drwxrwxr-x.  2 root  root    15 Feb 25 12:39 .
    dr-xr-xr-x. 19 root  root  4096 Feb 24 20:51 ..
    #因客户端也存在uid和gid为1000的jason,所以用户和组都显示为jason,否则显示1000
    -rw-r--r--.  1 jason jason    0 Feb 25 12:39 a 
    

    服务端”/nfs”显示如下:

    [root@localhost nfs]# ls -al
    total 0
    drwxrwxr-x+  2 root  root   15 Feb 25 12:41 .
    dr-xr-xr-x. 18 root  root  236 Feb 19 00:43 ..
    -rw-r--r--.  1 jason jason   0 Feb 25 12:41 a     
     
     
     
     
  • 相关阅读:
    C# 动态添加用户控件
    临时记载C#中给DataGrid添加甘特图效果
    xp去掉快捷方式上的箭头
    wpf DataGrid的操作
    一路向前的算法
    WPF 解决WebBrowser控件汉字出现乱码的一种方案
    在CentOS 7 上安装 WordExpress
    创建Chrome插件
    开始PHP和JAVA
    failedtoloadcbsonextension
  • 原文地址:https://www.cnblogs.com/james-roger/p/13494585.html
Copyright © 2020-2023  润新知