• NFS


    NFS概念

    NFS:Network File System 网络文件系统,基于内核的文件系统。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RPC(Remote Procedure Call Protocol远程过程调用)实现。RPC采用C/S模式。客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进,一般应用于企业内网而不是互联网。
    另外,NFS的安全性基于IP认证,很容易伪装可性的IP来访问NFS,所以总体的安全性不高。
    

    NFS拓扑图

    NFS特点

    rpm -q nfs-utils
    /usr/lib/systemd/scripts/nfs-utils_env.sh
    /usr/lib/systemd/system-generators/nfs-server-generator
    /usr/lib/systemd/system-generators/rpc-pipefs-generator
    /usr/lib/systemd/system/auth-rpcgss-module.service
    /usr/lib/systemd/system/nfs-blkmap.service
    /usr/lib/systemd/system/nfs-client.target
    /usr/lib/systemd/system/nfs-config.service
    /usr/lib/systemd/system/nfs-idmap.service
    /usr/lib/systemd/system/nfs-idmapd.service
    /usr/lib/systemd/system/nfs-lock.service
    /usr/lib/systemd/system/nfs-mountd.service
    /usr/lib/systemd/system/nfs-secure.service
    /usr/lib/systemd/system/nfs-server.service
    /usr/lib/systemd/system/nfs-utils.service
    /usr/lib/systemd/system/nfs.service
    /usr/lib/systemd/system/nfslock.service
    /usr/lib/systemd/system/proc-fs-nfsd.mount
    /usr/lib/systemd/system/rpc-gssd.service
    /usr/lib/systemd/system/rpc-statd-notify.service
    /usr/lib/systemd/system/rpc-statd.service
    /usr/lib/systemd/system/rpc_pipefs.target
    /usr/lib/systemd/system/rpcgssd.service
    /usr/lib/systemd/system/rpcidmapd.service
    /usr/lib/systemd/system/var-lib-nfs-rpc_pipefs.mount
    
    locate nfs.ko
    1. 相对复杂的服务,如上述的列表,依赖众多的服务
    2. 对外提供的端口不固定,用rpcinfo -p查看
    3. 通过rpcbind来管理NFS的临时端口,rpcbind使用固定的端口111
    4. Centos7启动systemctl start nfs-server      CentOS6:service nfs start,另外,在CentOS6,启动nfs之前,必须确保rpcbind启动。
    

    NFS配置

    /etc/exports主配置文件
        rpm -qf /etc/exports
        setup-2.8.71-9.el7.noarch(exports并不来自nfs-utils安装包,而是来自更基础的setup安装包)
    /etc/exportd.d/*.exports 子配置文件
    systemctl enable nfs-server
    systemctl start nfs-server
    format:共享文件夹 who(permission)
    exportfs -r (重读配置文件)
    exportfs -v (查询已共享的资源)
    
    格式:
    /dir 主机1(opt1,opt2) 主机2(opt1,opt2)...
    主机格式:
    1. 单个主机:ipv4,ipv6,FQDN
    2. IP networks:两种掩码格式均支持 172.18.0.0/255.255.0.0 or 172.18.0.0/16
    3. wildcards:主机名通配,例如*.magedu.com,IP不可以,需要配合DNS解析
    4. anonymous:表示使用*通配所有客户端
    每个条目指定目录导出到的哪些主机,及相关的权限和选项:
    1. 默认选项:(ro,sync,root_squash,no_all_squash)
    2. ro,rw 只读和读写
    3. async 异步,数据变化后不立即写磁盘,性能高
    4. sync(1.0.0后为默认)同步,数据在请求时立即写入共享
    5. no_all_squash (默认)保留共享文件的UID和GID
    6. all_squash 所有远程用户(包括root)都变成nfsnobody
    7. root_squash (默认)远程root映射为nfsnobody,UID为65534,早期版本是4294967294 (nfsnobody)
    8. no_root_squash 远程root映射成root用户,如果和all_squash一起配置,all_squash起使用
    9. anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用
    

    NFS客户端

    是内核的功能,所有客户端不需要安装第三方的RPM,可以用showmount -e IP(NFS server)
    [root@web1 ~]# showmount -e 172.20.42.201
        Export list for 172.20.42.201:
        /data/wordpress 172.20.0.0/16
    mkdir /mnt/nfs
    mount 172.20.42.201:/data/wordpress /mnt/nfs
    mount(检查状态)
    172.20.42.201:/data/wordpress on /mnt/nfs type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=172.20.42.203,local_lock=none,addr=172.20.42.201)
    可以指定挂载的版本:
     mount -o vers=3 172.20.42.201:/data/wordpress /mnt/nfs
    注意: nfs客户端访问服务器端时: root映射为nfsnobody用户(root_squash),普通用户映射为id相同的用户(no_all_squash)
    
    NFS相关的挂载选项:
        fg(默认)前台挂载,bg后台挂载
        hard(默认)持续请求,soft 非持续请求
        intr 和hard配合,请求可中断
        rsize和wsize 一次读和写数据最大字节数,rsize=32768
        _netdev 无网络不挂载
        例子:mount -o rw,nosuid,fg,hard,intr 172.16.0.1:/testdir /mnt/nfs/
    实验:
        服务器端,保持/data/nfs 755,在客户端的/mnt/nfs下root用户无法创建文件;setfacl -m u:nfsnobody:rwx /data/liang/在服务器端,在客户端用root可以在/mnt/nfs下创建文件
        可以配置
        /data/liang     *(rw,no_root_squash),应用于管理员管理多台NFS服务器。
    

    NFS伪根

    服务器配置

    mkdir -p /app/nfsdir1
    mkdir -p /data/nfsdir2
    把如上的两个文件夹用伪根共享
    mkdir -p /nfsroot/{dir1,dir2}
    chown nfsnobody /nfsroot/{dir1,dir2}
    vim /etc/fstab
        
        /data/nfsdir2   /nfsroot/dir2   none    bind    0 0
        /app/nfsdir1    /nfsroot/dir1   none    bind    0 0
    vim /etc/exports
        /nfsroot *(fsid=0,rw,crossmnt)
        /nfsroot/dir1   *(ro)
        /nfsroot/dir2   *(rw)
    

    客户端

    mount 172.20.42.201:/nfsroot /mnt
    [root@web1 mnt]# ll /mnt/
        total 0
        drwxr-xr-x 2 root root 21 Jun 26 04:57 dir1
        drwxr-xr-x 2 root root 22 Jun 26 04:57 dir2
    cd dir1
    echo hello > hello.txt
    

    自动挂载

    rpm -ql autofs
    

    挂载规则

    相对路径

    挂载点分为两部分:/dir/subdir分为/dir和/subdir两部分
    auto.master配置文件定义父目录的规则:
        /dir     autofs子配置文件路径
    autofs子配置文件:
        /subdir mountdev
    

    绝对路径

    auto.master配置文件只定义如下:
        /-    子配置文件
    autofs子配置文件
        /dir/subdir mountdev
    

    NFS server

    mkdir /data/nfsdir
    vim /etc/exports
        /data/nfsdir    *(rw)
    

    NSF client

    showmount -e 172.20.42.201
    cd /net/
    cd 172.20.42.201
        vim /etc/auto.master
        /d1/d2/d3     /etc/test.autofs
    vim /etc/test.autofs
        nfs     -fstype=nfs,vers=3,rw   172.20.42.201:/data/nfsdir
    systemctl restart autofs
    cd /d1/d2/d3/nfs (注意,/d1/d2/d3不需要手动创建,访问即生成)
    

    例子

    家目录自动挂载NFS,同一个用户在不同的机器上登录,看到的内容是一致的(相对路径法)

    1. 三台server:一台NFS,两台普通服务器,同时两台普通服务器上有相同的用户nfsuser1, nfsuser2
    2. NFS服务器
        useradd -d /data/nfs2 -u 2101 nfs2
        useradd -d /data/nfs1 -u 2100 nfs1
        vim /etc/exports
        /data   *(rw)
        exportfs -v
    3. 两台普通服务器执行相同的操作
         useradd -u 2100 nfsuser1
        useradd -u 2101 nfsuser2
        mount 172.20.42.201:/data/nfs1 /home/nfsuser1/
        mount 172.20.42.201:/data/nfs2 /home/nfsuser2/
        su - nfsuser1
        touch nfs1 
        在NFS服务器上查看,ll /data/nfs1 nfs1
        自动挂载:
        vim /etc/auto.master
            /home           /etc/test.autofs (/home下的文件夹全部交给autofs来控制)
        vim /etc/test.autofs
            nfsuser1        -fstype=nfs,vers=3,rw   172.20.42.201:/data/nfs1
            nfsuser2        -fstype=nfs,vers=3,rw   172.20.42.201:/data/nfs2
        systemctl restart autofs 
        
        总结:上述方法会导致别的普通用户登录失败,如下:
        ```
        [root@centos7 ~]# su - vmx
        Last login: Tue May 22 16:51:34 CST 2018 from ::ffff:192.168.30.145 on pts/5
        su: warning: cannot change directory to /home/vmx: No such file or directory
        解决的方法用绝对路径法。
    

    家目录自动挂载NFS,同一个用户在不同的机器上登录,看到的内容是一致的(绝对路径)

        1. NFS服务器保持上述的配置        
        2. 普通服务器上
            vim /etc/auto.master
            /-              /etc/test.autofs
            vim /etc/test.autofs
                /home/nfsuser1  -fstype=nfs,vers=3,rw   172.20.42.201:/data/nfs1
                /home/nfsuser2  -fstype=nfs,vers=3,rw   172.20.42.201:/data/nfs2
    

    特殊用法(如果NFS共享的文件夹名字和用户名正好相同,只适用于相对路径的情形)

        1. NFS服务器上
            useradd -d /data/nfsuser3 -u 2102 nfs3
            useradd -d /data/nfsuser4 -u 2103 nfs4
            useradd -d /data/nfs** -u 210* nfs**
        2. 普通服务器上
            useradd -u 2102 nfsuser3
            useradd -u 2103 nfsuser4
            vim /etc/test.autofs
            *       -fstype=nfs,vers=3,rw   172.20.42.201:/data/&
    

    /misc和/net/ip的自动挂载解释

    /misc能自动挂载到CDROM

    /etc/auto.master: /misc   /etc/auto.misc
    /etc/auto.misc: cd              -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
    

    /net目录能自动访问NFS共享的IP

    /etc/auto.master: /net    -hosts
    

    总结:在三种网络共享VSFTP,NFS, SAMBA中,NFS和SAMBA属于文件系统级别, 可以通过挂载的方法实现服务器和客户机之间的网络资源共享,VSFTP是应用层的,需要安装相关的服务器和客户端软件实现。

  • 相关阅读:
    python学习
    当时的月亮 王菲
    谈谈写程序与学英语(转载)
    excel 列索引(数字)转列名
    爆款PHP面试题
    关于PDO取得结果集的数据类型为string的问题
    分享几款常用的API/文档浏览器
    php写错命名空间 导致catch不到异常
    iOS图片上传后被旋转的问题
    vi写完文件保存时才发现是readonly😂
  • 原文地址:https://www.cnblogs.com/liangjindong/p/9229752.html
Copyright © 2020-2023  润新知