目錄
- 安裝NFS服務
- 配置NFS服務
- 知識擴展
1. 安裝NFS服務
1.1 環境準備
- 192.168.202.14 文件存儲服務器 存儲位置:/storage/oafiles
- 192.168.202.118 應用服務器 掛載位置:/storage/oafiles
1.2 安裝應用
- 在192.168.202.14服務器上安裝rpcbind應用
yum -y install rpcbind
- 在192.168.202.14服務器上安裝nfs應用
yum -y install nfs-utils nfs-utils-li
- 添加服務開機自啟動
chkconfig --level 35 nfs on
chkconfig --level 35 rpcbind on
2. 配置NFS服務
- 配置NFS服務目錄
在192.168.202.14服務器上, 修改/etc/exports文件
# vi /etc/exports
/storage/oafiles 192.168.202.118(rw,sync,no_root_squash,no_all_squash)
- 使NFS服務目錄生效
# exportfs -r
- 重啟NFS服務
啟動順序:先啟動rpcbind服務, 再啟動nfs服務,否則會出現clnt_create: RPC: Program not registered
錯誤。
/etc/init.d/rpcbind restart
/etc/init.d/nfs restart
- 配置防火墻訪問策略
- 在192.168.202.14服務器上配置NFS的服務端口, 修改配置文件/etc/sysconfig/nfs:
# vi /etc/sysconfig/nfs
#
# Define which protocol versions mountd
# will advertise. The values are "no" or "yes"
# with yes being the default
#MOUNTD_NFS_V2="no"
#MOUNTD_NFS_V3="no"
#
#
# Path to remote quota server. See rquotad(8)
#RQUOTAD="/usr/sbin/rpc.rquotad"
# Port rquotad should listen on.
RQUOTAD_PORT=875
# Optinal options passed to rquotad
#RPCRQUOTADOPTS=""
#
#
# Optional arguments passed to in-kernel lockd
#LOCKDARG=
# TCP port rpc.lockd should listen on.
LOCKD_TCPPORT=32803
# UDP port rpc.lockd should listen on.
LOCKD_UDPPORT=32769
#
#
# Optional arguments passed to rpc.nfsd. See rpc.nfsd(8)
# Turn off v2 and v3 protocol support
#RPCNFSDARGS="-N 2 -N 3"
# Turn off v4 protocol support
#RPCNFSDARGS="-N 4"
# Number of nfs server processes to be started.
# The default is 8.
#RPCNFSDCOUNT=8
# Stop the nfsd module from being pre-loaded
#NFSD_MODULE="noload"
# Set V4 and NLM grace periods in seconds
#
# Warning, NFSD_V4_GRACE should not be less than
# NFSD_V4_LEASE was on the previous boot.
#
# To make NFSD_V4_GRACE shorter, with active v4 clients,
# first make NFSD_V4_LEASE shorter, then restart server.
# This will make the clients aware of the new value.
# Then NFSD_V4_GRACE can be decreased with another restart.
#
# When there are no active clients, changing these values
# can be done in a single server restart.
#
#NFSD_V4_GRACE=90
#NFSD_V4_LEASE=90
#NLM_GRACE_PERIOD=90
#
#
#
# Optional arguments passed to rpc.mountd. See rpc.mountd(8)
#RPCMOUNTDOPTS=""
# Port rpc.mountd should listen on.
MOUNTD_PORT=892
#
#
# Optional arguments passed to rpc.statd. See rpc.statd(8)
#STATDARG=""
# Port rpc.statd should listen on.
#STATD_PORT=662
# Outgoing port statd should used. The default is port
# is random
#STATD_OUTGOING_PORT=2020
# Specify callout program
#STATD_HA_CALLOUT="/usr/local/bin/foo"
#
#
# Optional arguments passed to rpc.idmapd. See rpc.idmapd(8)
#RPCIDMAPDARGS=""
#
# Set to turn on Secure NFS mounts.
#SECURE_NFS="yes"
# Optional arguments passed to rpc.gssd. See rpc.gssd(8)
#RPCGSSDARGS=""
# Optional arguments passed to rpc.svcgssd. See rpc.svcgssd(8)
#RPCSVCGSSDARGS=""
#
# To enable RDMA support on the server by setting this to
# the port the server should listen on
#RDMA_PORT=20049
打開RQUOTAD_PORT=875、LOCKD_TCPPORT=32803、LOCKD_UDPPORT=32769、MOUNTD_PORT=892端口配置。
- 配置防火墻
在192.168.202.14服務器上配置防火墻, 打開相應端口的訪問權限。
vi /etc/sysconfig/iptables
# Setting for NFS service
-A INPUT -m state --state NEW -m tcp -p tcp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 111 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 1027 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 1027 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 875 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 892 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 32803 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 32769 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 2049 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 2049 -j ACCEPT
保存退出后,重啟防火墻。
- 驗證NFS共享服務
在192.168.202.14上驗證NFS共享
# showmount -e
在192.168.202.118上驗證NFS共享
# showmount -e 192.168.202.14
- 客戶端掛載NFS目錄
在192.168.202.118服務器上掛載NFS文件服務。
mkdir -p /storage/oafiles
mount -t nfs 192.168.202.14:/storage/oafiles /storage/oafiles
- 客戶端測試
在192.168.202.118應用服務器上的掛載目錄下創建文件,然后登錄192.168.202.14的網絡文件服務目錄查看是否存在該文件。
3. 知識擴展
- exportfs命令
- 命令格式
exportfs -r 或 exportfs -a 或 exportfs -u
-
參數說明如下:
- -a:全部掛載(或卸載)/etc/exports文件內的設定。
- -r:重新掛載/etc/exports中的設置,此外同步更新/etc/exports及/var/lib/nfs/xtab中的內容。
- -u:卸載某一目錄。
- -v:在export時將共享的目錄顯示在屏幕上。
- /etc/exports文件
-
內容格式
<共享目錄> [客戶端1 選項(訪問權限,用戶映射,其他)] [客戶端2 選項(訪問權限,用戶映射,其他)]
-
共享目錄:
共享目錄是指NFS系統中需要共享給客戶機使用的目錄;
-
客戶端:
客戶端是指網絡中可以訪問這個NFS輸出目錄的計算機
客戶端常用的指定方式
- 指定ip地址的主機:192.168.0.200
- 指定子網中的所有主機:192.168.0.0/24 192.168.0.0/255.255.255.0
- 指定域名的主機:david.bsmart.cn
- 指定域中的所有主機:*.bsmart.cn
- 所有主機:*
-
訪問權限選項
- 設置輸出目錄只讀:ro
- 設置輸出目錄讀寫:rw
-
用戶映射選項
- all_squash:將遠程訪問的所有普通用戶及所屬組都映射為匿名用戶或用戶組(nfsnobody);
- no_all_squash:與all_squash取反(默認設置);
- root_squash:將root用戶及所屬組都映射為匿名用戶或用戶組(默認設置);
- no_root_squash:與rootsquash取反;
- anonuid=xxx:將遠程訪問的所有用戶都映射為匿名用戶,并指定該用戶為本地用戶(UID=xxx);
- anongid=xxx:將遠程訪問的所有用戶組都映射為匿名用戶組賬戶,并指定該匿名用戶組賬戶為本地用戶組賬戶(GID=xxx);
-
其它選項
- secure:限制客戶端只能從小于1024的tcp/ip端口連接nfs服務器(默認設置);
- insecure:允許客戶端從大于1024的tcp/ip端口連接服務器;
- sync:將數據同步寫入內存緩沖區與磁盤中,效率低,但可以保證數據的一致性;
- async:將數據先保存在內存緩沖區中,必要時才寫入磁盤;
- wdelay:檢查是否有相關的寫操作,如果有則將這些寫操作一起執行,這樣可以提高效率(默認設置);
- no_wdelay:若有寫操作則立即執行,應與sync配合使用;
- subtree:若輸出目錄是一個子目錄,則nfs服務器將檢查其父目錄的權限(默認設置);
- no_subtree:即使輸出目錄是一個子目錄,nfs服務器也不檢查其父目錄的權限,這樣可以提高效率。
-
關于權限的分析
-
客戶端連接時候,對普通用戶的檢查
- 如果明確設定了普通用戶被壓縮的身份,那么此時客戶端用戶的身份轉換為指定用戶;
- 如果NFS server上面有同名用戶,那么此時客戶端登錄賬戶的身份轉換為NFS server上面的同名用戶;
- 如果沒有明確指定,也沒有同名用戶,那么此時 用戶身份被壓縮成nfsnobody;
-
客戶端連接的時候,對root的檢查
- 如果設置no_root_squash,那么此時root用戶的身份被壓縮為NFS server上面的root;
- 如果設置了all_squash、anonuid、anongid,此時root 身份被壓縮為指定用戶;
- 如果沒有明確指定,此時root用戶被壓縮為nfsnobody;
- 如果同時指定no_root_squash與all_squash 用戶將被壓縮為 nfsnobody,如果設置了anonuid、anongid將被壓縮到所指定的用戶與組;
-
實踐總結
由于部署公司新OA系統測試環境的需要,要在OA系統應用服務器掛載網絡文件服務,在配置過程中查找了相關的材料,這些材料記錄的步驟并不全面,導致了配置錯誤, 在配置過程中, 我將每一步的步驟進行詳細記錄, 最后掛載目錄成功。