FTP

如果我們有三臺主機在一個環境中,需要將不同主機上的文件拷貝到不同主機上,如果拷貝到U盤中,然後再一個一個的拷貝,顯然這樣降低了工作效率,如果可以將某個主機共享內容,然後每個主機連接,這樣就降低了時間成本,ftp就幫我們解決了這個問題。

一、FTP

1、FTP介紹

用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。

2、FTP的工作模式

(1)主動模式

2017-10-13_092716.jpg

  • Client(PORT/TCP)向Server(22/TCP)發送連接請求,建立三次握手

  • Client告知Server數據連接端口爲PORT+1

  • Server(20/TCP)主動向Client發送連接請求,建立數據通信。

2017-10-13_101242.jpg2017-10-13_104528.jpg

(2)被動模式

2017-10-13_093317.jpg

  • Client(PORT/TCP)和Server建立三次握手

  • Client向Server發起PASSIVE請求

  • Server告知Client數據端口

  • Client(PORT+1/TCP)再次向Server發送數據連接請求

這裏需要注意一下,Server數據端口需要計算得出來的一個隨機端口號

示例:

192,168,4,60,140,28
服務器數據端口爲:140*256+28=35868即此端口爲數據連接端口

2017-10-13_101242.jpgTCP三次握手過程 2017-10-13_103610.jpg被動模式下通信過程,產生隨機端口通信。

3、FTP服務狀態碼

1XX信息
2XX成功類響應碼
3XX提示需進一步提供補充類信息的狀態碼
4XX客戶端錯誤
5XX服務器端錯誤

4、FTP服務用戶認證方式

  • 匿名用戶:ftp,anonymous,對應linux用戶爲ftp

匿名用戶映射爲ftp用戶共享資源位置:/var/ftp/pub

  • 系統用戶:linux用戶,用戶/etc/passwd,密碼/etc/shadow

系統用戶通過ftp訪問的資源的位置:用戶自己的家目錄

  • 虛擬用戶:特定服務的專用用戶,獨立於用戶/密碼的文件;僅用於訪問某特定功能的資源

虛擬用戶通過ftp訪問資源的位置:給虛擬用戶指定的映射成系統用戶的家目錄

二、vsftpd服務

1、vsftpd服務配置文件

用戶認證配置文件

/etc/pam.d/vsftpd

服務腳本

/usr/lib/systemd/system/vsftpd.service (CentOS 7)
/etc/rc.d/init.d/vsftpd

配置文件

/etc/vsftpd/vsftpd.conf

2、主配置文件/etc/vsftpd/vsftpd.conf

  • 匿名了用戶配置

anonymous_enable    是否啓用匿名用戶
anon_upload_enable  是否允許匿名用戶上傳
anon_mkdir_write_enable 是否允許匿名用戶創建目錄
anon_other_write_enable 是否允許匿名用戶刪除目錄
  • 系統用戶配置

local_enable    是否開啓系統用戶
write_enable    是否允許創建、刪除文件
local_mask      控制本地上傳文件權限
chroot_local_user   鎖定所有用戶在家目錄中
chroot_list_enable  運行列表中的用戶切換爲家目錄
chroot_list_file    指定用戶文件存放位置
dirmessage_enable   在指定目錄下創建.message文件提示用戶登錄信息
local_root  非匿名了用戶登錄所有目錄
guest_enable    所有系統用戶都映射成guest用戶
guest_username  指定guest用戶,一定要與guest_enable使用
nopriv_user vsftpd指定用戶身份運行
  • 日誌

xferlog_enable  是否開啓傳輸日誌
xferlog_std_format 是否開啓標準格式
xferlog_file    指定存放日誌文件
dual_log_enable 使用vsftpd日誌格式,默認不啓用
vsftpd_log_fiel=/var/log/vsftpd.log 可自動生成
  • 改變上傳文件的所有者

chown_uploads   是否開啓改變上傳並修改所有者
chown_username  設置修改爲who
  • 歡迎信息

ftpd_banner     設置歡迎信息
  • vsftpd使用pam完成認證使用的pam配置文件

pam_service_name
  • 是否啓用控制用戶登錄的列表文件

userlist_enable 是否啓用用戶列表
userlist_deny   是否允許這個文件中的用戶可以登錄
  • 連接限制

max_client  最大併發連接數
max_per_ip  每個IP可同時發起的併發請求數
  • 傳輸速率

anon_max_rate   匿名用戶最大傳輸率,單位爲字節/秒
local_max_rate  本地用戶最大傳輸速率

-主動模式端口

connect_from_port_20    主動模式端口爲20
ftp_data_port   指定主動模式端口
此處注意:一定不能把connect_from_port設置爲NO
  • 被動模式端口

pasv_min_port   被動模式最小端口,0爲隨機端口
pasv_max_port   被動模式最大端口
  • 是否使用當地時間,即系統時間

