共享資源庫系統

  • 2021 年 3 月 15 日
  • 筆記

FTP服務

3.1 什麼是FTP

FTP(File Transfer Protocol)是一個非常古老並且應用十分廣泛的文件傳輸協議,FTP協議是現今使用最為廣泛的網路文件共享協議之一,我們現在也一直有在用著FTP協議來進行各種文件的傳輸,FTP為我們提供了一種可靠的方式在網路上進行文件的共享。

 

3.2 FTP原理

FTP是C/S架構的服務,擁有一個伺服器端和一個客戶端,FTP底層通過TCP協議來作為傳輸協議,所以FTP協議是一種可靠的文件傳輸方式,FTP提供了兩個埠號,20和21號埠,20號是數據介面,提供數據之間的傳輸,21號是命令介面,提供命令之間的傳輸。

FTP服務端與客戶端連接一般有兩種模式:主動模式(Active Mode)和被動模式(Passive Mode)

在主動模式下,FTP客戶端隨機開啟一個大於1024的埠N向伺服器的21號埠發起連接,發送FTP用戶名和密碼,然後開放N+1號埠進行監聽,並向伺服器發出PORT N+1命令,告訴服務端客戶端採用主動模式並開放了埠。FTP伺服器接收到PORT命令後,會用其本地的FTP數據埠(通常是20)來連接客戶端指定的埠N+1,進行數據傳輸。如圖:

 

在被動模式下,FTP客戶端隨機開啟一個大於1024的埠N向伺服器的21號埠發起連接,發送用戶名和密碼進行登陸,同時會開啟N+1埠。然後向伺服器發送PASV命令,通知伺服器自己處於被動模式。伺服器收到命令後,會開放一個大於1024的埠P(埠P的範圍是可以設置的,後面會說到這個是很重要的)進行監聽,然後用PORT P命令通知客戶端,自己的數據埠是P。客戶端收到命令後,會通過N+1號埠連接伺服器的埠P,然後在兩個埠之間進行數據傳輸。如圖:

 

3 FTP狀態碼

FTP狀態碼

1xx – 肯定的初步答覆

這些狀態程式碼指示一項操作已經成功開始,但客戶端希望在繼續操作新命令前得到另一個答覆。

l  110 重新啟動標記答覆。

l  120 服務已就緒,在 nnn 分鐘後開始。

l  125 數據連接已打開,正在開始傳輸。

l  150 文件狀態正常,準備打開數據連接。

 

2xx – 肯定的完成答覆

一項操作已經成功完成。客戶端可以執行新命令。

l  200 命令確定。

l  202 未執行命令,站點上的命令過多。

l  211 系統狀態,或系統幫助答覆。

l  212 目錄狀態。

l  213 文件狀態。

l  214 幫助消息。

l  215 NAME 系統類型,其中,NAME 是 Assigned Numbers 文檔中所列的正式系統名稱。

l  220 服務就緒,可以執行新用戶的請求。

l  221 服務關閉控制連接。如果適當,請註銷。

l  225 數據連接打開,沒有進行中的傳輸。

l  226 關閉數據連接。請求的文件操作已成功(例如,傳輸文件或放棄文件)。

l  227 進入被動模式 (h1,h2,h3,h4,p1,p2)。

l  230 用戶已登錄,繼續進行。

l  250 請求的文件操作正確,已完成。

l  257 已創建「PATHNAME」。

 

3xx – 肯定的中間答覆

該命令已成功,但伺服器需要更多來自客戶端的資訊以完成對請求的處理。

l  331 用戶名正確,需要密碼。

l  332 需要登錄帳戶。

l  350 請求的文件操作正在等待進一步的資訊。

 

4xx – 瞬態否定的完成答覆

該命令不成功,但錯誤是暫時的。如果客戶端重試命令,可能會執行成功。

l  421 服務不可用,正在關閉控制連接。如果服務確定它必須關閉,將向任何命令發送這一應答。

l  425 無法打開數據連接。

l  426 Connection closed; transfer aborted.

l  450 未執行請求的文件操作。文件不可用(例如,文件繁忙)。

l  451 請求的操作異常終止:正在處理本地錯誤。

l  452 未執行請求的操作。系統存儲空間不夠。

 

5xx – 永久性否定的完成答覆

該命令不成功,錯誤是永久性的。如果客戶端重試命令,將再次出現同樣的錯誤。

l  500 語法錯誤,命令無法識別。這可能包括諸如命令行太長之類的錯誤。

l  501 在參數中有語法錯誤。

l  502 未執行命令。

l  503 錯誤的命令序列。

l  504 未執行該參數的命令。

l  530 未登錄。

l  532 存儲文件需要帳戶。

l  550 未執行請求的操作。文件不可用(例如,未找到文件,沒有訪問許可權)。

l  551 請求的操作異常終止:未知的頁面類型。

l  552 請求的文件操作異常終止:超出存儲分配(對於當前目錄或數據集)。

l  553 未執行請求的操作。不允許的文件名。

 

常見的 FTP 狀態程式碼及其原因

l  150 – FTP 使用兩個埠:21 用於發送命令,20 用於發送數據。狀態程式碼 150 表示伺服器準備在埠 20 上打開新連接,發送一些數據。

l  226 – 命令在埠 20 上打開數據連接以執行操作,如傳輸文件。該操作成功完成,數據連接已關閉。

l  230 – 客戶端發送正確的密碼後,顯示該狀態程式碼。它表示用戶已成功登錄。

l  331 – 客戶端發送用戶名後,顯示該狀態程式碼。無論所提供的用戶名是否為系統中的有效帳戶,都將顯示該狀態程式碼。

l  426 – 命令打開數據連接以執行操作,但該操作已被取消,數據連接已關閉。

l  530 – 該狀態程式碼表示用戶無法登錄,因為用戶名和密碼組合無效。如果使用某個用戶帳戶登錄,可能鍵入錯誤的用戶名或密碼,也可能選擇只允許匿名訪問。如果使用匿名帳戶登錄,IIS 的配置可能拒絕匿名訪問。

l  550 – 命令未被執行,因為指定的文件不可用。例如,要 GET 的文件並不存在,或試圖將文件 PUT 到您沒有寫入許可權的目錄。

 

 

4 FTP客戶端

ftp命令程式:是最簡單的FTP客戶端工具,Windows和Linux都擁有ftp命令程式,可以連接到FTP伺服器進行互動式的上傳、下載通訊。

圖形化FTP客戶端工具:Windows中較常用的包括CuteFTP、FlashFXP、LeapFTP、Filezilla等,在圖形化的客戶端程式中,用戶通過滑鼠和菜單即可訪問、管理FTP資源,而不需要掌握FTP交互命令,更易於使用。

下載工具:FlashGet、Wget等,包括大多數網頁瀏覽器程式,都支援通過FTP協議下載文件,但因不具備FTP上傳管理功能,通常不稱為FTP客戶端工具。

本案例採用的FTP客戶端工具:Filezilla、LFTP(yum安裝)。

官方網站://filezilla-project.org/download.php?show_all=1

vsftp部署安裝

 

 

主配置文件:/etc/vsftpd/vsftpd.conf

主程式:/usr/sbin/vsftpd
       常用的全局配置項:

l  listen=YES:是否以獨立運行的方式監聽服務

l  listen_address=192.168.x.x:設置監聽的 IP 地址

l  listen_port=21:設置監聽 FTP 服務的埠號

l  write_enable=YES:是否啟用寫入許可權

l  download_enable=YES:是否允許下載文件

l  userlist_enable=YES:是否啟用 user_list 列表文件

l  userlist_deny=YES:是否禁用 user_list 中的用戶

l  max_clients=0:限制並發客戶端連接數

l  max_per_ip=0:限制同一 IP 地址的並發連接數

l  guest_enable=YES:啟用虛擬用戶

l  user_config_dir=/etc/vsftpd/vsftpd_user_conf :虛擬用戶使用的配置文件目錄

l  allow_writeable_chroot=YES:允許寫入用戶主目錄

常用的匿名 FTP 配置項:

l  anonymous_enable=YES:啟用匿名訪問

l  anon_umask=022:匿名用戶所上傳文件的許可權掩碼

l  anon_root=/var/ftp:匿名用戶的 FTP 根目錄

l  anon_upload_enable=YES:允許上傳文件

l  anon_mkdir_write_enable=YES:允許創建目錄

l  anon_other_write_enable=YES:開放其他寫入權

l  anon_max_rate=0:限制最大傳輸速率(位元組/秒)
常用的本地用戶 FTP 配置項:

l  local_enable=YES:是否啟用本地系統用戶

l  local_umask=022:本地用戶所上傳文件的許可權掩碼

l  local_root=/var/ftp:設置本地用戶的 FTP 根目錄

chroot_local_user=YES:是否將用戶禁錮在主目錄

