1. 程式人生 > >FTP 文件傳輸協議

FTP 文件傳輸協議

stand 推薦 包括 lose 錯誤 lftp 情況 含義 out

FTP:是文件傳輸協議(file transfer protocol)的縮寫。用來實現文件的上傳(upload)和下載(download)。
FTP是工作在C/S架構模式下。
C/S架構:是客戶端Client/服務器server訪問模式。C/S的特點是客戶機必須使用專用的客戶端程序去訪問服務器。
B/S架構:是瀏覽器Browser、服務器Server訪問模式。B/S的特點是客戶機只需用IE、Firefox等瀏覽器來訪問服務器。B/S架構通常是用來開發基於web網站的應用程序。

vsftpd:是非常安全的ftp守護進程(Very secure ftp Daemon)。
進程:正在進行(運行running)的程序。

守護進程Daemon:網絡服務類的程序都會有守護進程。守護進程是指實時監測服務訪問狀態的程序。通常都是在系統後臺運行。

FTP的工作端口:
21 控制端口,用於在客戶機和服務器之間建立連接。
20 數據端口。用於服務器給客戶機主動進行數據連接。
網絡服務端口號的作用:用來標示服務器上的不同業務(服務)。

服務器:提供服務的機器。

vsftpd的部署思路:(網絡服務的部署通用思路)
0.關閉安全功能,並查狀態:
systemctl stop firewalld ; setenforce 0
systemctl status firewalld ; getenforce
1.查軟件是否已安裝,如果未安裝就安裝軟件。

2.啟動服務,並允許開機自動啟動
3.設置共享目錄,重新加載設置。
4.做本地(內測)訪問測試,做異地(公測)訪問測試。

環境準備:
關閉安全功能,並查狀態:
systemctl stop firewalld ; setenforce 0
systemctl status firewalld ; getenforce

vsftpd、ftp、lftp安裝:
說明:vsftpd是服務器端程序
ftp、lftp是客戶端程序

查是否已安裝:rpm -q vsftpd ftp lftp
安裝:yum install -y vsftpd ftp lftp
查軟件的文件列表:rpm -ql vsftpd

查配置文件列表:rpm -qc vsftpd

vsftpd 服務管理:
重啟動服務:systemctl restart vsftpd
允許開啟自動啟動:systemctl enable vsftpd
查服務狀態:systemctl status vsftpd

共享需要的文件:
vsftpd的默認共享目錄:
匿名用戶(ftp或anonymous)共享:/var/ftp目錄
普通用戶:訪問的是普通用戶自己的家目錄,通常是"/home/用戶名"文件夾
註意:root用戶默認不能登錄vsftpd服務器來訪問共享,因為root賬號在黑名單裏。

vsftpd的配置文件:rpm -qc vsftpd
/etc/logrotate.d/vsftpd 日誌輪滾策略文件
/etc/pam.d/vsftpd pam認證文件(重點)
/etc/vsftpd/ftpusers 黑名單文件(重點)
/etc/vsftpd/user_list 用戶訪問列表文件(重點),默認是黑名單,但是可以設置成白名單
/etc/vsftpd/vsftpd.conf 服務的主配置文件(重點)

練習:將root用戶從ftpusers黑名單文件中註釋掉,重啟vsftpd服務,用root賬號訪問共享資源。
第1步:編輯黑名單文件1。
vim /etc/vsftpd/ftpusers 編輯黑名單文件1
#root 在此行行首添加#號

第1步:編輯黑名單文件2。
vim /etc/vsftpd/user_list 編輯黑名單文件2
#root 在此行行首添加#號

第3步:重啟服務。(修改黑名單文件是立即生效的,可以不重啟服務)。
systemctl restart vsftpd

第四步,做共享訪問測試。
win7/10訪問vsftpd共享:win+E-->ftp://root:[email protected]

linux用root訪問共享:
ftp 192.168.11.11 回車---》用戶名root回車--->密碼0回車-->看到successful表示登錄成功
lftp 192.168.11.11 -u root,0

