1.NFS服務
? NFS:Network File System 網絡文件系統,基于內核的文
件系統。Sun公司開發,通過使用NFS,用戶和程序可以像訪
問本地文件一樣訪問遠端系統上的文件,基于RPC(Remote
Procedure Call Protocol遠程過程調用)實現
? RPC采用C/S模式。客戶機請求程序調用進程發送一個有進程參數的調用信息到服務進程,然后等待應答信息。在服務器端,進程保持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器獲得進程參數,計算結果,發送答復信息,然后等待下一個調用信息,最后,客戶端調用進程接收答復信息,獲得進程結果,然后調用執行繼續進行。
? NFS優勢:節省本地存儲空間,將常用的數據如:home目錄,存放在一臺NFS服務器上且可以通過網絡訪問,那么本地終端將可以減少自身存儲空間的使用
2.NFS各個版本的對比
3.NFS服務介紹
? 軟件包:nfs-utils
? Kernel支持:nfs.ko
? 端口:2049(nfsd), 其它端口由portmap(111)分配
? 配置文件:/etc/exports,/etc/exports.d/*.exports
CentOS7不支持同一目錄同時用nfs和samba共享,因為使用鎖機制不同
? 相關軟件包:rpcbind(必須),tcp_wrappers
? CentOS6開始portmap進程由rpcbind代替
? NFS服務主要進程:
rpc.nfsd 最主要的NFS進程,管理客戶端是否可登錄
rpc.mountd 掛載和卸載NFS文件系統,包括權限管理
rpc.lockd 非必要,管理文件鎖,避免同時寫出錯
rpc.statd 非必要,檢查文件一致性,可修復文件
? 日志:/var/lib/nfs/
配置防火墻
? 配置防火墻,開放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個端口
4.NFS配置文件
? 導出的文件系統的格式:
/dir 主機1(opt1,opt2) 主機2(opt1,opt2)...
? #開始為注釋
? 主機格式:
? 單個主機:ipv4,ipv6,FQDN
? IP networks:兩種掩碼格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
? wildcards:主機名通配,例如.magedu.com,IP不可以
? netgroups:NIS域的主機組,@group_name
? anonymous:表示使用通配所有客戶端
? 每個條目指定目錄導出到的哪些主機,及相關的權限和選項
? 默認選項:(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使用
5.NFS配置示例
在/etc/exports文件中定義導出目錄
? /myshare server.example.com
? /myshare *.example.com
? /myshare server?.example.com
? /myshare server[0-20].example.com
? /myshare 172.25.11.10
? /myshare 172.25.0.0/16
? /myshare 2000:472:18:b51:c32:a21
? /myshare 2000:472:18:b51::/64
? /myshare *.example.com 172.25.0.0/16
? /myshare desktop.example.com(ro)
? /myshare desktop.example.com(ro) server[0-20].example.com(rw)
? /myshare diskless.example.com(rw,no_root_squash)
6.NFS工具
(1)rpcinfo
? rpcinfo -p hostname
? rpcinfo –s hostname 查看RPC注冊程序
(2)exportfs
? –v 查看本機所有NFS共享
? –r 重讀配置文件,并共享目錄
? –a 輸出本機所有共享
? –au 停止本機所有共享
? showmount -e hostname
(3) mount.nfs 掛載工具
? NFSv4支持通過掛載NFS服務器的共享“根”,從而瀏覽
NFS服務器上的共享目錄列表
? mount nfsserver:/ /mnt/nfs
7.客戶端NFS掛載
基于安全考慮,建議使用nosuid,nodev,noexec掛載選項
(1)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/
? 開機掛載:/etc/fstab
172.16.0.1:/public /mnt/nfs nfs defaults 0 0
(2)自動掛載
? 可使用autofs按需要掛載NFS共享,在空閑時自動卸載
? 由autofs包提供
? 系統管理器指定由/etc/auto.master自動掛載器守護進程控 制的掛載點
? 自動掛載監視器訪問這些目錄并按要求掛載文件系統
? 文件系統在失活的指定間隔5分鐘后會自動卸載
? 為所有導出到網絡中的NFS啟用特殊匹配 -host 至“browse”
? 參看幫助:man 5 autofs
? 支持含通配符的目錄名
? * server:/export/&
(3)直接匹配
? 直接匹配包括絕對路徑名稱
? 不會影響本地目錄結構
? 示例:
/etc/auto.master:
/- /etc/auto.direct
/etc/auto.direct:
/foo server1:/export/foo
/user/local/ server1:/usr/local
8.實驗:實現NFS服務
? systemctl start nfs-server
? systemctl enable nfs-server
? mkdir /nfsshare
? chown nfsnobody /nfsshare
? vi /etc/exports
/nfsshare desktopX(rw)
? exporfs –r
? mkdir /mnt/nfsshare
? mount serverX:/nfsshare /mnt/nfsshare
? vim /etc/fstab
nfsserver:/nfsshare /mnt/nfsshare nfs defaults 0 0
? mount -a
9.實驗:實現NFS偽根
配置NFS服務器
vi /etc/fstab
/data/read /exports/read none bind 0 0
/data2/write /exports/write none bind 0 0
vi /etc/exports
/exports *(fsid=o,rw,crossmnt)
/exports/read 192.168.0.0/24(ro)
/exports/write 192.168.0.0/24(rw)
配置NFS客戶端
mount nfsserver:/ /mnt/nfs
vi /etc/fstab
nfsserver:/ /mnt/ nfs4 ro 0 0
10.NFS相關SELinux設置
(1)CentOS7默認SELinux 的布爾值
nfs_export_all_ro 和 nfs_export_all_rw都啟用. 這允許
NFS服務可以讀寫任意文件,基于安全考慮可關閉.
(2)對于只讀的NFS目錄SELinux安全上下文件應設為
public_content_t 或 nfs_t .
(3)對于讀寫的NFS目錄SELinux安全上下文件應設為
public_content_rw_t 或 nfs_t context,并且布爾值
nfsd_anon_write Boolean 必須啟用,以允許寫操作.
幫助參考
nfsd_selinux(8)( selinux-policy-devel 包)
nfs(5), mount(8), mount.nfs(8), exportfs(8), exports(5), nfsd_selinux(8)