Linux檔案共享(FTP+NFS)

韩笑ky36發表於2024-05-06

一、儲存型別

1.DAS

DAS是指儲存裝置直接連線到伺服器匯流排上,儲存裝置只與一臺獨立的主機連線,其他主機不能使用這個儲存裝置

2.NAS

NAS儲存就是儲存裝置透過標準的網路拓撲結構(比如乙太網)新增到一群計算機上

3.SAN

儲存區域網路,這個是透過光纖通道或乙太網交換機連線儲存陣列和伺服器主機,最後成為一個專用的儲存網路。

二、FTP檔案傳輸協議

20 資料埠(資料傳輸)

21 命令埠 (賬戶驗證 許可權管理)

使用者型別

1.匿名使用者 :ftp,anonymous,對應Linux使用者ftp

2.系統使用者:Linux使用者,使用者/etc/passwd,密碼/etc/shadow。

3.虛擬使用者:用於特定服務的使用者。

FTP工作模式

主動模式

命令(控制):客戶端:隨機port ---> 伺服器:21/tcp

資料:客戶端:隨機port <---伺服器:20/tcp

被動模式

命令(控制):客戶端:隨機port ---> 伺服器:21/tcp

資料:客戶端:隨機port ---> 伺服器:隨機port /tcp

vsftpd

服務端安裝vsftp

#安裝
##在服務端
yum install -y vsftpd  #安裝軟體

systemctl start vsftpd #開啟服務
systemctl status vsftpd #檢視服務狀態

[root@localhost ~]# rpm -qc vsftpd 
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf  ##配置檔案

客戶端連線服務端

