NFS介紹 NFS RPC NFS 優勢 NFS服務介紹 NFS配置 NFS的軟體包nfs utils以及相關文件 配置防火牆 NFS配置文件 NFS配置示例 啟動NFS 客戶端NFS掛載 自動掛載 直接匹配 實現NFS服務 實現NFS偽根 NFS相關SELinux 設置 NFS工具 ...
NFS介紹
NFS
Network File System 網路文件系統,基於內核的文件系統。
Sun 公司開發,通過使用NFS,用戶和程式可以像訪問本地文件一樣訪問遠端系統上的文件,主要是基於RPC (RemoteProcedure Call Protocol 遠程過程調用)實現。
NFS服務啟動時至少需要兩個daemons,一個管理客戶端是否能夠登入的問題,一個管理客戶端能夠取得的許可權。
RPC
採用C/S 模式。
RPC通過函數調用一部分功能由本地程式完成,另一部分功能由遠程主機上的函數完成,兩者共同完成資源的分享。
客戶機請求程式調用進程發送一個有進程參數的調用信息到服務進程,然後等待應答信息。
在伺服器端,進程保持睡眠狀態直到調用信息到達為止,當一個調用信息到達,伺服器獲得進程參數,計算結果,發送答覆信息,然後等待下一個調用信息,最後,客戶端調用進程接收答覆信息,獲得進程結果,然後調用執行繼續進行。
RPC最主要的功能就是在指定每個NFS功能所對應的埠號,並且將埠反饋給客戶端,讓客戶端可以連結到正確的埠上去。
當伺服器在啟動NFS時會隨機取用數個埠,並主動的向RPC註冊,因此RPC可以知道每個埠對應的NFS功能,然後RPC又是固定使用埠111來監聽客戶端的需求並向客戶端反饋對應的埠,因此NFS的啟動必須在PRC相關服務之後,否則NFS的啟動是會報錯的。
NFS 優勢
節省本地存儲空間,將常用的數據如:home 目錄,存放在一臺NFS 伺服器上且可以通過網路訪問,那麼本地終端將可以減少自身存儲空間的使用
NFS服務介紹
軟體包:nfs-utils
相關軟體包:rpcbind (必須),tcp_wrappers
Kernel支持:nfs.ko
埠:2049(nfsd),其它埠由portmap(111)分配
配置文件:/etc/exports,/etc/exports.d/*.exports
日誌:/var/lib/nfs/
CentOS7 不支持同一目錄同時用nfs 和samba 共用,因為使用鎖機制不同
CentOS6 開始portmap 進程由rpcbind 代替
NFS 服務主要進程:
rpc.nfsd 最主要的NFS 進程,管理客戶端是否可登錄
rpc.mountd 掛載和卸載NFS 文件系統,包括許可權管理
rpc.lockd 非必要,管理文件鎖,避免同時寫出錯
rpc.statd 非必要,檢查文件一致性,可修複文件
要在客戶端向NFS伺服器端的文件系統寫入操作是,需要具有:
NFS伺服器有開放可寫入(w)的許可權(與/etc/exports設置有關)
實際的文件許可權具有可寫入(w)的許可權
NFS配置
NFS的軟體包nfs-utils以及相關文件
rpm -ql nfs-utils(centos7)
/etc/exports.d
/etc/gssproxy/24-nfs-server.conf
/etc/modprobe.d/lockd.conf
/etc/nfs.conf
/etc/nfsmount.conf
/etc/request-key.d/id_resolver.conf
/etc/sysconfig/nfs
/sbin/mount.nfs
/sbin/mount.nfs4
/sbin/osd_login
/sbin/rpc.statd
/sbin/umount.nfs
/sbin/umount.nfs4
/usr/sbin/blkmapd
/usr/sbin/exportfs
/usr/sbin/mountstats
/usr/sbin/nfsdcltrack
/usr/sbin/nfsidmap
/usr/sbin/nfsiostat
/usr/sbin/nfsstat
/usr/sbin/rpc.gssd
/usr/sbin/rpc.idmapd
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
/usr/sbin/rpcdebug
/usr/sbin/showmount
/usr/sbin/sm-notify
/usr/sbin/start-statd
/usr/share/doc/nfs-utils-1.3.0/
/var/lib/nfs
/var/lib/nfs/etab
/var/lib/nfs/rmtab
/var/lib/nfs/rpc_pipefs
/var/lib/nfs/statd
/var/lib/nfs/statd/sm
/var/lib/nfs/statd/sm.bak
/var/lib/nfs/state
/var/lib/nfs/v4recovery
/var/lib/nfs/xtab
rpm -ql nfs-utils(centos6)
/etc/nfsmount.conf
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd
/etc/request-key.d/id_resolver.conf
/etc/sysconfig/nfs
/sbin/mount.nfs
/sbin/mount.nfs4
/sbin/nfs_cache_getent
/sbin/rpc.statd
/sbin/umount.nfs
/sbin/umount.nfs4
/usr/sbin/exportfs
/usr/sbin/mountstats
/usr/sbin/nfsidmap
/usr/sbin/nfsiostat
/usr/sbin/nfsstat
/usr/sbin/rpc.gssd
/usr/sbin/rpc.idmapd
/usr/sbin/rpc.mountd
/usr/sbin/rpc.nfsd
/usr/sbin/rpc.svcgssd
/usr/sbin/rpcdebug
/usr/sbin/showmount
/usr/sbin/sm-notify
/usr/sbin/start-statd
/var/lib/nfs
/var/lib/nfs/etab
/var/lib/nfs/rmtab
/var/lib/nfs/rpc_pipefs
/var/lib/nfs/statd
/var/lib/nfs/statd/sm
/var/lib/nfs/statd/sm.bak
/var/lib/nfs/state
/var/lib/nfs/v4recovery
/var/lib/nfs/xtab
埠:
2049(nfsd),其它埠由portmap(111)分配
配置文件:
/etc/exports
/etc/exports.d/*.exports
日誌:
/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個埠
NFS配置文件
/etc/exports導出的文件系統的格式:
/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
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)
啟動NFS
NFS服務依賴於RPC,所以要先啟動RPC服務,然後再啟動NFS服務
service rpcbind start
service nfs start
客戶端NFS掛載
基於安全考慮,建議使用nosuid,nodev,noexec 掛載選項
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
自動掛載
可使用autofs 按需要掛載NFS共用,在空閑時自動卸載
由autofs 包提供
系統管理器指定由/etc/auto.master 自動掛載器守護進程式控制制的掛載點
自動掛載監視器訪問這些目錄並按要求掛載文件系統
文件系統在失活的指定間隔5 分鐘後會自動卸載
為所有導出到網路中的NFS配啟用特殊匹配 -host 至 "browse"
參看幫助:man 5 autofs
支持含通配符的目錄名
* server:/export/&
直接匹配
直接匹配包括絕對路徑名稱
不會影響本地目錄結構
示例:
/etc/auto.master:
/- /etc/auto.direct
/etc/auto.direct:
/foo server1:/export/foo
/user/local/ server1:/usr/local
實現NFS服務
systemctl start nfs-server
systemctl enable nfs-server
mkdir /nfsshare
chown nfsnobody /nfsshare
vi /etc/exports
/nfsshare desktop-ip(rw)
exporfs –r
mkdir /mnt/nfsshare
mount server-ip:/nfsshare /mnt/nfsshare(臨時)
vim /etc/fstab
nfsserver:/nfsshare /mnt/nfsshare nfs defaults 0 0
mount -a
實現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
NFS相關SELinux 設置
CentOS7 預設SELinux 的布爾值
nfs_export_all_ro 和 nfs_export_all_rw 都啟用。這允許NFS 服務可以讀寫任意文件,基於安全考慮可關閉.
對於只讀的NFS 目錄SELinux 安全上下文件應設為
public_content_t 或 nfs_t .
對於讀寫的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)
NFS工具
rpcinfo
rpcinfo — report RPC information
rpcinfo makes an RPC call to an RPC server and reports what it finds.
rpcinfo [-m | -s] [host]
rpcinfo -p [host]
rpcinfo -T netid host prognum [versnum]
rpcinfo -l host prognum versnum
rpcinfo [-n portnum] -u | -t host prognum [versnum]
rpcinfo -a serv_address -T netid prognum [version]
rpcinfo -b prognum versnum
rpcinfo -d [-T netid] prognum versnum
例子:
rpcinfo -p hostname
rpcinfo –s hostname 查看RPC註冊程式
exportfs
exportfs - maintain table of exported NFS file systems
exportfs [-aruv] [host:/path
–v 查看本機所有NFS 共用
–r 重讀配置文件,並共用目錄
–a 輸出本機所有共用
–au 停止本機所有共用
showmount
showmount - show mount information for an NFS server
showmount [options] [host]
-a or --all 在主機中列出客戶端主機名或IP地址和已裝載目錄:dir格式
-d or --directories 僅列出某些客戶端安裝的目錄
-e or --exports 顯示NFS服務的導出文件
--no-headers 禁止輸出中的描述性標題
例子
showmount -e hostname
mount,mount.nfs 掛載工具
NFSv4 支持通過掛載NFS 伺服器的共用“根”,從而瀏覽NFS 伺服器上的共用目錄列表
mount nfsserver:/ /mnt/nfs