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安裝)。
官方網站:https://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 zhangsan@192.168.63.131
可以使用客戶端工具FileZilla Client檢視檔案
使用lftp相比使用ftp的優勢較多,可以顯示上傳下載的百分比進度以及可以上傳下載資料夾。
lftp 使用者名稱:密碼@ftp地址:傳送埠(預設21)
用法:
lftp username:password@127.0.0.1:21
lftp username@127.0.0.1 回車 ##預設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埠
檢視埠對映情況
劃分分割槽
格式化分割槽 永久掛載
建立目錄 增加掛載
生效配置與檢驗