[root@localhost ~]# ftp 192.168.146.146
Connected to 192.168.146.146 (192.168.146.146).
220 (vsFTPd 3.0.2)
Name (192.168.146.146:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

#連線後 預設在服務端的 /var/ftp下

#為什麼預設在此目錄?
#因為會生成一個新使用者,此目錄為新使用者的家目錄,可以usermod -s 修改使用者家目錄 來更改ftp連線後的位置

FTP應用例項

修改預設命令埠號

#服務端#
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf  #編輯配置檔案 listen_port=2211  #修改監聽埠為2211,原預設值為21

[root@localhost ~]# systemctl restart vsftpd  #重啟服務
#客戶端#
[root@localhost ~]# ftp 192.168.146.146  #不輸入埠號則拒絕連線
ftp: connect: 拒絕連線

[root@localhost ~]# ftp 192.168.146.146 2211  #登陸時輸入埠號2211登入成功
Connected to 192.168.146.146 (192.168.146.146).
220 (vsFTPd 3.0.2)
Name (192.168.146.146:root): ftp
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>

被動模式

#被動模式#
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
listen_port=21  #監聽埠21
pasv_enable=yes  #開啟被動模式
pasv_min_port=9901  #被動模式資料傳輸埠範圍9901到9980
pasv_max_port=9980

使用者配置

使用者登入將使用自己的使用者名稱和密碼進行身份驗證,並且只能訪問其分配的使用者目錄。

#修改使用者的ftp起始目錄#
vim /etc/vsftpd/vsftpd.conf user_config_dir=/etc/vsftpd/conf.d/  #希望每個使用者的配置檔案儲存在/etc/vsftpd/conf.d/目錄下 systemctl restart vsftpd #重啟服務 mkdir -p /etc/vsftpd/conf.d #建立使用者配置目錄
#建立使用者子配置,以使用者test1和test2為例# ##test1## vim
/etc/vsftpd/conf.d/test1 local_root=/data/test1 #設定使用者的FTP起始目錄 ##test2## vim /etc/vsftpd/conf.d/test2 local_root=/data/test2
#限制使用者在家目錄#
chroot_local_user=YES  #將所有使用者限制在主目錄(該項預設值是NO,即在安裝vsftpd後不做配置的話,ftp使用者都可以逃出主目錄,切換到根目錄。)
chroot_list_enable=NO  #不啟動限制使用者的名單。YES為啟用,NO禁用;預設使用者名稱單位置:/etc/vsftpd/user_list
allow_writeable_chroot=YES:表示讓家目錄可寫

在有配置chroot_local_user=YES時,會報錯提示chroot使用者不可寫:

加上allow_writeable_chroot=YES配置可寫後正常連線:

三、NFS

NFS(Network File System)是一種用於在網路上分享和訪問檔案的協議。 NFS允許遠端計算機透過網路訪問另一臺計算機上的檔案系統,就像訪問本地檔案一樣。

NFS工作原理

  1. 客戶端請求:NFS 的客戶端向 NFS 伺服器傳送檔案訪問請求。這可以是讀取檔案、寫入檔案或執行其他檔案操作。

  2. 訪問協議:客戶端使用 RPC(Remote Procedure Call)協議與伺服器通訊。客戶端會傳送特定的 RPC 呼叫來請求檔案操作,如開啟檔案、讀取檔案或關閉檔案。RPC埠111

  3. NFS 服務端:NFS 伺服器收到來自客戶端的請求,並解析這些請求。伺服器根據客戶端請求的內容,在本地檔案系統上執行相應的操作。

  4. 檔案傳輸:當伺服器執行檔案操作時,它會讀取或寫入相應的檔案或目錄。資料透過網路傳輸,從伺服器傳送到客戶端或從客戶端傳送到伺服器。

  5. 返回結果:伺服器完成請求後,會將執行結果返回給客戶端。這可能包括成功的確認、檔案內容、錯誤資訊等。

NFS軟體相關

軟體包:nfs-utils(包括伺服器端和客戶端)

相關軟體包:rpcbind(必須)

yum install -y nfs-utils rpcbind #安裝服務

NFS服務主要程序

rpc.nfsd 最主要的NFS程序,管理客戶端是否可登入
rpc.mountd 掛載和解除安裝NFS檔案系統,包括許可權管理
rpc.lockd 非必要,管理檔案鎖,避免同時寫出錯
rpc.statd 非必要,檢查檔案一致性,可修復檔案
說明:CentOS 6 開始portmap程序由rpcbind代替

NFS相關檔案

#日誌
/var/lib/nfs/
#配置檔案
/etc/exports  #主要配置檔案
/etc/exports.d/*.exports

在 /etc/exports.d 目錄中,每個以 .exports 結尾的檔案代表一個獨立的 NFS 共享配置。透過將配置拆分成多個檔案,可以更輕鬆地管理和維護 NFS 共享設定,而不必修改一個大型的 /etc/exports 檔案。

例如,如果你有多個共享目錄需要配置,可以在 /etc/exports.d 目錄中建立多個以 .exports 結尾的檔案,每個檔案包含一個共享目錄的配置。

NFS共享配置檔案

/dir        主機1(opt1,opt2)          主機2(opt1,opt2)...
共享目錄      共享給哪個主機
anonymous:表示使用*通配所有客戶端
單個主機: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

每個條目指定目錄匯出到的哪些主機,及相關的許可權和選項

預設選項:(ro,sync,root_squash,no_all_squash)
ro,rw 只讀和讀寫
async 非同步,資料變化後不立即寫磁碟,先寫入到緩衝區中,過一段時間再寫入磁碟,效能高,安全性低
sync1.0.0後為預設)同步,資料在請求時立即寫入共享儲存磁碟,效能低,安全性高
root_squash (預設)遠端root對映為nfsnobody,UID為65534,CentOS8 為nobody,CentOS7以前的版本為nfsnobody
no_root_squash 遠端root對映成NFS伺服器的root使用者
all_squash 所有遠端使用者(包括root)都變成nfsnobody,CentOS8 為nobody
no_all_squash (預設)保留共享檔案的UID和GID
anonuid和anongid 指明匿名使用者對映為特定使用者UID和組GID,而非nobody,可配合all_squash使用
/data/nfs1        *(rw,all_squash,anonuid=1002,anongid=1002)

NFS工具

exportfs

exportfs是一個用於在 Linux 作業系統上管理 NFS(Network File System)匯出的命令。

常用選項

  • -v  #檢視本機所有NFS共享
  • -r  #重讀配置檔案,並共享目錄
  • -a  #輸出本機所有共享
  • -au  #停止本機所有共享

showmount

  • showmount -a  #顯示所有共享的目錄
  • showmount -e <伺服器主機名或IP地址>  #顯示特定 NFS 伺服器上的共享目錄
  • showmount -l  #僅顯示掛載點的主機名或IP地址

NFS實現

服務端

#關閉防火牆和selinux
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
#安裝nfs-utils和rpcbind軟體包
[root@localhost ~]# yum install nfs-utils rpcbind -y

#新建共享目錄,在目錄內建立檔案
[root@localhost ~]# mkdir /data/nfsfile
[root@localhost ~]# touch /data/nfsfile/123

#編輯nfs配置檔案
[root@localhost ~]# vim /etc/exports
/data/nfsfile 192.168.146.0/24
#允許192.168.146.0網段的主機訪問共享目錄/data/nfsfile

#啟動服務,檢視詳細的nfs資訊 
[root@localhost ~]# systemctl start nfs
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# showmount -e  ##檢視本機發布的NFS共享目錄
Export list for localhost.localdomain:
/data/nfsfile 192.168.146.0/24

[root@localhost ~]# exportfs -v
/data/nfsfile     192.168.146.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)

客戶端

[root@localhost ~]# mount 192.168.146.146:/data/nfsfile /mnt
#掛載共享目錄到本機掛載點目錄下
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
123
#顯示服務端的檔案 掛載成功

功能測試

#切換回服務端
[root@localhost ~]# touch /data/nfsfile/hx
#返回客戶端
[root@localhost mnt]# ls
123  hx
#檔案共享NFS實現

相關文章