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是應用層的,須要安裝相關的服務器和客戶端軟件實現。node

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息