搭建FTP服務器


(1).實驗環境

  FTP服務器:youxi1  192.168.1.6

  測試主機:youxi2  192.168.1.7

  VSFTP是C/S模式,默認端口21傳輸指令,20傳輸數據

(2).工作原理

  FTP會話包含了兩個通道,數據通道和命令通道。FTP的工作模式有兩種,主動模式(PORT模式)和被動模式(PASV模式),均以FTP服務器作為參照物。FTP服務器主動連接客戶端為主動模式,FTP服務器等待客戶端連接為被動模式。

1)主動模式工作原理:

  建立控制通道:客戶端發起連接請求,包含用戶名、密碼、客戶端隨機開放的一個高位端口(1024以上)以及連接模式PORT命令等。服務器接收后響應客戶端,服務器的21端口與提供的隨機高位端口建立控制通道。

  建立數據通道:服務器發送連接請求,包含服務器的20端口。客戶端接收后響應請求,隨機開放一個高位端口(1024以上),客戶端的隨機高位端口與服務器的20端口建立數據通道。

 

2)被動模式工作原理:

  建立控制通道:客戶端發起連接請求,包含用戶名、密碼、客戶端隨機開放的一個高位端口(1024以上)以及連接模式PASV命令等。服務器接收后響應客戶端,服務器的21端口與提供的隨機高位端口建立控制通道。

  建立數據通道:服務器會隨機開放一個高位端口(1024以上)告知客戶端用於建立數據通道,客戶端開放一個隨機高位端口(1024以上)與服務器隨機開放的高位端口連接。

 

  底下這張是Windows下的FTP被動連接:

(3).實驗

1)服務器端安裝vsftpd,客戶端安裝lftp

  服務器端

[root@youxi1 ~]# yum -y install vsftpd

  客戶端

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

2)服務器端相關文件

  /etc/vsftpd/vsftpd.conf  核心配置文件

  /etc/vsftpd/ftpusers  指定不能訪問FTP服務器的用戶,即黑名單

  /etc/vsftpd/user_list  當/etc/vsftpd/vsftpd.conf配置文件中userlist_deny= YES,那么該文件是黑名單;反之userlist_deny= NO,那么只允許該文件的用戶登錄

  /etc/vsftpd/vsftpd_conf_migrate.sh  vsftpd操作的一些變量和設置腳本

  /var/ftp/  默認情況下匿名用戶的根目錄

 3)匿名用戶訪問

  在/etc/vsftpd/vsftpd.conf配置文件中與匿名用戶有關的參數如下:

anonymous_enable=YES  //允許匿名用戶登錄FTP,默認為YES
anon_upload_enable=YES  //允許匿名用戶上傳,默認為NO
anon_mkdir_write_enable=YES  //允許匿名用戶創建目錄,默認為NO
anon_other_write_enable=YES  //給予匿名用戶寫權限,默認為NO

  根據相關需求將參數修改成指定要求。

  接着將FTP服務器youxi1上的匿名用戶的根目錄/etc/ftp/屬主和屬組改為ftp,這樣匿名用戶才能操作目錄下的文件:

[root@youxi1 pub]# chown ftp:ftp /var/ftp/pub

  注意:vsftp是相對安全的FTP工具,所以並不允許/var/ftp/給予匿名用戶寫權限

  然后啟動vsftpd服務,並開機自啟:

[root@youxi1 pub]# systemctl start vsftpd
[root@youxi1 pub]# systemctl enable vsftpd

  這時可以使用Window匿名登錄,創建文件夾、上傳文件

  也可以在Linux上使用lftp匿名登錄

[root@youxi2 ~]# lftp 192.168.1.6
lftp 192.168.1.6:~> ls
drwxr-xr-x    2 14       50             28 May 18 14:52 pub
lftp 192.168.1.6:/> cd pub/
lftp 192.168.1.6:/pub> 

  當然並不建議開啟匿名登錄。

4)使用指定的系統用戶只能訪問指定的目錄

   在FTP服務器youxi1上添加普通用戶,但禁止登錄系統,並賦予密碼:

[root@youxi1 ~]# useradd -s /sbin/nologin ftp1
[root@youxi1 ~]# useradd -s /sbin/nologin ftp2
[root@youxi1 ~]# echo "ftp1:123456" | chpasswd
[root@youxi1 ~]# echo "ftp2:123456" | chpasswd 

  在/etc/vsftpd/vsftpd.conf配置文件中與之相關的參數如下:

local_enable=YES  //允許本地用戶登錄
#chroot_local_user=YES  //設置是否將所有本地用戶囚禁在主目錄,默認為NO
local_root=/www/html  //設置本地用戶訪問的根目錄
chroot_list_enable=YES  //激活chroot功能(激活囚禁用戶列表功能),默認為NO
chroot_list_file=/etc/vsftpd/chroot_list  //設置被囚禁的用戶列表存放的文件
allow_writeable_chroot=YES  //允許被囚禁的用戶具有寫權限,默認為NO

  將匿名用戶相關參數取消,修改或添加相關參數。

  創建被囚禁用戶的主目錄/www/html/,以及被囚禁用戶列表文件

