搭建FTP服務器實現文件共享
1 VSFTP服務器概述
4.1.1 FTP服務概述:
FTP服務器(File Transfer Protocol Server)是在互聯網上提供文件存儲和訪問服務的計算機,它們依照FTP協議提供服務。
FTP(File Transfer Protocol: 文件傳輸協議)作用:Internet 上用來傳送文件的協議。
常見FTP服務器:
Windows:Serv-U 、FTP Server、filezilla_server
Linux:ProFTPD:(Professional FTP daemon)一個Unix平台上或是類Unix平台上(如Linux, FreeBSD等)的FTP服務器程序。
1.2 VSFTP
VSFTP是一個基於GPL發布的類Unix系統上使用的FTP服務器軟件,它的全稱是Very Secure FTP 從此名稱可以看出來,編制者的初衷是代碼的安全。
特點:
它是一個安全、高速、穩定的FTP服務器。
VSFTP模式: C/S 模式
端口:
[root@K3 ~]# vim /etc/services
FTP監聽的端口有兩個:
端口20:用於傳輸數據
端口21:用於傳輸指令
FTP(File Service Protocol):文件服務協議。
1.3 工作流程(原理)分為兩種模式:
主動和被動模式:
FTP會話包含了兩個通道,控制通道和數據傳輸通道,FTP的工作有兩種模式,一種是主動模式,一種是被動模式,以FTP Server為參照,主動模式,服務器主動連接客戶端傳輸,被動模式,等待客戶的連接。
主動模式的工作原理:
FTP客戶端連接到FTP服務器的21號端口,發送用戶名和密碼,客戶端隨機開放一個端口(1024以上),發送PORT命令到FTP服務器,告知服務器客戶端采用主動模式並開放端口,FTP服務器收到PORT主動模式命令和端口后,通過服務器的20號端口和客戶端開放的端口連接,發送數據,原理如圖 4-2 所示,(無論是主動還是被動模式,首先的控制通道都是先建立起來,只是在數據傳輸模式上的區別)

PASV是Passive的縮寫,中文成為被動模式,工作原理:FTP客戶端連接到FTP服務器所監聽的21號端口,發送用戶名和密碼,發送PASV命令到FTP服務器,服務器在本地隨機開放一個端口(1024以上),然后把開放的端口告知客戶端,而后客戶端再連接到服務器開放的端口進行數據傳輸

