nfs服務器的安裝配置
一、原理
nfs的目標是使計算機共享資源。
使用nfs,客戶端可以透明地訪問服務器中的文件系統,這不同於FTP協議。FTP會產生一個完整的文件副本;NFS只訪問一個進程引用文件部分,並且目的就是使得這種訪問透明。這意味着任何能夠訪問一個本地文件的客戶端程序不需要作任何修改就能夠訪問一個NFS文件。
nfs的優缺點
1)優點
- 節省本地存儲空間將常用的數據存放在一臺服務器可以通過網絡訪問
- 簡單容易上手
- 方便部署非常快速,維護十分簡單
2)缺點
- 侷限性容易發生單點故障,及server機宕機了所有客戶端都不能訪問
- 在高併發下NFS效率/性能有限
- 客戶端沒用用戶認證機制,且數據是通過明文傳送
- NFS的數據是明文的,對數據完整性不做驗證
二、配置
服務端和客戶端的主機型號都爲rhel7
本次實驗各ip設置:
服務端:172.25.254.170
客戶端:172.25.254.171
本次實驗使用到的軟件:nfs-utils用來提供nfs服務;autofs用來設置設備使用時自動掛載,不使用時自動卸載
本次實驗的配置文件:
/etc/exports ##修改共享文件的權限設置
/etc/sysconfig/autofs ##autofs的配置文件
/etc/auto.master ##主策略文件
/etc/auto.nfs ##自己設置的自定義掛載目錄的子配置文件,從主策略文件中讀取出來的
1、安裝掛載
提供nfs服務的軟件爲:nfs-utils
1)安裝軟件
yum install nfs-utils -y
2)服務端設置
**<1>修改防火牆設置**
[root@server ~]# firewall-cmd --add-service=nfs --permanent
success
[root@server ~]# firewall-cmd --add-service=rpc-bind --permanent
success
[root@server ~]# firewall-cmd --add-service=mountd --permanent
success
[root@server ~]# firewall-cmd --reload
success
**<2>設置共享文件**
[root@server ~]# mkdir /westos/nfs -p
[root@server ~]# vim /etc/exports
/westos/nfs *(sync) ##sync表示所有客戶端訪問本機的共享目錄使客戶端與服務端同步
[root@server ~]# exportfs -vr
exporting *:/westos/nfs
3)客戶端掛載測試
[root@client ~]# mount 172.25.254.170:/westos/nfs /mnt ##掛載
[root@client ~]# showmount -e 172.25.254.170
Export list for 172.25.254.170: ##顯示172.25.254.170主機> 裏面的共享文件,相當於smbclient -L
/westos/nfs *
2、設置在客戶端掛載存在時間
全部在客戶端設置
1)安裝軟件
yum install autofs -y
2)修改配置文件
[root@client ~]# systemctl start autofs
[root@client ~]# ls -ld /net/ ##只有當autofs服務開啓時,這個目錄纔會存在,服務關閉,目錄自動消失
drwxr-xr-x 2 root root 0 Dec 9 10:09 /net/
[root@client net]# ls ##這個目錄用ls並不會列出服務器中的文件
[root@client net]# cd 172.25.254.170 ##但可以通過進入服務器ip進入服務器的共享文件目錄
[root@client 172.25.254.170]# ls
westos
[root@client ~]# vim /etc/sysconfig/autofs ##配置文件在rhel7上在這個文件,而rhel7.2配置文件是在/etc/autofs.conf文件
TIMEOUT=5 ##表示掛載上多少時間後自動卸載,默認爲300秒
[root@client ~]# systemctl restart autofs
3)測試
[root@client ~]# cd /net/172.25.254.170/westos/nfs/ ##進入這個目錄後,便後自動實現掛載
[root@client nfs]# cd
[root@client ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3177296 7296604 31% /
devtmpfs 493408 0 493408 0% /dev
tmpfs 508996 140 508856 1% /dev/shm
tmpfs 508996 13412 495584 3% /run
tmpfs 508996 0 508996 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2339 451840 1% /home
172.25.254.170:/westos/nfs 10473984 3148288 7325696 31% /net/172.25.254.170/westos/nfs
[root@client ~]# df ##5秒後,再次使用df,會發現掛載的nfs共享目錄自動被卸載
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3177296 7296604 31% /
devtmpfs 493408 0 493408 0% /dev
tmpfs 508996 140 508856 1% /dev/shm
tmpfs 508996 13412 495584 3% /run
tmpfs 508996 0 508996 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2339 451840 1% /home
3、指定在客戶端自動掛載的目錄
全部在客戶端上設置
一定要注意,想要自動掛載的目錄不需要自己建立,在修改完成配置文件之後,重啓服務,指定的目錄會自動建立出來
1)設置配置文件
[root@client ~]# vim /etc/auto.master ##修改主配置文件
/westos/linux /etc/auto.nfs ##前面的表示想要在客戶端上掛載的目錄位置,下一層目錄會自動是服務端共享的目錄,後面的表示實現這個功能的子配置文件,這個文件的名字可以自己設置
[root@client ~]# vim /etc/auto.nfs ##設置子配置文件
nfs -rw 172.25.254.170:/westos/nfs ##表示將170主機上的/westos/nfs目錄共享出來,並且爲可讀可寫
[root@client ~]# systemctl restart autofs
2)測試
[root@client ~]# cd /westos/linux/nfs/
[root@client nfs]# cd
[root@client ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/vda1 10473900 3181148 7292752 31% /
devtmpfs 493408 0 493408 0% /dev
tmpfs 508996 140 508856 1% /dev/shm
tmpfs 508996 13416 495580 3% /run
tmpfs 508996 0 508996 0% /sys/fs/cgroup
/dev/mapper/vg0-vo 483670 2339 451840 1% /home
172.25.254.170:/westos/nfs 10473984 3147904 7326080 31% /westos/linux/nfs
4、修改客戶端上創建文件的權限
實驗配置文件在服務端上的/etc/exports文件上面
**在上一個實驗中,可以看到客戶端設置對共享目錄是可讀可寫,但是touch file的時候,會提示錯誤,這是因爲客戶端將服務端的共享目錄掛載到本地設置的目錄上時,在目錄中創建文件,實質上是在服務端的主機上建立,因爲服務端沒有設置可寫權限,所以會創建失敗,具體設置情況如下:
1)可創建文件,權限爲默認
1> 實驗前測試及配置
[root@client ~]# cd /westos/linux/nfs
[root@client nfs]# ls
[root@client nfs]# touch file
touch: cannot touch ‘file’: Read-only file system
[root@client nfs]# touch file
touch: cannot touch ‘file’: Permission denied
2> 服務端配置
出現Read-only file system解決方法
[root@server ~]# vim /etc/exports
/westos/nfs *(sync,rw) ##rw表示可讀可寫
[root@server ~]# exportfs -rv ##刷新生效之後,客戶端再次創建文件,會出現permission denied的問題,這是因爲服務端的共享目錄權限問題
解決方法爲:
[root@server ~]# chmod 777 /westos/nfs/
3> 客戶端測試
[root@client ~]# cd /westos/linux/nfs
[root@client nfs]# ls
[root@client nfs]# touch file
[root@client nfs]# ls -l
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 9 11:15 file
2)設置客戶端創建文件的用戶
由上一個實驗可以看到,默認創建文件的用戶爲nfsnobody,這個用戶可以進行設置
1> 指定創建文件的用戶爲一個服務端指定的用戶
<1> 服務端設置
[root@server ~]# useradd westos
[root@server ~]# id westos
uid=1001(westos) gid=1001(westos) groups=1001(westos)
[root@server ~]# vim /etc/exports
/westos/nfs *(sync,rw,anonuid=1001,anongid=1001)
[root@server ~]# exportfs -rv
exporting *:/westos/nfs
<2> 客戶端測試
[root@client nfs]# touch file1
[root@client nfs]# ls -l
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 9 11:15 file
-rw-r--r-- 1 1001 1001 0 Dec 9 11:17 file1
**出現的用戶名爲服務器端的uid爲1001的用戶,出現1001而不是直接出現westos用戶名的原因是客戶端主機並沒有uid爲1001的用戶**
2> 設置客戶端如果爲root用戶的話,創建文件還是root用戶,即root用戶不轉換
設置這個配置時,一定要注意將前面的anonuid和anongid刪除掉,因爲這兩個會發生衝突,如果兩個都有的話,就會是一個需要root用戶轉換,一個不需要轉換
<1> 服務端設置
[root@server ~]# vim /etc/exports
/westos/nfs *(sync,rw,no_root_squash) ##no_root_squash表示超級用戶不轉換身份
[root@server ~]# exportfs -rv
exporting *:/westos/nfs
<2> 客戶端測試
[root@client nfs]# touch file2
[root@client nfs]# ls -l
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Dec 9 11:15 file
-rw-r--r-- 1 1001 1001 0 Dec 9 11:17 file1
-rw-r--r-- 1 root root 0 Dec 9 11:17 file2