1. 程式人生 > >NFS網絡文件系統

NFS網絡文件系統

Centos 7 NFS網絡文件系統 NFS偽根實現 Linux實現用戶家目錄漫遊

實驗環境:VMware Workstation Pro 14(試用版) 系統平臺: CentOS Linux release 7.4.1708 (Core) 內核 3.10.0-693.el7.x86_64

NFS配置介紹

軟件包

nfs-utils

端口

2049(nfsd), 其它端口由rpcbind(111)分配

工作過程
NFS啟動時,會將所使用的端口向rpcbind註冊,當有客戶端訪問的時候,客戶端首先通訊的是rpcbind(111),進而rpcbind會告知NFS所使用的端口,客戶端就可以通過端口訪問NFS服務了。

配置文件:

/etc/exports
/etc/exports.d/*.exports

依賴包

rpcbind(必須)
tcp_wrappers

日誌

/var/lib/nfs/

NFS服務主要進程

rpc.nfsd    最主要的NFS進程,管理客戶端是否可登錄
rpc.mountd  掛載和卸載NFS文件系統,包括權限管理
rpc.lockd   非必要,管理文件鎖,避免同時寫出錯
rpc.statd   非必要,檢查文件一致性,可修復文件

CentOS 7不支持同一目錄同時用nfs和samba共享,因為使用鎖機制不同

啟動NFS

# systemctl start nfs
# systemctl start nfs-server

在Centos 6上,rpcbind必須先啟動,否則NFS無法啟動
在Centos 7上,NFS服務啟動時,會把依賴的服務rpcbind一並啟動
rpcbind.service可以被rpcbind.socket 激活,rpcbind.socket獨立工作

報以下錯誤的時候
clnt_create: RPC: Program not registered > 重啟NFS服務重新註冊到rpcbind
clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused) > rpcbind服務未啟動,重啟rpcbing和nfs服務,註意順序

查看NFS開啟的端口

# rpcinfo -p

如果需要在外部使用NFS服務,需要調整防火墻策略

必須先把NFS配置使用固定端口
vim /etc/sysconfig/nfs

RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
STATD_PORT=662
STATD_OUTGOING_PORT=2020

防火墻除開放上述端口,還需開放TCP和UDP的 111 和 2049 共4個端口

配置NFS

語法格式

目錄路徑 允許訪問的IP地址或FQDN列表(選項1,選項2)

/app/nfs *              > * 代表所有
/app/nfs 192.168.5.10(ro) 192.168.5.13(rw)  > 列表以空格分隔
/app/nfs 192.168.5.0/24(rw)
/app/nfs *.magedu.com

默認選項:(ro,sync,root_squash,no_all_squash)
? ro,rw 只讀和讀寫
? async 異步,數據變化後不立即寫磁盤,性能高
? sync(1.0.0後為默認)同步,數據在請求時立即寫入共享
? no_all_squash (默認)保留共享文件的UID和GID
? all_squash 所有遠程用戶(包括root)都變成nfsnobody
? root_squash (默認)遠程root映射為nfsnobody,UID為65534,早期版本是4294967294 (nfsnobody)
? no_root_squash 遠程root映射成root用戶
? anonuid和anongid 指明匿名用戶映射為特定用戶UID和組GID,而非nfsnobody,可配合all_squash使用

生效與查看共享資源

# exportfs -r
exportfs: No options for /app/nfs *: suggest *(sync) to avoid warning
# exportfs -v
/app/nfs        <world>(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)

通過遠程主機查看
# showmount -e 192.168.5.108
Export list for 192.168.5.108:
/app/nfs *

遠程主機掛載NFS共享

Linux主機

# mount -t nfs 192.168.5.108:/app/nfs /tmp/nfs
# mount 192.168.5.108:/app/nfs /tmp/nfs
#df
Filesystem           1K-blocks    Used Available Use% Mounted on
192.168.5.108:/app/nfs  8913920 1422112   7491808  16% /tmp/nfs

# mount
192.168.5.108:/app/nfs on /tmp/nfs type nfs (rw,vers=4,addr=192.168.5.108,clientaddr=192.168.5.107)

指定NFS版本號掛載
# mount -o vers=3 192.168.5.108:/app/nfs /tmp/nfs
192.168.5.108:/app/nfs on /tmp/nfs type nfs (rw,vers=3,addr=192.168.5.108)

永久掛載
# vim /etc/fstab
192.168.5.108:/app/nfs /tmp/nfs nfs vers=3 0 0
192.168.5.108:/app/nfs /tmp/nfs nfs defaults 0 0

Wdindows下掛載

c:\>mount 192.168.5.108:/app/nfs Z:
Z: 現已成功連接到 192.168.5.108:/app/nfs

命令已成功完成。

NFS權限情況

1.NFS共享受文件系統權限影響
2.受下以選項影響
root_squash (默認)遠程root映射為nfsnobody,UID為65534,早期版本是4294967294 (nfsnobody)
no_root_squash 遠程root映射成root用戶
anonuid和anongid

NFS工具


rpcinfo
rpcinfo -p hostname
rpcinfo –s hostname 查看RPC註冊程序

exportfs
–v 查看本機所有NFS共享
–r 重讀配置文件,並共享目錄
–a 輸出本機所有共享
–au 停止本機所有共享

showmount -e hostname

mount.nfs 掛載工具

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/

實現NFS的偽根

/app *(fsid=0,rw,crossmnt)       > 指明NFS根的路徑,(fsid=0,crossmn)這2個選項需要添加
/app/nfs *(rw)
/app/home/hunk *(rw)

重新加載配置
#exportfs -r
查看
#exportfs -v
/app            <world>(rw,sync,wdelay,hide,crossmnt,no_subtree_check,fsid=0,sec=sys,secure,root_squash,no_all_squash)
/app/nfs        <world>(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
/app/home/hunk  <world>(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)

遠程主機掛載NFS偽根


# mount 192.168.5.108:/ /tmp/ > 方法跟之前的是一樣的,只是把遠程NFS的掛載目錄變為/

#tree /tmp
/tmp
├── home
│ └── hunk
│     └── hunk
└──nfs
    ├── aaa.txt
    └── nfs1.txt

NFS網絡文件系統