創建帳號數據

vsftpd服務使用Berkeley DB格式的資料庫文件來存放虛擬用戶帳號。建立這種資料庫文件需要用到db_load工具,db_load工具由db4-utils軟體包提供,默認已安裝。

① 創建文本格式的用戶名、密碼列表。

奇數行:帳號名,偶數行:密碼(即上一行中帳號的密碼)

② 轉化為 Berkeley DB 格式的數據文件

需要db_load 轉換工具,默認已安裝。

l  「-f」用於指定數據源文件

l  「-T」表示允許非Berkeley DB的應用程式使用從文本格式轉換的DB數據文件

l  「-t hash」用於指定讀取數據文件的基本方法

③ 為了提高虛擬用戶帳號文件的安全性,應將文件許可權設置為600,以免數據外泄。

① 創建 FTP 根目錄及虛擬用戶映射的系統用戶(此帳號無需設置密碼及登錄shell)。如下:

 

 

 

t@ftp ~]# chmod -R 755 /home/vsftpd

① 建立支援虛擬用戶的PAM認證文件
       創建好虛擬用戶的帳號數據文件後,還需要對vsftpd服務的配置做相應的調整,以便識別並讀取新的用戶資訊。在vsftpd伺服器中,用戶認證是通過PAM(Pluggable Authentication Module,可插拔認證模組)機制來實現的,該機制包含靈活的選擇認證方式。Vsftpd服務默認的PAM認證文件位於/etc/pam.d/vsftpd,該文件適用於以Linux主機的系統用戶帳號進行認證。若要讀取虛擬用戶的帳號數據文件,則需要創建新的PAM認證配置。

 

 

 

 

添加虛擬用戶支援

在 vsftpd.conf 文件中添加虛擬用戶支援配置。

 

 

 

 

① 為不同的虛擬用戶建立獨立的配置文件

通過前面的幾個步驟,實際上已經可以重新載入vsftpd並提供服務了,使用任一個虛擬用戶帳號都可以登錄FTP伺服器並下載文件。但因為所有的虛擬用戶都映射到同一個系統用戶帳號,因此FTP訪問許可權也是相同的,要麼只能下載,要麼只能上傳。

若要為不同的虛擬用戶帳號設置不同的訪問許可權,可以通過為每個虛擬用戶建立單獨的配置文件來實現。為FTP用戶啟用獨立配置文件,需要修改vsftpd.conf配置文件,添加「user_config_dir」配置項。

 

有了上述配置以後,就可以在/etc/vsftpd/vsftpd_user_conf 目錄中為每個虛擬用戶分別建立配置文件了。

 

 

 

重啟服務並測試

重啟服務生效配置文件:

 

使用虛擬 FTP 賬戶訪問測試:

zhangsan用戶可以登錄,並可以瀏覽、下載,也可以上傳。

測試之前:關閉防火牆以及安全規則;

 

 

 

 

使用lftp工具訪問

NFS節點上部署lftp客戶端:(命令行ftp客戶端)

[root@nfs ~]# yum -y install lftp

# lftp [email protected]

 

 

 

可以使用客戶端工具FileZilla Client查看文件

 

 

 

 

使用lftp相比使用ftp的優勢較多,可以顯示上傳下載的百分比進度以及可以上傳下載文件夾。

lftp 用戶名:密碼@ftp地址:傳送埠(默認21)

用法:

lftp username:[email protected]:21

lftp [email protected] 回車     ##默認21埠 回車後輸入密碼

lftp 127.0.0.1 回車   ##回車後 login 登錄

lftp 回車 –> open 127.0.0.1 –> login 登錄

訪問限制黑白名單

設置ftp黑白名單:(系統帳號FTP登錄限制文件)

ftpusers和user_list兩個文件用途和區別:

ftpusers它不受任何配置項影響,總是有效,是黑名單!

 

為了說明這個問題,我們來建立兩個測試用戶:

test1: 在user_list中

test2:不在user_list中

然後我們分別給兩個配置項取不同的值,分4種Case進行測試:

Case 1: userlist_enable=YES, userlist_deny=YES

test1: 拒絕登入

test2: 允許登錄

Case 2: userlist_enable=YES, userlist_deny=NO

test1: 允許登錄

test2:拒絕登錄(如user_list文件開頭的注釋所述,甚至不會提示輸入密碼,即無登入提示框,直接拒絕連接)

Case 3: userlist_enable=NO,userlist_deny=NO

test1: 允許登錄