練習:在centos系統中用useradd 創建tom用戶,設置登錄密碼為tom。然後分別用win7/10和centos做共享訪問測試。並在win7/10上傳一個文件到用戶的家目錄中。

問題:什麽時候讓user_list文件變成白名單?
答:由於當user_list為白名單時,僅允許白名單中的用戶訪問vsftpd共享。所以當系統中有1萬個用戶賬號時,我只讓3個人能訪問vsftpd文件共享服務,那麽就得用白名單。

練習:在系統中創建3個用戶tom、lucy、lily,給他們設置登錄密碼為0。用windows做ftp訪問共享測試,分別上傳一個文件到用戶的家目錄中。
useradd tom
useradd lucy
useradd lily
echo 0 | passwd --stdin tom
echo 0 | passwd --stdin lucy
echo 0 | passwd --stdin lily

win7/10訪問共享:
Win+E--> ftp://192.168.11.11回車--->右鍵菜單-->登錄-->用戶名和密碼-->上傳文件。

練習:采用user_list白名單功能,僅允許tom用戶訪問vsftpd共享。
第一步,將tom用戶加入到user_list文件中。
vim /etc/vsftpd/user_list 在文件最後添加如下內容
tom

第二步,將user_list設置成白名單文件。
vim /etc/vsftpd/vsftpd.conf
userlist_deny=NO 找到此行,如果沒有就在最後添加此行

第三步,重啟vsftpd服務.
systemctl restart vsftpd

第四步,分別用tom、lucy、lily訪問共享,看是否只有tom能訪問。
win7/10訪問共享:
Win+R-->cmd--> ftp 192.168.11.11回車--->用戶名和密碼-->看登錄是否成功( successful)

小結:vsftpd的用戶名單監測流程如下:
先監測user_list文件(是黑還是白)----》再監測ftpusers黑名單中是否有這個用戶。

練習:將tom用戶從ftpusers和user_list文件中刪除或用#號註釋掉。將/etc/vsftpd/vsftpd.conf主配置文件的userlist_deny=NO這行用#號註釋掉,並重啟vsftpd服務,最後用tom、lucy、lily做ftp的命令行訪問測試,確保這3個用戶都能訪問共享。

到此:ftpusers和user_list名單文件功能介紹完畢

vsftpd.conf主配置文件:
功能:對vsftpd軟件的功能進行設置,可以設置限速、匿名和普通用戶訪問權限、chroot等功能。

專家建議:修改主配置文件之前,最好備份一下配置文件。備份文件的後綴通常為.bak或.org。
cd /etc/vsftpd ; ls
cp -av vsftpd.conf{,.bak}
說明:-a 是復制時包括源文件的所有(all)的權限和屬性、selinux屬性都復制給目標文件。而-p選項時復制時不包含selinux屬性的。

練習:查看並熟悉vsftpd.conf主配置文件中的默認設置。查看時不包含#開頭(^#)的、空白行(^$),要求顯示行號。
grep -nEv ‘^#|^$‘ /etc/vsftpd/vsftpd.conf 內容如下(共13行)
12:anonymous_enable=YES 允許匿名訪問共享
16:local_enable=YES 允許本地普通用戶(是指用useradd創建的用戶)訪問共享
19:write_enable=YES 允許寫操作,即可寫權限
23:local_umask=022 本地用戶的umask值
37:dirmessage_enable=YES 允許顯示目錄信息
40:xferlog_enable=YES 允許xferlog日誌,xferlog文件路徑是/var/log/xferlog文件,僅記錄文件的上傳和下載日誌
43:connect_from_port_20=YES 啟用20號端口的連接(data數據端口)
57:xferlog_std_format=YES 啟用xferlog標準(std是standard)格式的日誌
115:listen=NO 不啟用ipv4監聽
124:listen_ipv6=YES 啟用IPV6監聽,會向下兼容ipv4
126:pam_service_name=vsftpd vsftpd的pam用戶認證服務文件,是/etc/pam.d/vsftpd文件
127:userlist_enable=YES 啟用user_list用戶列表文件
128:tcp_wrappers=YES 啟用tcp_wrappers防火墻功能,用來做基於IP的TCP訪問控制

