若是咱們有三臺主機在一個環境中,須要將不一樣主機上的文件拷貝到不一樣主機上,若是拷貝到U盤中,而後再一個一個的拷貝,顯然這樣下降了工做效率,若是能夠將某個主機共享內容,而後每一個主機鏈接,這樣就下降了時間成本,ftp就幫咱們解決了這個問題。mysql
用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)。基於不一樣的操做系統有不一樣的FTP應用程序,而全部這些應用程序都遵照同一種協議以傳輸文件。在FTP的使用當中,用戶常常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至本身的計算機上;"上傳"文件就是將文件從本身的計算機中拷貝至遠程主機上。linux
Client(PORT/TCP)向Server(22/TCP)發送鏈接請求,創建三次握手sql
Client告知Server數據鏈接端口爲PORT+1數據庫
Server(20/TCP)主動向Client發送鏈接請求,創建數據通訊。vim
Client(PORT/TCP)和Server創建三次握手服務器
Client向Server發起PASSIVE請求session
Server告知Client數據端口多線程
Client(PORT+1/TCP)再次向Server發送數據鏈接請求併發
這裏須要注意一下,Server數據端口須要計算得出來的一個隨機端口號app
示例:
192,168,4,60,140,28
服務器數據端口爲:140*256+28=35868即此端口爲數據鏈接端口
TCP三次握手過程
被動模式下通訊過程,產生隨機端口通訊。
1XX | 信息 |
2XX | 成功類響應碼 |
3XX | 提示需進一步提供補充類信息的狀態碼 |
4XX | 客戶端錯誤 |
5XX | 服務器端錯誤 |
匿名用戶:ftp,anonymous,對應linux用戶爲ftp
匿名用戶映射爲ftp用戶共享資源位置:/var/ftp/pub
系統用戶:linux用戶,用戶/etc/passwd,密碼/etc/shadow
系統用戶經過ftp訪問的資源的位置:用戶本身的家目錄
虛擬用戶:特定服務的專用用戶,獨立於用戶/密碼的文件;僅用於訪問某特定功能的資源
虛擬用戶經過ftp訪問資源的位置:給虛擬用戶指定的映射成系統用戶的家目錄
用戶認證配置文件
/etc/pam.d/vsftpd
服務腳本
/usr/lib/systemd/system/vsftpd.service (CentOS 7)
/etc/rc.d/init.d/vsftpd
配置文件
/etc/vsftpd/vsftpd.conf
/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默認不容許直接修改根目錄權限。
(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))
(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工具測試
全部虛擬用戶會被統一映射爲一個指定的系統帳號,訪問的共享位置即此係統帳號的目錄;
每一個虛擬用戶可被賦予不一樣的訪問權限,經過匿名用戶的權限控制參數進行指定;
文本存儲:編輯文本文件,此文件須要被編碼爲hash格式
格式:奇數行爲帳戶,偶數行爲密碼
不過須要對此文件加密,使用的工具爲db_load
db_load -T -t hash -f Filename.txt Filename.db
-T 轉換
-t 指定類型
-f 指定文件
存儲在關係型數據庫表中,能夠實現查詢數據庫完成用戶認證
(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)測試
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)重啓服務並測試
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`