test2: 允許登錄

Case 4: userlist_enable=NO,userlist_deny=YES

test1: 允許登錄

test2: 允許登錄

當且僅當userlist_enable=YES時:userlist_deny項的配置才有效,user_list文件才會被使用;當其為NO時,無論userlist_deny項為何值都是無效的,本地全體用戶(除去ftpusers中的用戶)都可以登入FTP

當userlist_enable=YES時,userlist_deny=YES時:user_list是一個黑名單,即:所有出現在名單中的用戶都會被拒絕登入;

當userlist_enable=YES時,userlist_deny=NO時:user_list是一個白名單,即:只有出現在名單中的用戶才會被准許登入(user_list之外的用戶都被拒絕登入);另外需要特別提醒的是:使用白名單後,匿名用戶將無法登入!除非顯式在user_list中加入一行:anonymous

NFS服務

4.1 什麼是NFS

它最大的功能就是可以通過網路,讓不同的機器、不同的作業系統可以共享彼此的文件。

NFS伺服器可以讓PC將網路中的NFS伺服器共享的目錄掛載到本地端的文件系統中,在本地端的系統中來看,那個遠程主機的目錄就好像是自己的一個磁碟分區一樣,在使用上相當便利;

而 NFS是通過網路來進行伺服器端和客戶端之間的數據傳輸,那麼兩者之間的傳輸數據就要有相對應的網路埠;基本上NFS伺服器的埠開在2049上,但是由於文件系統較為複雜,NFS其他程式需要開啟一些額外的埠,而這些額外埠又是隨機的;那麼客戶端如何去知道這些額外隨機埠呢?

通過遠程過程調用(Remote Procedure Call,RPC)協議來實現!

 

4.2 RPC與NFS如何通訊

因為NFS支援的功能相當多,而不同的功能都會使用不同的程式來啟動,每啟動一個功能就會啟用一些埠來傳輸數據,因此NFS的功能對應的埠並不固定,客戶端要知道NFS伺服器端的相關埠才能建立連接進行數據傳輸,而RPC就是用來統一管理NFS埠的服務,並且統一對外的埠是111,RPC會記錄NFS埠的資訊,如此我們就能夠通過RPC實現服務端和客戶端溝通埠資訊。

通訊步驟:

1)首先伺服器端啟動RPC服務,並開啟111埠;

2)伺服器端啟動NFS服務,並向RPC註冊埠資訊;

3)客戶端啟動RPC(portmap服務),向服務端的RPC(portmap)服務請求服務端的NFS埠;

4)服務端的RPC(portmap)服務回饋NFS埠資訊給客戶端;

5)客戶端通過獲取的NFS埠來建立和服務端的NFS連接並進行數據的傳輸。

 

4.3 NFS企業在企業中的應用場景

在企業集群架構的工作場景中,NFS網路文件系統一般被用來存儲共享影片、圖片、附件等靜態資源文件,通常網站用戶上傳的文件都會放到NFS共享中,例如BBS產品的圖片、附件、頭像(網站BBS的程式不要放在NFS共享中),然後前端所有節點在訪問這些靜態資源時都會讀取NFS存儲上的資源。

NFS是當前互聯網系統架構中最常用的數據存儲服務之一,特別是中小型網站應用頻率更高。

 

 

安裝所需依賴包(兩台機器都需要安裝):

安裝完後查看nfsnobody用戶在不在:

 

 

 啟動NFS相關服務

啟動rpc服務

 

 查看rpc埠

 

 啟動nfs服務

 

 

 

 

 創建共享目錄  更改目錄許可權

 

 編輯nfs配置文件

生效配置與檢驗測試

 

 

用於管理NFS(Network File System)文件系統,在不直接編輯/etc/exports文件的情況下,可用exportfs來操作(命令屬性、磁碟管理、命令屬許可權、超級用戶、普通用戶)。

# exportfs [-aruv]

參數說明如下:

l  -a:全部掛載(或卸載)/etc/exports文件內的設定。

l  -r:重新掛載/etc/exports中的設置,此外同步更新/etc/exports及/var/lib/nfs/xtab中的內容。

l  -u:卸載某一目錄。

l  -v:在export時將共享的目錄顯示在螢幕上。

檢查有許可權掛載的伺服器是否能掛載:

方法1:

運用showmount命令查詢

# showmount –help

 Usage: showmount [-adehv]

        [–all] [–directories] [–exports]

        [–no-headers] [–help] [–version] [host]