vsftpd.conf默認設置的功能:
1.允許匿名用訪問共享,訪問的是/var/ftp目錄,且只能下載文件,不能上傳文件。
2.允許普通用訪問共享,訪問的是用戶自己的家目錄,既能下載文件,也能上傳文件。
3.普通用戶用ftp命令登錄到vsftpd服務器之後,能chroot到服務器的其他目錄路徑下,此功能不安全,建議關掉。

練習:設置vsftpd.conf配置文件中不允許anonymous匿名用戶訪問vsftpd共享,重啟服務後,做訪問測試。測試完畢後,將設置還原,並重啟服務。

xferlog是一個上傳下載日誌。只是記錄上傳下載。如果要看更加具體的登錄的一些日誌,需要vsftpd.log日誌文件。
例:/var/log/xferog日誌文件內容如下。
Tue Jan 22 11:53:35 2019,1 ,::ffff:192.168.11.1 , 2061, /home/tom/qr.png ,b _ i r tom ftp 0 c
發生時間,傳輸所花時間,客戶端IP,文件大小byte,文件名路徑,文件傳輸格式,文件特殊處理標記,i上傳或o下載,r真實用戶登錄,tom用戶,ftp服務器名,認證方式為0,認證用戶ID為
,傳輸完成狀態為c已完成。

下面解釋一下xferlog日誌文件中每一列的含義。
列號 列功能 說明 示例
1 發生時間 記錄發生的時間 例:SunJun1612:23:532013
2 文件傳輸時間 傳輸該文件使用的時間 例:1
3 客戶端 客戶端主機的IP或主機名 例:192.168.1.100
4 文件大小 單位:字節 例:12
5 文件名 上傳或下載的文件名稱 例:/pub/dd
6 文件傳輸類型 a表示ASCII(文本),b(二進制) 例:b
7 包括四種文件特殊處理標記,“_”表不做任何處理,C表示文件時壓縮格式,U表示文件是非壓縮格式,T表示是tar格式
8 文件傳輸方向 o表示從服務器到客戶端,i相反 例:i
9 用戶登錄方式 a表示匿名登錄,g表示虛擬用戶登錄,r表示真實用戶登錄。 例:a
10 用戶名稱 用戶名稱 ?(匿名用戶)
11 服務器名 一般為FTp ftp
12 認證方式 0表示無,1表示RFC931認證 例:0
13 認證的用戶ID 表示無法獲得用戶ID 例:
14 傳輸完成狀態 c表示完成,i表示沒完成 例:i

以上基本上就是我們的xferlog日誌記錄內容。


vsftpd的chroot牢籠功能:vim /etc/vsftpd/vsftpd.conf 找到如下內容
#chroot牢籠功能:鎖定用戶在自己的家目錄中,即不允許用戶訪問自己家目錄以外的目錄。
#chroot_local_user=YES 允許本地用戶chroot牢籠功能(change root),默認為NO不啟用
#chroot_list_enable=YES 啟用chroot_list文件功能,默認NO不啟用此功能

(default follows)

#chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件及其路徑,默認無此文,需要用戶自己創建

chroot牢籠四種情況:
1.全部不鎖(默認情況)
2.全部加鎖(用兩行代碼)
3.少數不加鎖(用三行代碼)
4.少數加鎖(用四行代碼)

情況1.關閉所有普通用戶的牢籠功能(即不鎖,默認情況)。設置如下
#chroot_local_user=YES 允許本地用戶chroot牢籠功能(change root),默認為NO不啟用
#chroot_list_enable=YES 啟用chroot_list文件功能,默認NO不啟用此功能

(default follows)

#chroot_list_file=/etc/vsftpd/chroot_list

情況2.啟用所有普通用戶的牢籠功能(即對所有人加鎖)。設置如下
chroot_local_user=YES 啟用本地用戶chroot牢籠功能(change root),默認為NO不啟用
allow_writeable_chroot=YES 允許chroot牢籠功能下執行寫操作(centos7中必加此行)