use_localtime
  • 連接時間

connect_timeout 主動模式數據連接超時時長
accept_timeout  被動模式數據連接超時時長
data_connection_timeout 數據無數據傳輸超時時長
idle_session_timeout    無命令超時時長

-優先以文本傳輸

ascii_upload_enable 是否開啓文本傳輸
ascii_download_enable

注意:vsftpd默認不允許直接修改根目錄權限。

3、CentOS 6如何使vsftpd以非獨立服務方式運行

(1)修改/etc/vsftpd/vsftpd.conf

listen=NO   將此項設置爲NO ,即關閉自己監聽

(2)安裝xinetd服務

[root@localhost ~]# yum install -y xinetd

(3)複製模板並修改啓動xinetd服務

[root@localhost xinetd.d]# cp rsync vsftpd [root@localhost xinetd.d]# vim vsftpd

    service vsftpd  #修改服務名稱
{
       disable = no    是否開啓
       flags           = IPv6
       socket_type     = stream
       wait            = no
       user            = root
       server          = /usr/sbin/vsftpd
       server_args     = --daemon
       log_on_failure  += USERID
}

[root@localhost xinetd.d]# service xinetd restart

(4)驗證是否成爲非獨立服務

[root@localhost xinetd.d]# ss -tnl

LISTEN     0      64                            :::21                           :::*      users:(("xinetd",48493,5))

4、實現基於SSL的FTPS

(1)確認是否支持ssl

[root@localhost ~]# lddwhich vsftpd|grep ssl

libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f56e8de8000)

(2)創建證書

[root@localhost/etc/pki/tls/certs]#make vsftpd.pem [root@localhost/etc/pki/tls/certs]#openssl x509 -in vsftpd.pem -noout -text #查看證書內容 [root@localhost/etc/pki/tls/certs]#mv vsftpd.pem /etc/vsftpd/ #將證書移動至此目錄下方便管理

(3)配置vsftpd服務支持SSL

[root@localhost~]#vim /etc/vsftpd/vsftpd.conf #在文件下追擊如下幾行

128 ssl_enable=YES      #是否開啓SSL
129 allow_anon_ssl=NO   #是否允許匿名用戶支持SSL
130 force_local_logins_ssl=YES  #本地用戶登錄加密
131 force_local_data_ssl=YES    #本地用戶數據傳輸加密
132 rsa_cert_file=/etc/vsftpd/vsftpd.pem    #證書存放的位置

(4)測試是否使用加密傳輸

[root@localhost ~]# ftp 192.168.4.60

Connected to 192.168.4.60 (192.168.4.60).
220 (vsFTPd 3.0.2)
Name (192.168.4.60:root): wang
530 Non-anonymous sessions must use encryption. #禁止匿名用戶登錄
Login failed.
421 Service not available, remote server has closed connection

使用Fileilla工具測試

2017-10-13_150204.jpg 2017-10-13_145228.jpg

三、vsftpd虛擬用戶

1、虛擬用戶介紹

所有虛擬用戶會被統一映射爲一個指定的系統賬號,訪問的共享位置即此係統賬號的目錄;

每個虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定;

2、虛擬用戶賬號的存儲方式

  • 文本存儲:編輯文本文件,此文件需要被編碼爲hash格式

    格式:奇數行爲賬戶,偶數行爲密碼

不過需要對此文件加密,使用的工具爲db_load

db_load -T -t hash -f Filename.txt  Filename.db

   -T  轉換
   -t  指定類型
   -f  指定文件
  • 存儲在關係型數據庫表中,可以實現查詢數據庫完成用戶認證

四、實現不同方式存儲的方式

1、基於文本文件存儲

(1)創建用戶並寫入一個文本文件中

[root@localhost/etc/vsftpd]#vim vusers

  1 joah
 2 123456
 3 wang
 4 123456

(2)創建用戶數據庫文件

[root@localhost/etc/vsftpd]#db_load -T -t hash -f vusers vusers.db [root@localhost/etc/vsftpd]#chmod 600 vusers.db #修改文件權限

(3)創建用戶和訪問的目錄 [root@localhost~]#useradd -s /sbin/nologin -d /app/ftproot vuser
[root@localhost~]#chmod +rx /app/ftproot/ [root@localhost~]#chmod -w /app/ftproot/ #由於CentOS 7 上不允許系統用戶直接修改家目錄所有需要去掉此權限 [root@localhost~]#mkdir /app/ftproot/upload [root@localhost~]#setfacl -m u:vuser:rwx /app/ftproot/upload/

(4)創建pam配置文件

[root@localhost~]#ls /usr/lib64/security/ |grep userdb #查看是否已有此模塊

pam_userdb.so

[root@localhost/etc/pam.d]#vim vsftpd.db

1 auth required pam_userdb.so db=/etc/vsftpd/vusers   
2 account required pam_userdb.so db=/etc/vsftpd/vusers