l  -a或–all    以 host:dir 這樣的格式來顯示客戶主機名和掛載點目錄。

l  -d或–directories    僅顯示被客戶掛載的目錄名。

l  -e或–exports    顯示NFS伺服器的輸出清單。

l  -h或–help    顯示幫助資訊。

l  -v或–version    顯示版本信。

l  –no-headers    禁止輸出描述頭部資訊。

顯示指定NFS伺服器連接NFS客戶端的資訊

# showmount 192.168.100.12  #此ip為nfs伺服器的

顯示輸出目錄列表

# showmount -e

顯示指定NFS伺服器輸出目錄列表(也稱為共享目錄列表)

# showmount -e 192.168.100.12

顯示被掛載的共享目錄

# showmount -d

顯示客戶端資訊和共享目錄

# showmount -a

顯示指定NFS伺服器的客戶端資訊和共享目錄

# showmount -a 192.168.100.12

showmount -e IP地址或localhost   

 

 

.1 crond服務介紹

crond是linux下用來周期性的執行某種任務或等待處理某些事件的一個守護進程,與windows下的計劃任務類似,當安裝完成作業系統後,默認會安裝此服務工具,並且會自動啟動crond進程,crond進程每分鐘會定期檢查是否有要執行的任務,如果有要執行的任務,則自動執行該任務。

Linux下的任務調度分為兩類,系統任務調度和用戶任務調度。

① 系統任務調度:系統周期性所要執行的工作,比如寫快取數據到硬碟、日誌清理等。

在/etc/crontab文件,這個就是系統任務調度的配置文件。

 

② 用戶任務調度:用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。

用戶可以使用 crontab 工具來訂製自己的計劃任務。

用戶所建立的crontab文件中,每一行都代表一項任務,每行的每個欄位代表一項設置,它的格式共分為六個欄位,前五段是時間設定段,第六段是要執行的命令段,格式如下:

minutehourday month week command

各個欄位的含義:

l  minute:表示分鐘,可以是從0到59之間的任何整數。

l  hour:表示小時,可以是從0到23之間的任何整數。

l  day:表示日期,可以是從1到31之間的任何整數。

l  month:表示月份,可以是從1到12之間的任何整數。

l  week:表示星期幾,可以是從0到7之間的任何整數,這裡的0或7代表星期日。

l  command:要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。

l  在以上各個欄位中,還可以使用以下特殊字元:

l  星號(*):代表所有可能的值,例如day欄位如果是星號,則表示在滿足其它欄位的制約條件後每天都執行該命令操作。

l  逗號(,):可以用逗號隔開的值指定一個列表範圍,例如,「1,2,5,7,8,9」

l  中杠(-):可以用整數之間的中杠表示一個整數範圍,例如「3-6」表示「3,4,5,6」

l  正斜線(/):可以用正斜線指定時間的間隔頻率,例如在hour欄位中「0-23/2」表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute欄位,表示每十分鐘執行一次。

檢驗是否安裝crontab:

如果未安裝crontab,運用本地yum安裝部署:

 

啟動服務並檢查服務狀態:

 

l  -u user   用來設定某個用戶的 crontab 服務,例如 “-u demo” 表示設備 demo

l  用戶的 crontab 服務,此選項一般有 root 用戶來運行。

l  -e    編輯某個用戶的 crontab 文件內容。如果不指定用戶,則表示編輯當前用戶的 crontab 文件。

l  -l     顯示某用戶的 crontab 文件內容,如果不指定用戶,則表示顯示當前用戶的 crontab 文件內容。

l  -r  從 /var/spool/cron 刪除某用戶的 crontab 文件,如果不指定用戶,則默認刪除當前用戶的 crontab 文件。

l  -i     在刪除用戶的 crontab 文件時,給確認提示。

 

 

給NFS節點掛載一個20G的磁碟

 

 

基礎搭建

修改主機名

關閉防火牆

 

yum安裝ftp

啟動ftp設置開機啟動

 

 創建虛擬用戶帳號

刪除原有的users.db

轉化為 Berkeley DB 格式的數據文件:

設置DB文件許可權提高安全性:

 

 

建立獨立的配置文件

 

 

重啟服務

 

 NFS部署

檢查環境  安裝nfs依賴包

啟動nfs相關服務 啟動rpc服務: 啟動nfs服務 查看rpc埠

 

 查看埠映射情況

 

 劃分分區

 

格式化分區 永久掛載

 

創建目錄 增加掛載

 

 

 

生效配置與檢驗