網絡文件共享服務-NFS
阿新 • • 發佈:2018-10-23
ext total -s setfacl 同步 bind def 表示 form NFS服務
NFS: Network File System 網絡文件系統,基於內核的文件系統。 Sun公司開發,通過使用NFS,用戶和程序可以像訪問本地文件一 樣訪問遠端系統上的文件,基於RPC(Remote Procedure Call Protocol遠程過程調用)實現 RPC: 采用C/S模式。客戶機請求程序調用進程發送一個有進程參數 的調用信息到服務進程,然後等待應答信息。在服務器端,進程保 持睡眠狀態直到調用信息到達為止。當一個調用信息到達,服務器 獲得進程參數,計算結果,發送答復信息,然後等待下一個調用信 息,最後,客戶端調用進程接收答復信息,獲得進程結果,然後調 用執行繼續進行 NFS優勢: 節省本地存儲空間,將常用的數據,如home目錄,存放在 NFS服務器上且可以通過網絡訪問,本地終端將可減少自身存儲空 間的使用
NFS文件系統
NFS各個版本的對比
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服務(centos 6上需要操作,centos7不需要)
?配置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配置文件
1、導出的文件系統的格式: /dir 主機1(opt1,opt2) 主機2(opt1,opt2)... 2、#開始為註釋 3、主機格式: 單個主機: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:表示使用*通配所有客戶端 4、每個條目指定目錄導出到的哪些主機,及相關的權限和選項 默認選項:(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工具
rpcinfo
rpcinfo -p hostname
rpcinfo –s hostname 查看RPC註冊程序
exportfs
–v 查看本機所有NFS共享
–r 重讀配置文件,並共享目錄
–a 輸出本機所有共享
–au 停止本機所有共享
showmount -e hostname
mount.nfs 掛載工具
NFSv4支持通過掛載NFS服務器的共享“根”,從而瀏覽NFS服務器上的共享目錄列表
mount nfsserver:/ /mnt/nfs
客戶端NFS掛載
基於安全考慮,建議使用nosuid,nodev,noexec掛載選項
NFS相關的掛載選項:
fg(默認)前臺掛載,bg後臺掛載
hard(默認)持續請求,soft 非持續請求
intr 和hard配合,請求可中斷
rsize和wsize 一次讀和寫數據最大字節數,rsize=32768
_netdev 無網絡不掛載
示例:
mount -o rw,nosuid,fg,hard,intr 192.168.137.56:/testdir /mnt/nfs/
開機掛載:
/etc/fstab
192.168.137.56:/public /mnt/nfs nfs defaults 0 0
nfs簡單示例
安裝nfs服務
[root@node6 ~]#yum -y install nfs-utils
創建共享目錄
[root@node6 ~]#mkdir /data/volume{1..6}
創建共享的配置文件
[root@node6 ~]#vim /etc/exports.d/volume1.exports
/data/volume1 192.168.137.0/24 (ro)
啟動服務
[root@node6 ~]#systemctl start nfs
客戶端測試,不過客戶端也需要安裝相對應的工具
[root@node7 ~]#yum -y install nfs-utils
在客戶端上查看服務器端有哪些掛載
[root@node7 ~]#showmount -e 192.168.137.56
Export list for 192.168.137.56:
/data/volume1 (everyone)
把服務器共享的目錄掛載到本地
[root@node7 ~]#mount -t nfs 192.168.137.56:/data/volume1 /mnt
在服務器上增加/data/volume1的acl權限給ilinux,然後切換到ilinux,在/data/volume1上創建測試文件
[root@node6 ~]#setfacl -m u:ilinux:rwx /data/volume1
[root@node6 ~]#su - ilinux
[ilinux@node6 ~]$cd /data/volume1/
[ilinux@node6 /data/volume1]$ls
[ilinux@node6 /data/volume1]$touch a.txt
[ilinux@node6 /data/volume1]$ll
total 0
-rw-rw-r-- 1 ilinux ilinux 0 Oct 23 13:47 a.txt
客戶端上查看剛在服務器上創建的文件、並測試是否有寫權限
[root@node7 /mnt]#ll
total 0
-rw-rw-r-- 1 1001 1001 0 Oct 23 13:47 a.txt
[root@node7 /mnt]#touch 1
touch: cannot touch ‘1’: Read-only file system
修改服務器共享目錄的權限,並更新
[root@node6 ~]#vim /etc/exports.d/volume1.exports
/data/volume1 192.168.137.0/24(rw)
# exportfs -rav相當於systemctl reload nfs
[root@node6 ~exportfs -ravs
exporting 192.168.137.0/24:/data/volume1
客戶端測試寫權限,創建一個同服務器上的用戶ID一樣的本地用戶
[root@node7 /mnt]#useradd -u 1001 user1
[root@node7 /mnt]#id user1
uid=1001(user1) gid=1001(user1) groups=1001(user1)
[root@node7 /mnt]#su - user1
[user1@node7 ~]$cd /mnt/
[user1@node7 /mnt]$ls
a.txt
[user1@node7 /mnt]$echo "first line" > a.txt
#在本地看所屬主和屬組是user1其實正真的user是服務器端的ilinux用戶只不過他倆的ID號一樣而已
到了v4版之後能識別字符串同名,不過依然解決不了ID號一樣
[user1@node7 /mnt]$ll
total 4
-rw-rw-r-- 1 user1 user1 0 Oct 23 14:19 2
-rw-rw-r-- 1 user1 user1 11 Oct 23 14:21 a.txt
允許客戶端root用戶來操作所有權限
[root@node6 ~]#vim /etc/exports.d/volume1.exports
/data/volume1 192.168.137.0/24(rw,no_root_squash)
重新加載配置
[root@node6 ~]#exportfs -ravs
在客戶端測試
[root@node7 /mnt]#touch 1
[root@node7 /mnt]#rm -rf 1
[root@node7 /mnt]#touch a.root
[root@node7 /mnt]#
在客戶端上使用服務器上共享目錄充當數據庫的數據存儲路徑
[root@node7 /mnt]#yum -y install mariadb-server
修改數據庫的配置文件把數據存放路徑改了
[root@node7 /mnt]#vim /etc/my.cnf
[mysqld]
datadir=/mnt/mysql
socket=/tmp/mysql.sock
skip_name_resolve=on
然後創建目錄,並把屬主和屬組改成mysql
[root@node7 /mnt]#mkdir /mnt/mysql
[root@node7 /mnt]#chown mysql.mysql /mnt/mysql/
然後啟動數據庫服務,查看mnt/mysql目錄
[root@node7 /mnt]#systemctl start mariadb
[root@node7 /mnt]#ls mysql/
aria_log.00000001 ibdata1 ib_logfile1 performance_schema
aria_log_control ib_logfile0 mysql test
把匿名用戶映射成指定用戶示例:
[root@node6 /data/volume1]#vim /etc/exports.d/volume1.exports
/data/volume1 192.168.137.0/24(rw,all_squash,anonuid=1001,anongid=1001)
重新導出配置文件
[root@node6 /data/volume1]#exportfs -ra
客戶端新建用戶,然後用新建的用戶來創建文件驗證服務器上設置的權限
[root@node7 /mnt]#useradd user2
[root@node7 /mnt]#su - user2
[user2@node7 ~]$cd /mnt/
[user2@node7 /mnt]$touch user2.txt
[user2@node7 /mnt]$
[user2@node7 /mnt]$ll
total 4
-rw-rw-r-- 1 user1 user1 0 Oct 23 14:19 2
-rw-r--r-- 1 root root 0 Oct 23 14:42 a.root
-rw-rw-r-- 1 user1 user1 11 Oct 23 14:21 a.txt
drwxr-xr-x 5 mysql mysql 159 Oct 23 14:46 mysql
-rw-r--r-- 1 user1 user1 0 Oct 23 14:53 root.b
-rw-rw-r-- 1 user1 user1 0 Oct 23 14:55 user2.txt
網絡文件共享服務-NFS