如果我們有三臺主機在一個環境中,需要將不同主機上的文件拷貝到不同主機上,如果拷貝到U盤中,然後再一個一個的拷貝,顯然這樣降低了工作效率,如果可以將某個主機共享內容,然後每個主機連接,這樣就降低了時間成本,ftp就幫我們解決了這個問題。
一、FTP
1、FTP介紹
用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。
2、FTP的工作模式
(1)主動模式
Client(PORT/TCP)向Server(22/TCP)發送連接請求,建立三次握手
Client告知Server數據連接端口爲PORT+1
Server(20/TCP)主動向Client發送連接請求,建立數據通信。
(2)被動模式
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即此端口爲數據連接端口
TCP三次握手過程 被動模式下通信過程,產生隨機端口通信。
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 ~]# ldd
which 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工具測試
三、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)測試
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`