autofs自動掛載技術
1.1 自動掛載原理
autofs服務程序與mount命令不同之處在於它是一種守護進程,只有檢測到用戶試圖訪問一個尚未掛載的文件系統時才自動的檢測並掛載該文件系統(nfs屬於主動掛載,要使用mount進行硬掛載或者軟掛載,autofs屬於被動掛載,只有去訪問目錄纔會被掛載)。
autofs非常方便,主要有兩點:
1、設置不需要在開機就掛載的目錄,當用的時候才實現自動掛載。
2、用戶不使用自動掛載的目錄一段的時間,會自動卸載。(默認時間爲5分鐘),可以在autofs.conf修改配置。
1.2 自動掛載配置(autofs客戶端實現掛載遠程服務器NFS服務共享文件)
1.2.1 在客戶端安裝autofs:
[root@localhost ~]# yum install autofs -y
[root@localhost test]# systemctl enable autofs --開機自啓動
Created symlink from /etc/systemd/system/multi-user.target.wants/autofs.service to /usr/lib/systemd/system/autofs.service.
[root@localhost cd]# cat /etc/autofs.conf --查看配置文件
timeout = 300 --用戶不使用自動掛載的目錄一段的時間,會自動卸載。(默認時間爲5分鐘)
1.2.2 編輯/etc/auto.master
[root@localhost cd]# vi /etc/auto.master --/mnt是要掛載的目錄,auto.mis是對掛載目錄的描述
/mnt /etc/auto.misc
在autofs服務程序的主配置文件要按照”掛載目錄 子配置文件”格式進行填寫,掛載目錄是客戶端設備掛載目錄上一級目錄。例如光盤設備一般掛載到本地的/mnt/test目錄中,但是掛載目錄寫上一級的/mnt即可,當你cd到/mnt下再cd到test目錄下,會將服務端的目錄自動掛載到本地/mnt/test下
.misc是對該掛載目錄的內的掛載信息做進一步說明的即對test這個目錄
服務端nfs共享出去的信息
[root@localhost ~]# exportfs -v
/mnt/cdrom 192.168.179.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
客戶端掛載nfs的配置
[root@localhost cd]# vi /etc/test.misc
test -fstype=nfs,ro,sync 192.168.179.100:/mnt/cdrom --test目錄可以不存在,只要cd到這個目錄就可以實現自動掛載
root@localhost cd]# systemctl restart autofs --注意修改了配置文件就需要重啓服務
[root@localhost mnt]# cd /mnt/ --測試一下
[root@localhost mnt]# cd test/
[root@localhost test]# ls
CentOS_BuildTag EFI EULA GPL images isolinux LiveOS Packages repodata RPM-GPG-KEY-CentOS-7 RPM-GPG-KEY-CentOS-Testing-7 TRANS.TBL
[root@localhost test]# df -h --可以看到當去訪問test這個目錄,就將遠程192.168.179.100的/mnt/cdrom給掛載過來了
Filesystem Size Used Avail Use% Mounted on
192.168.179.100:/mnt/cdrom 4.3G 4.3G 0 100% /mnt/test
上面是隻讀的,因爲掛載的鏡像裏面的文件都是隻讀的,下面是文件系統,涉及權限問題。
服務端192.168.179.100 /data/jfedu
[root@localhost ~]# mkdir -p /data/jfedu
[root@localhost ~]# cat /etc/exports
/data/jfedu 192.168.179.0/24(ro,sync)
[root@localhost ~]# exportfs -r
[root@localhost ~]# exportfs -v
/data/jfedu 192.168.179.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
客戶端192.168.179.99
[root@localhost data]# vim /etc/auto.master
/data /etc/data.misc
[root@localhost test]# vim /etc/data.misc
xiaoming -fstype=nfs,ro,sync 192.168.179.100:/data/jfedu
xiaowang -fstype=nfs,rw,sync 192.168.179.100:/data/jfedu
[root@localhost test] systemctl restart autofs
[root@localhost data]# cd /data/
[root@localhost data]# cd xiaoming
[root@localhost xiaoming]# pwd
/data/xiaoming
[root@localhost xiaoming]# ls
fstab
[root@localhost xiaoming]# echo a >> fstab --小明是不能對該文件進行修改
-bash: fstab: Read-only file system
[root@localhost data]# cd xiaowang
[root@localhost xiaowang]# ls
fstab
[root@localhost xiaowang]# echo a >> fstab
-bash: fstab: Read-only file system
這種一般都是服務端nfs設置的權限有問題提示的錯誤信息
[root@localhost ~]# cat /etc/exports --由ro修改爲rw
/data/jfedu 192.168.179.0/24(rw,sync)
[root@localhost ~]# exportfs -v
/data/jfedu 192.168.179.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
[root@localhost xiaowang]# echo a >> fstab --可以看到權限有問題
-bash: fstab: Permission denied
[root@localhost ~]# ll -ld /data/jfedu/ --在服務端可以看到該共享目錄對於其他人others來說是一個r-x權限,沒有w權限,客戶端不再是root身份,是nfsnobody身份,身份被壓縮了。所以對fstab沒有權限
drwxr-xr-x. 2 root root 19 Mar 3 20:33 /data/jfedu/
[root@localhost ~]# chmod o+w /data/jfedu/
[root@localhost ~]# ll -ld /data/jfedu/ --該目錄對於其他人來說是可寫的了
drwxr-xrwx. 3 root root 31 Mar 3 20:44 /data/jfedu/
[root@localhost ~]# cd /data/xiaowang
[root@localhost xiaowang]# touch a.txt
[root@localhost xiaowang]# ll
total 4
-rw-r--r-- 1 nfsnobody nfsnobody 0 Mar 3 20:51 a.txt
-rw-r--r-- 1 root root 501 Mar 3 20:33 fstab
[root@localhost data]# cd xiaoming
[root@localhost xiaoming]# touch a.txt
touch: cannot touch ?..txt?. Read-only file system
總結一下,在服務端分享出去的目錄/data/jfedu是不需要修改目錄權限,使用目錄權限即可,不要將目錄權限設置爲777,那麼客戶端的用戶會在裏面可以隨意創建修改文件,還是在共享出去的目錄下單獨創建一個目錄給用戶活動,這樣便於管理
[root@localhost ~]# mkdir -p /data/jfedu/test --創建test目錄限制用戶只能在test目錄裏面纔可以爲所欲爲
[root@localhost ~]# chmod 777 /data/jfedu/test
[root@localhost test]# cd /data/xiaowang
[root@localhost xiaowang]# cd test
[root@localhost test]# touch a.txt
最後說一下,假設在服務端分享出去的目錄爲/data/test,在客戶端test目錄下操作文件就像root一樣有幾種方式
- 在服務端修改test目錄others的權限,因爲客戶端身份會被壓縮
- 在服務端/data/test目錄下創建一個新的目錄給others權限爲7,這樣身份被壓縮了但是在新創建的目錄裏面還是可以爲所欲爲
- 在服務端exports文件裏面加上no_root_squash,不壓縮身份,即在客戶端還是爲root身份