測試練習:將vsftpd.conf文件中的chroot_local_user=YES功能啟用,重啟服務,用tom、lucy用訪問共享,執行ls /usr看命令結果。

情況3.給指定的少數普通用戶不啟用牢籠功能(即少數人不加鎖,白名單)。設置如下
chroot_local_user=YES 啟用本地用戶chroot牢籠功能(change root),默認為NO不啟用
allow_writeable_chroot=YES 允許chroot牢籠功能下執行寫操作(centos7中必加此行)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件及其路徑

測試練習:將vsftpd.conf文件中的chroot_list做如下白名單設置,重啟服務,用tom、lucy用訪問共享,執行pwd看命令結果。
第1步,編輯vsftpd.conf文件。
vim /etc/vsftpd/vsftpd.conf
啟用如下chroot的4行代碼
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

第2,修改chroot_list名單文件。(此文件中的用戶不啟用牢籠功能)
vim /etc/vsftpd/chroot_list 添加如下內容
lucy
lily

第3步,重啟服務,分別在ftp命令行用tom、lucy、lily做訪問測試,執行pwd命令看顯示的工作路徑。
測試結果:tom啟用了牢籠功能,lucy、lily是不啟用牢籠功能的。

情況4.給指定的少數普通用戶啟用牢籠功能(即少數人加鎖,黑名單)。設置如下
#chroot_local_user=YES 啟用本地用戶chroot牢籠功能(change root),默認為NO不啟用
allow_writeable_chroot=YES 允許chroot牢籠功能下執行寫操作(centos7中必加此行)
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list 指定chroot_list文件及其路徑

測試練習:將vsftpd.conf文件中的chroot功能做如下chroot_list黑名單設置,重啟服務,用tom、lucy用訪問共享,執行pwd看命令結果。
第1步,編輯vsftpd.conf文件。
vim /etc/vsftpd/vsftpd.conf
啟用如下chroot的4行代碼
#chroot_local_user=YES
allow_writeable_chroot=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list

第2,修改chroot_list名單文件。(此文件中的用戶不啟用牢籠功能)
vim /etc/vsftpd/chroot_list 添加如下內容
lucy
lily

第3步,重啟服務,分別在ftp命令行用tom、lucy、lily做訪問測試,執行pwd命令看顯示的工作路徑。
測試結果:lucy、lily啟用了牢籠功能,tom是不啟用牢籠功能的。

練習:將vsftpd.conf配置文件中的chroot功能的配置選項代碼全部註釋掉。再繼續研究新的功能。


需求:實現允許anonymous匿名用戶既能下載又能上傳文件文件。
需求分析:匿名用戶要想對共享目錄有rw可讀可寫的權限,必須滿足以下2個條件:
1.文件共享軟件必須允許這個用戶有可讀可寫的權限。
2.用戶對共享目錄自身要有可讀可寫的權限。
3.匿名用戶僅允許上傳文件到/var/ftp中的子目錄中。如/var/ftp/upload,且ftp匿名用戶對upload目錄要有可讀可寫權限。

警告:/var/ftp目錄的屬主、屬組不允許修改,且other權限不允許有w可寫權限,否則用ftp匿名用戶訪問共享時會提示下面這個500錯誤:
500 OOPS: vsftpd: refusing to run with writable root inside chroot()
Login failed.
421 Service not available, remote server has closed connection

實施參考:
第1步,在vsftpd.conf配置文件中允許anonymous匿名用戶有可讀可寫的權限。
vim /etc/vsftpd/vsftpd.conf 找到如下代碼,去掉29、33行的#號
12 anonymous_enable=YES
29 #anon_upload_enable=YES 允許匿名用戶上傳
33 #anon_mkdir_write_enable=YES 允許匿名用戶用mkdir創建目錄
anon_other_write_enable=YES 允許匿名用戶執行rm刪除等操作(添加此行)
anon_world_readable_only=NO 關閉匿名用戶只讀的限制(為YES時會無法下載)

第2步,用root用戶創建/var/ftp/upload目錄,權限為777或屬主和屬組均為ftp,重啟vsftpd服務,在win7/10中用ftp匿名用戶訪問共享ftp://192.168.11.11,上傳一個文件到upload共享目錄,看是否能傳上去。結果是可以匿名用戶上傳文件到upload目錄中。
mkdir -v /var/ftp/upload
chown -v ftp:ftp /var/ftp/upload 或 chmod -v 777 /var/ftp/upload
systemctl restart vsftpd


vsftpd.conf的其他配置選項:man vsftpd.conf
48 #chown_uploads=YES 允許修改上傳後的文件的屬主和屬組
49 #chown_username=whoever 文件的屬主、屬組修改成當前訪問共享的用戶
53 #xferlog_file=/var/log/xferlog 指定xferlog日誌文件名及其路徑,當xferlog_enable為YES時,此項默認為啟用
60 #idle_session_timeout=600 (重點)空閑會話超時為600秒(即10分鐘),默認開啟了,時間是300秒
idle空閑會話超時時間是指用戶登錄到ftp服務後,n秒都沒執行操作,服務器自動將此用戶斷開連接。(防止客戶機占用服務器網絡資源)
63 #data_connection_timeout=120 (重點)數據連接超時時間為120秒,默認開啟了,時間是300秒
data_connection超時時間是指當客戶端下載或上傳文件時,由於網絡不穩定,當數據掉線時間超過120秒,文件就下載或上傳失敗。(防止客戶機占用服務器網絡資源)
67 #nopriv_user=ftpsecure
72 #async_abor_enable=YES 允許異步方式傳輸數據
83 #ascii_upload_enable=YES 允許以ascii編碼方式上傳文件,默認為NO,是以binary二進制方式上傳
84 #ascii_download_enable=YES 允許以ascii編碼方式下載文件,默認為NO,是以binary二進制方式下載
87 #ftpd_banner=Welcome to blah FTP service. (重點)自定義banner歡迎提示語(標語)(用於打廣告)
banner_file=/etc/vsftpd/banner.txt (重點)自定義banner標語文件(用於打廣告)
91 #deny_email_enable=YES
93 #banned_email_file=/etc/vsftpd/banned_emails

local_max_rate=0 本地用戶(普通用戶)最大傳輸速度,0是不限速。單位是byte字節
anon_max_rate=0 匿名用戶最大傳輸速度,0是不限速。單位是byte字節
anon_other_write_enable=YES 允許匿名用戶執行除了新建和上傳外的其他權限,如刪除、改名。

listen_port=21 監聽21號端口(默認開啟)
pasv_enable=YES 啟用pasv被動模式
pasv_min_port=5000 指定pasv被動模式的最小端口號
pasv_max_port=6000 指定pasv被動模式的最大端口號
dual_log_enable=YES 啟用/var/log/xferlog 和 /var/log/vsftpd.log 雙日誌文件(默認關閉)
max_per_ip=數字 單個IP的最大並發量(即單個客戶端IP能同時登錄的數量),同時下載幾個文件
max_clients=數字 最大客戶端數量(即並發量),即允許有多少個IP的客戶端同時訪問服務器

user_config_dir=/etc/vsftpd/userconf 定義用戶個人配置文件所在目錄。定義了這句之後,就要在userconf目錄中創建以用戶名命名的文件,這就是這個用戶的配置文件。其中加入一條local_root=/home/ftp為指定用戶登錄目錄。
setproctitle_enable=YES 將所有連接以不同的進程體現出來

練習:要求在vsftpd.conf中對每個用戶限制不同的文件傳輸速度,並且設置不同的登錄“標示語”。
第1步,在vsftpd.conf配置文件中添加如下功能選項。
vim /etc/vsftpd.conf 添加如下內容
user_config_dir=/etc/vsftpd/userconf 指定用戶個性化配置文件的主目錄

第2步,創建/etc/vsftpd/userconf目錄,給tom限制上傳和下載速度為2MB/s(約2000000字節)。
mkdir -v /etc/vsftpd/userconf
vim /etc/vsftpd/userconf/tom 添加如下設置內容
local_max_rate=2000000

第3步,參考lucy的限速設置方法,給lucy設置成限制上傳和下載速度為8M/s(約2000000字節)。
vim /etc/vsftpd/userconf/tom 添加如下設置內容
local_max_rate=8000000


vsftpd的tcp_wrapers防火墻設置
查網絡服務對應的端口手冊文件:more /etc/services
tcp_wrapers的功能:是一個迷你的TCP防火墻,可以用來做基於TCP協議的應用程序的IP安全訪問控制。
配置文件:
白名單:/etc/hosts.allow
黑名單:/etc/hosts.deny

技巧:讓少數人為白戶,那麽先在hosts.deny中做拒絕所有(all)黑名單,然後在hosts.allow中做少數IP的放行白名單。

配置文件格式:man hosts.allow
格式說明: 守護進程名稱:主機名或IP地址
守護進程名稱可以是:vsftpd、sshd、httpd、in.tftpd等。
主機名或IP地址可以是:all所有主機、主機名、域名(網址)、IP地址、網絡地址、IP地址範圍。

設置舉例:
vim /etc/hosts.deny 黑名單
vsftpd:192.168.11.1 拒絕192.168.11.1這臺主機訪問vsftpd共享
sshd:192.168.11.1 拒絕192.168.11.1這臺主機訪問sshd共享

註意:做完hosts.deny黑名單測試後,請將hosts.deny文件中的設置註釋掉或刪掉。然後再做下面的vsftpd虛擬用戶項目。

vsftpd虛擬用戶
虛擬用戶:即非useradd創建的用戶賬號(非/etc/passwd中的賬號),而是用vim創建的屬於vsftpd的獨立用戶賬號。
虛擬用戶的優勢:可以避免系統中的用戶賬號過多,讓vsftpd文件共享軟件獨立管理自己的用戶賬號。

虛擬用戶賬號文件格式:
文件中的奇數行是用戶賬號,偶數行是用戶的密碼。

vsftpd的虛擬用戶方案思路:
0.準備工作:確保vsftpd文件共享服務已安裝,並已啟動vsftpd服務,且關閉了selinux和firewalld安全功能。
1.創建虛擬用戶賬號文件。
2.將虛擬用戶賬號用db_load轉換成加密的數據庫格式文件。
3.在vsftpd的pam認證文件中添加虛擬用戶賬號文件的認證關系。
4.用useradd創建一個普通用戶賬號vftper。
5.在vsftpd.conf配置文件中啟用guest來賓(即虛擬用戶)功能,設置一個真實用戶賬號,並將真實用戶賬號vftper和虛擬用戶賬號文件關聯起來。
6.給每個虛擬用戶賬號設置獨立的共享訪問速度和訪問目錄。
7.重啟vsftpd服務,並分別用虛擬用戶賬號訪問共享。

vsftpd虛擬用戶實施思路:
0.準備工作:確保關閉了selinux和firewalld安全功能。且vsftpd文件共享服務已安裝,並已啟動vsftpd服務。
setenforce 0
getenfroce
systemctl stop firewalld
systemctl status firewalld

1.創建虛擬用戶賬號文件。
cat > /etc/vsftpd/vuser.txt <<EOF
f1
passf1
f2
passf2
f3
passf3
EOF

2.將虛擬用戶賬號轉換成加密的數據庫格式文件。
yum provides db_load
yum install -y libdb-utils
cd /etc/vsftpd
ls
db_load -T -t hash -f /etc/vsftpd/vuser.txt /etc/vsftpd/vuserdb.db
chmod -v 600 /etc/vsftpd/vuserdb.db

db_load選項:
-T 是translation轉換文件格式
-t hash 指定格式轉換的算法為hash算法
-f 是指定要轉換格式的文件
/etc/vsftpd/vuser.txt 是要轉換格式的文件
/et/vsftpd/vuserdb.db 是轉換格式之後的文件

3.在vsftpd的pam認證文件中添加虛擬用戶賬號文件的認證關系。
cp -av /etc/pam.d/vsftpd{,.bak}
vim /etc/pam.d/vsftpd 做如下修改
#%PAM-1.0
#以下兩行的功能:僅能實現虛擬用戶訪問共享,普通用戶不能訪問共享。(不建議使用)
#required 意思是必須的 sufficient 意思是滿足的、備選的
#auth required pam_userdb.so db=/etc/vsftpd/vuserdb
#account required pam_userdb.so db=/etc/vsftpd/vuserdb
#以下功能選項的功能:既能讓虛擬用戶訪問共享,也能讓普通用戶訪問共享。(推薦使用)
auth sufficient pam_userdb.so db=/etc/vsftpd/vuserdb
account sufficient pam_userdb.so db=/etc/vsftpd/vuserdb
#以下幾行功能選項是vsftpd的默認pam認證文件內容。(無需修改)
session optional pam_keyinit.so force revoke
auth required pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed
auth required pam_shells.so
auth include password-auth
account include password-auth
session required pam_loginuid.so
session include password-auth

4.用useradd創建一個普通用戶賬號vftper。
useradd vftper -s /sbin/nologin
id vftper
ls -ld /home/vftper

5.在vsftpd.conf配置文件中設置一個真實用戶賬號,並將真實用戶賬號vftper和虛擬用戶賬號文件關聯起來。
cd /etc/vsftpd
cp -av vsftpd.conf{,.bak}
cat /etc/vsftpd/vsftpd.conf
vim vsftpd.conf 在文件最後添加如下內容
guest_enable=YES 允許來賓用戶訪問共享,即虛擬用戶
guest_username=vftper 指定來賓用戶名為vftper用戶(即第4步新建的用戶)
user_config_dir=/etc/vsftpd/vuser_conf 指定用戶配置文件目錄
allow_writeable_chroot=YES 允許chroot功能下執行寫操作(必須加此行,否則會登錄失敗)
#user_sub_token=$USER 使用用戶子令牌(通常不用)

6.給每個虛擬用戶賬號設置獨立的共享訪問速度和訪問目錄。
cd /etc/vsftpd
mkdir -v vuser_conf
cd vuser_conf
#創建f1、f2虛擬用戶的會員個性化設置文件,允許f1這個虛擬用戶在自己的家目錄中可讀可寫。
touch f1 f2
mkdir -v /home/vftper/{f1,f2,f3}
chmod -v 777 /home/vftper/{f1,f2,f3}
cat > f1 <<EOF
write_enable=YES
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/home/vftper/f1
EOF

#允許f2這個用戶在自己的家目錄中可讀,但不可寫。
cat > f2 <<EOF
#添加local_root這行即可,其余內容可以不添加。
local_root=/home/vftper/f2
write_enable=NO
anon_world_readable_only=NO
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

EOF

7.重啟vsftpd服務,並分別用虛擬用戶賬號訪問共享。
systemctl restart vsftpd
ftp 192.168.11.11 -->用f1、f2虛擬用戶分別訪問共享,測試文件的上傳。

到此,vsftpd的虛擬用戶項目試驗完畢。


ftp和lftp客戶端程序的操作功能:

ftp命令:
用法:ftp [選項] 主機名或IP地址

練習:用tom用戶登錄到ftp 192.168.11.11服務器上,執行如下的ftp內部命令。

ftp的內部操作命令:
help或? 顯示命令幫助
pwd 顯示遠程工作目錄路徑
ls 顯示遠程文件名列表
!本地命令 執行客戶機本地的操作命令,如!date 、 !ls
lcd 切換或查詢本地(local)路徑,如 lcd /etc 、 lcd /opt
cd 切換遠程網絡資源路徑
put 上傳單個本地當前目錄下的文件到遠程服務器的的當前工作目錄下.如put group
mput 上傳多個本地當前目錄下的文件到(同上),如 mput hosts
get 下載單個文件到當前的本地工作目錄下,如 get group
mget 下載多(multi)個文件到當前的本地工作目錄下,如 mget host