2.搭建匿名登錄FTP
| 服務器 | IP | 角色 |
| k2 | 10.27.17.92 | vsftp服務端 |
| k3 | 10.27.17.93 | 客服端 |
| k4 | 10.27.17.94 | windows |
2.1 安裝服務端
[root@k2 ~]# yum -y install vsftpd
2.2 安裝客戶端:
[root@xuegod64 ~]# yum install -y lftp #使用Yum安裝ftp客戶端。
lftp
注:從CentOS開始,系統鏡像中默認沒有ftp客戶端命令。取而代之的是lftp命令。
Linux客戶端:
lftp 是一個功能強大的下載工具,它支持訪問文件的協議: ftp、ftps、http、https、hftp、fish(其中ftps和https需要在編譯的時候包含openssl庫),llftp的界面非常類似一個Shell,有命令補全、歷史記錄、允許多個后台任務執行等功能,使用起來非常方便。它還有書簽、排隊、鏡像、斷點續傳、多進程下載、等功能
2.3 配置文件位置:
/etc/vsftpd/vsftpd.conf #vsftpd 的核心配置文件。
/etc/vsftpd/ftpusers #用於指定哪些用戶不能訪問FTP 服務器,即黑名單。
/etc/vsftpd/user_list #指定允許使用VSFTP的用戶列表文件,即白名單。
首先請明確一點:ftpusers不受任何配制項的影響,它總是有效,它是一個黑名單!
而user_list則是和vsftpd.conf中的userlist_enable和userlist_deny兩個配置項緊密相關的,它可以有效,也可以無效,有效時它可以是一個黑名單,也可以是一個白名單!那么是什么的設置決定了它的作用呢?這就是問題二要解釋的。
所以簡單總結就是:ftpusers和user_list沒有任何關系,ftpusers文件總是生效,user_list則取決於userlist_enable和userlist_deny兩項配置。
[root@k2 ~]# vim /etc/vsftpd/user_list
如果userlist_deny= YES(默認),絕不允許在這個文件中的用戶登錄ftp,甚至不提示輸入密碼。
2.4啟動服務
[root@k2 vsftpd]# systemctl start vsftpd #啟動FTP服務。
[root@k2 vsftpd]# systemctl enable vsftpd #設置開啟自動啟動FTP服務。
[root@k2 ~]# netstat -antup | grep ftp #查看FTP服務監聽的端口。
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 11725/vsftpd
2.5允許匿名用戶訪問
[root@xuegod63 vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
允許匿名用戶上傳文件並可以創建目錄
但不能刪除,報500的錯
解決辦法是手動添加一行
[root@K2 vsftpd]# chown ftp.ftp /var/ftp/pub/ #修改FTP共享目錄屬主、
anon_other_write_enable=YES
注:千萬不要和anon_mkdir_write_enable=YES這個挨着,換一個位置。
重啟FTP服務,使配置文件生效:
[root@k2 vsftpd]# systemctl restart vsftpd
2.6 測試一下:


k3上測試
[root@k3 ~]# lftp 10.27.17.92
lftp 10.27.17.92:~> ls
drwxr-xr-x 3 14 50 26 Oct 09 03:07 pub
lftp 10.27.17.92:/> cd pub
lftp 10.27.17.92:/pub> ll
lftp 10.27.17.92:/pub> ls
drwx------ 2 14 50 6 Oct 09 01:47 新文件夾
lftp 10.27.17.92:/pub> mkdir aa
mkdir ok, `aa' created
lftp 10.27.17.92:/pub> ls
drwx------ 2 14 50 6 Oct 09 03:08 aa
drwx------ 2 14 50 6 Oct 09 01:47 新文件夾
lftp 10.27.17.92:/pub> mkdir bb cc
mkdir ok, 2 directories created
lftp 10.27.17.92:/pub> ls
drwx------ 2 14 50 6 Oct 09 03:08 aa
drwx------ 2 14 50 6 Oct 09 03:08 bb
drwx------ 2 14 50 6 Oct 09 03:08 cc
drwx------ 2 14 50 6 Oct 09 01:47 新文件夾
lftp 10.27.17.92:/pub> rm -rf aa
rm ok, `aa' removed
lftp 10.27.17.92:/pub> ls
drwx------ 2 14 50 6 Oct 09 03:08 bb
drwx------ 2 14 50 6 Oct 09 03:08 cc
drwx------ 2 14 50 6 Oct 09 01:47 新文件夾
lftp 10.27.17.92:/pub>
3、用戶名密碼方式訪問VSFTP
WEB服務器維護,FTP 給不同的部門賬號,進行相關目錄的維護
設置兩個用戶,共享/var/www/html ,用戶名kezi1,kezi2
這兩個帳號的根目錄限制為/var/www/html,不能進入該目錄以外的任何目錄。
只允許:kezi1和kezi2兩用戶 可以上傳,vsftp禁止匿名。
3.1 建立用戶並設置密碼
[root@k2 vsftpd]# useradd -s /sbin/nogling kezi1
[root@k2 vsftpd]# useradd -s /sbin/nogling kezi2
[root@k2 vsftpd]# echo "123456"|passwd --stdin kezi1
Changing password for user kezi1.
passwd: all authentication tokens updated successfully.
[root@k2 vsftpd]# echo "123456"|passwd --stdin kezi2
Changing password for user kezi2.
passwd: all authentication tokens updated successfully.
3.2 配置vsftpd.conf 主配置文件並作相應修改
[root@k2 vsftpd]# vim vsftpd.conf
anonymous_enable=NO #禁止匿名用戶登錄
local_enable=YES #允許本地用戶登錄
local_root=/var/www/html #設置本地用戶的根目錄為/var/www/html 。
chroot_list_enable=YES #激chroot 功能。
chroot_list_file=/etc/vsftpd/chroot_list #設置鎖定用戶在根目錄中的列表文件。此文件存放要鎖定的用戶名。
allow_writeenable_chroot=YES #允許鎖定的用戶有寫的權限。
3.3 建立/etc/vsftpd/chroot_list 文件,添加kezi1 和kezi2帳號
[root@k2 vsftpd]# touch /etc/vsftpd/chroot_list
[root@k2 vsftpd]# vim chroot_list
kezi1
kezi2
3.4 修改本地權限
[root@k2 vsftpd]# ll -d /var/www/html
drwxr-xr-x. 2 root root 24 Sep 27 15:28 /var/www/html
[root@k2 vsftpd]# chmod -R o+w /var/www/html/index.html
[root@k2 vsftpd]# ll -d /var/www/html
drwxr-xr-x. 2 root root 24 Sep 27 15:28 /var/www/html