(5)創建虛擬用戶獨立的配置文件

[root@localhost/etc/vsftpd]#mkdir vdocs [root@localhost/etc/vsftpd]#cd vdocs/ [root@localhost/etc/vsftpd/vdocs]#vim wang 
[root@localhost/etc/vsftpd/vdocs]#vim joah

  1 anon_upload_enable=YES
 2 anon_mkdir_write_enable=YES
 3 anon_other_write_enable=YES

注意:默認不創建用戶文件,只有下載權限。

(6)修改/etc/vsftpd/vsftpd.conf文件

133 guest_enable=YES    #所有系統用戶映射爲guest用戶
134 guest_username=vuser    #指定guest用戶
135 pam_service_name=vsftpd.db  #pam服務的名稱
136 user_config_dir=/etc/vsftpd/vdocs   #文本文件用戶的配置文件所在位置

(7)測試

2017-10-13_155311.jpg

2017-10-13_155412.jpg

2、基於數據庫驗證vsftpd虛擬用戶

CentOS7 環境

(1)編譯安裝pam_mysql,提供pam_mysql.so模塊

[root@localhost/usr/local/src/pam_mysql-0.7RC1]#yum install -y mariadb-devel pam-devel[root@localhost/usr/local/src/pam_mysql-0.7RC1]#./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security[root@localhost/usr/local/src/pam_mysql-0.7RC1]#make && make install

(2)準備數據庫和相關表

[root@localhost~]#mysql -uroot -p

MariaDB [(none)]> CREATE DATABASE ftpdb;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ftpdb.* TO ftpuser@'localhost' IDENTIFIED BY '123456';
MariaDB [(none)]> USE ftpdb;
MariaDB [ftpdb]> CREATE TABLE vuser (ID int unsigned auto_increment primary key,username char(40),password char(50));

[root@localhost~]#useradd -d /app/ftproot -s /sbin/nologin ftpuser [root@localhost~]#chmod 555 /app/ftproot/ #修改目錄權限,因爲CentOS7中默認不允許父目錄有寫權限

(3)添加虛擬用戶

MariaDB [ftpdb]> INSERT INTO vuser(username,password) VALUES('joah',password('123456'));
MariaDB [ftpdb]> INSERT INTO vuser(username,password) VALUES('li',password('123456'));

(4)建立pam認證所需文件

[root@localhost~]#vim /etc/pam.d/vsftpd.mysql 

1 auth reuqired pam_mysql.so user=ftpuser passwd=123456 host=localhost db=ftpdb table=vu ser usercolumn=username passwdcolumn=password crypt 2 

2 account reuqired pam_mysql.so user=ftpuser passwd=123456 host=localhost db=ftpdb table =vuser usercolumn=username passwdcolumn=password crypt 2

選項說明:

auth 表示認證
account 驗證賬號密碼正常使用
reuqired 表示認證通過
user 爲登錄mysql的用戶
passwd  登錄mysql的密碼
host    mysql服務器的主機名或IP地址
db 指定連接mysql的數據庫名稱
table   指定連接數據庫中的表名
usercolumn  當做用戶名的字段
passwdcolumn    當做用戶名字段的密碼
crypt   表示加密方式,0表示不加密;1表示crypt(3)加密;2表示使用mysql password()函數加密;3表示md5加密;4表示sha1加密

(5)創建虛擬用戶配置文件

[root@localhost/etc/vsftpd]#mkdir vdocs 

[root@localhost/etc/vsftpd]#cd vdocs/ 

[root@localhost/etc/vsftpd/vdocs]#vim joah

[root@localhost/etc/vsftpd/vdocs]#vim li

(6)修改/etc/vsftpd/vsftpd.conf

在配置文件中添加如下內容

128 guest_enable=YES
129 guest_username=ftpuser
130 pam_service_name=vsftpd.mysql
131 user_config_dir=/etc/vsftpd/vdocs

(7)重啓服務並測試

五、FTP工具

axel是 Linux 下一個不錯的HTTP/FTP高速下載工具。支持多線程下載、斷點續傳,且可以從多個地址或者從一個地址的多個連接來下載同一個文件。適合網速不給力時多線程下載提高下載速度

--max-speed=x       -s x    最大速度(字節/秒)
--num-connections=x -n x    最大連接數
--output=f      -o f    指定文件名
--search[=x]        -S [x]  從鏡像搜索並下載
--header=x      -H x    添加頭部
--user-agent=x      -U x    設置用戶代理
--no-proxy      -N  不使用任何代理
--quiet         -q  靜默
--verbose       -v  顯示更多狀態信息
--alternate     -a  顯示簡單進度條
--version       -V  顯示版本信息

示例:

`[root@localhost~]#axel -n 3 -o /root ftp://172.18.0.1/pub/ISOs/CentOS-6.9-x86_64-bin-DVD1.iso`


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章