註意:put、mput、get、mget操作只用對本地當前工作目錄中的文件操作。
prompt 關閉或開啟交互式模式,即是否提示yes、no
verbose 開啟或關閉執行過程進度
delete 刪除服務器上的單個文件
mdelete 刪除服務器上的多個文件,如 mdelete hosts*
mkdir 在共享目錄中新建目錄,如 mkdir haha
rmdir 在共享目錄中刪除目錄,如 rmdir haha
passive 關閉或開啟ftp的被動數據傳輸模式
user 切換用戶登錄賬號
rename 修改共享目錄中的文件名

lftp命令:
用法:ftp [選項] 主機名或IP地址
例:lftp 192.168.11.11 -u tom,0
說明:-u 是指定用戶名和密碼,兩者間用逗號分隔

練習:用tom用戶登錄到ftp 192.168.11.11服務器上,執行如下的ftp內部命令。
lftp 192.168.11.11 -u tom,0

lftp的內部操作命令:
help或? 顯示命令幫助
pwd 顯示遠程工作目錄路徑
ls 顯示遠程文件名列表
!本地命令 執行客戶機本地的操作命令,如!date 、 !ls
lcd 切換或查詢本地(local)路徑,如 lcd /etc 、 lcd /opt
cd 切換遠程網絡資源路徑
put 上傳單個本地當前目錄下的文件到遠程服務器的的當前工作目錄下.如put /etc/group
mput 上傳多個本地當前目錄下的文件到(同上),如 mput /etc/host
get 下載單個文件到當前的本地工作目錄下,如 get group
mget 下載多(multi)個文件到當前的本地工作目錄下,如 mget host

mirror 下載共享目錄中當前的所有文件到本地的當前目錄下
mrm 刪除共享目錄中的多個文件,mrm刪目錄需要用-r選項,如 mrm host*
註意:put、mput、get、mget操作可用絕對路徑。


win7/10下的ftp客戶端軟件:
ftp、資源管理器(Win+E)、flashFXP

flashFXP客戶端軟件:優點是支持斷點續傳功能。
斷點續傳:是指客戶機重啟系統後可以繼續下載未完成文件內容。


ftp的工作模式:主動port、被動passive模式

ftp主動(port)模式工作過程:
1.客戶機和服務器建立連接關系(登錄): 客戶機(>1024的隨機端口號) <----> 服務器 21號port
2.雙方建立數據連接關系,傳輸數據:客戶機(>1024的隨機port) <----> 服務器 20號port

ftp被動(pasv)模式工作過程:
1.客戶機和服務器建立連接關系(登錄): 客戶機(>1024的隨機端口號) <----> 服務器 21號port
2.雙方建立數據連接關系,傳輸數據:客戶機(>1024的隨機port) <----> 服務器(>1024的隨機port)
說明:當ftp服務器上有防火墻時,通常客戶機是以被動模式去訪問ftp服務器的。在ftp服務器的vsftpd.conf和防火墻上要指定放行的被動模式端口範圍的最小值和最大值。
vsftpd.conf 的被動模式端口範圍:
pasv_min_port=5000
pasv_max_port=6000

vsftpd共享小結:
1.ftp是什麽?實現什麽功能?2個工作端口?
2.vsftpd的查、安裝、啟動、允許開機自啟動、查狀態、查配置文件?
3.vsftpd黑、白名單。ftpusers、user_list。
4.vsftpd.conf主配置文件的功能選項。如限速、並發量、banner標示語等設置。
5.vsftpd的chroot牢籠功能。熟悉四行chroot的代碼。
6.ftp、lftp是客戶端程序的命令使用:通過命令做文件的上傳、下載。
7.vsftpd的虛擬用戶(guest來賓用戶)功能。
8.vsftpd的匿名用戶上傳功能的實現。
9.ftp服務的主、被動模式工作過程。主、被動模式的區別?

FTP 文件傳輸協議