[root@youxi1 ~]# mkdir -p /www/html
[root@youxi1 ~]# vim /etc/vsftpd/chroot_list
ftp1
ftp2

  修改被囚禁用戶的主目錄權限

[root@youxi1 ~]# chmod o+w /www/html/  //如果是已存在文件,需要使用-R選項遞歸
[root@youxi1 ~]# ls -ld /www/html/
drwxr-xrwx 2 root root 6 5月  19 14:13 /www/html/

  重啟vsftpd服務

[root@youxi1 ~]# systemctl restart vsftpd

  到測試主機youxi2上測試

[root@youxi2 ~]# lftp 192.168.1.6 -u ftp1,123456
lftp ftp1@192.168.1.6:~> ls
ls: 登錄失敗: 530 Login incorrect. 

  網上找了找相關問題,一個是/etc/vsftpd/vsftpd.conf配置文件參數應該如下:

pam_service_name=vsftpd  //這個我原本就是

  還有一個是/etc/pam.d/vsftpd注釋掉如下參數:

#auth       required    pam_shells.so

  然后再重啟vsftpd服務

[root@youxi1 ~]# systemctl restart vsftpd

  這時候再到測試主機youxi2上

[root@youxi2 pam.d]# lftp 192.168.1.6 -u ftp1
口令: 
lftp ftp1@192.168.1.6:~> ls           
-rw-r--r--    1 0        0             968 May 19 06:21 passwd

(4).OpenSSL加密FTP傳輸

   使用OpenSSL生成自簽證書

//req是 X.509 Certificate Signing Request (CSR,證書簽名請求)管理的一個命令
//-x509是X.509 證書數據管理
//-days是定義證書有效時間
//-keyout是設置密鑰存儲文件
//-out是設置證書存儲位置,注意證書與密鑰保存在同一個文件
[root@youxi1 ~]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3650
Generating a 2048 bit RSA private key
..........................................................................+++
.................................+++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:ZH^H^H^H^H^H^C
[root@youxi1 ~]# openssl req -new -x509 -nodes -out vsftpd.pem -keyout vsftpd.pem -days 3650
Generating a 2048 bit RSA private key
..............................................................................................................+++
.......................................................................................................................................+++
writing new private key to 'vsftpd.pem'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN  //輸入國家名稱(2個字母代碼)
State or Province Name (full name) []:BeiJing  //州或省的全稱
Locality Name (eg, city) [Default City]:Beijing  //地點名稱(例如城市)
Organization Name (eg, company) [Default Company Ltd]:TengXun  //組織名稱(例如公司)
Organizational Unit Name (eg, section) []:IT  //組織單位名稱(例如部門)
Common Name (eg, your name or your server's hostname) []:youxi1  //公用名(例如你的或你的服務器的主機名)
Email Address []:youxi1@qq.com  //郵件地址

  將文件保存到/etc/vsftpd/.sslkey/目錄下,並設置400權限

[root@youxi1 ~]# mkdir /etc/vsftpd/.sslkey/
[root@youxi1 ~]# mv vsftpd.pem /etc/vsftpd/.sslkey/
[root@youxi1 ~]# chmod 400 /etc/vsftpd/.sslkey/vsftpd.pem

  添加以下參數到配置文件/etc/vsftpd/vsftpd.conf,使其支持OpenSSL:(以下參數需要加在配置文件中間,否則會報錯)

ssl_enable=YES  //開啟SSL支持
allow_anon_ssl=NO
//下面四行表示強制匿名用戶使用加密登錄和數據傳輸
force_local_data_ssl=YES
force_local_logins_ssl=YES
force_anon_logins_ssl=YES
force_anon_data_ssl=YES
ssl_tlsv1=YES  //指定vsftpd支持TLS v1
ssl_sslv2=YES  //指定vsftpd支持SSL v2
ssl_sslv3=YES  //指定vsftpd支持SSL v3
require_ssl_reuse=NO  //不重用SSL會話,安全配置項
ssl_ciphers=HIGH  //允許用於加密SSL連接的SSL算法
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.pem  //證書位置
rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.pem  //密鑰位置

  重啟vsftpd服務

[root@youxi1 ~]# systemctl restart vsftpd

  如果FTP客戶端是CentOS的lftp,直接使用會報錯。如下:

[root@youxi2 ~]# lftp 192.168.1.6 -u ftp1
口令: 
lftp ftp1@192.168.1.6:~> ls           
ls: 嚴重錯誤: Certificate verification: Not trusted

  此時需要在客戶端的lftp配置文件/etc/lftp.conf最后添加一行參數,不驗證SSL(也不知道會不會出問題),如下:

set ssl:verify-certificate no  //

  測試主機youxi2再次使用lftp連接就正常了

[root@youxi2 ~]# lftp 192.168.1.6 -u ftp1
口令: 
lftp ftp1@192.168.1.6:~> ls           
-rw-r--r--    1 0        0             968 May 19 06:21 passwd

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM