FTP(文件傳輸協議)

1.FTP簡介

File Transfer Protocol 早期的三個應用級協議之一
? 基于C/S結構
? 雙通道協議:數據和命令連接
? 數據傳輸格式:二進制(默認)和文本
? 兩種模式:服務器角度
主動(PORT style):服務器主動連接
命令(控制):客戶端:隨機port ---? 服務器:tcp21
數據:客戶端:隨機port+1 ?---服務器:tcp20
被動(PASV style):客戶端主動連接
命令(控制):客戶端:隨機port ---? 服務器:tcp21
數據:客戶端:隨機port+1 ---?服務器:隨機port
? 服務器被動模式數據端口示例:
227 Entering Passive Mode (192,168,175,138,224,59)
服務器數據端口為:224*256+59

2.FTP軟件介紹

? FTP服務器:
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:Very Secure FTP Daemon,CentOS默認FTP服務器
高速,穩定,下載速度是WU-FTP的兩倍
ftp,redhat.com數據:單機最多可支持15000個并發
? 客戶端軟件:
ftp,lftp,lftpget,wget,curl
ftp -A ftpserver port -A主動模式 –p 被動模式
lftp –u username ftpserver
lftp username@ftpserver
lftpget ftp://ftpserver/pub/file
gftp: GUI centos5 最新版2.0.19 (11/30/2008)
filezilla,CuteFtp,FlashFXP,LeapFtp
IE ftp://username:password@ftpserver

3.FTP服務

? 狀態碼:
1XX:信息 125:數據連接打開
2XX:成功類狀態 200:命令OK 230:登錄成功
3XX:補充類 331:用戶名OK
4XX:客戶端錯誤 425:不能打開數據連接
5XX:服務器錯誤 530:不能登錄
? 用戶認證:
匿名用戶:ftp,anonymous,對應Linux用戶ftp
系統用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
虛擬用戶:特定服務的專用用戶,獨立的用戶/密碼文件
nsswitch:network service switch名稱解析框架
pam:pluggable authentication module 用戶認證
/lib64/security /etc/pam.d/ /etc/pam.conf


Paste_Image.png

4.vsftpd服務

? 由vsftpd包提供
? 不再由xinetd管理
? 用戶認證配置文件:/etc/pam.d/vsftpd
? 服務腳本: /usr/lib/systemd/system/vsftpd.service
/etc/rc.d/init.d/vsftpd
? 配置文件:/etc/vsftpd/vsftpd.conf
man 5 vsftpd.conf
格式:option=value
注意:=前后不要有空格
? 匿名用戶(映射為系統用戶ftp )共享文件位置:/var/ftp
? 系統用戶共享文件位置:用戶家目錄
? 虛擬用戶共享文件位置:為其映射的系統用戶的家目錄

5.vsftpd服務配置

? 命令端口

listen_port=21

? 主動模式端口

connect_from_port_20=YES 主動模式端口為20
ftp_data_port=20 指定主動模式的端口

? 被動模式端口范圍

linux客戶端默認使用被動模式
windows 客戶端默認使用主動模式
pasv_min_port=6000 0為隨機分配
pasv_max_port=6010

? 使用當地時間

use_localtime=YES 使用當地時間(默認為NO,使用GMT)

? 匿名用戶

anonymous_enable=YES 支持匿名用戶
no_anon_password=YES(默認NO) 匿名用戶略過口令檢查
anon_world_readable_only (默認YES)只能下載全部讀的文件
anon_upload_enable=YES 匿名上傳,注意:文件系統權限
anon_mkdir_write_enable=YES 可以創建文件
anon_other_write_enable=YES 可刪除和修改上傳的文件
anon_umask=077 指定匿名上傳umask
指定上傳文件的默認的所有者和權限
chown_uploads=YES(默認NO)
chown_username=yin 指定所有者
chown_upload_mode=0644 指定權限

? Linux系統用戶

guest_enable=YES 所有系統用戶都映射成guest用戶
guest_username=ftp 配合上面選項才生效,指定guest用戶
local_enable=YES 是否允許linux用戶登錄
write_enable-YES 允許linux用戶上傳文件
local_umask=022 指定系統用戶上傳文件的默認權限
local_root=/ftproot 非匿名用戶登錄所在目錄

? 禁錮所有系統用戶在家目錄中

chroot_local_user=YES(默認NO,不禁錮)禁錮系統用戶

? 禁錮或不禁錮特定的系統用戶在家目錄中,與上面設置功能相反

chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
當chroot_local_user=YES時,則chroot_list中用戶不禁錮
當chroot_local_user=NO時,則chroot_list中用戶禁錮

? wu-ftp日志:默認啟用

xferlog_enable=YES (默認)啟用記錄上傳下載日志
xferlog_std_format=YES (默認)使用wu-ftp日志格式
xferlog_file=/var/log/xferlog (默認)可自動生成

? vsftpd日志:默認不啟用

dual_log_enable=YES 使用vsftpd日志格式,默認不啟用
vsftpd_log_file=/var/log/vsftpd.log(默認)可自動生成

? 登錄提示信息

ftpd_banner=“welcome to mage ftp server"
banner_file=/etc/vsftpd/ftpbanner.txt 優先上面項生效

? 目錄訪問提示信息

dirmessage_enable=YES (默認)
message_file=.message(默認)信息存放在指定目錄下.message

? 使用pam(Pluggable Authentication Modules)完成用戶認證

pam_service_name=vsftpd
pam配置文件:/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers 默認文件中用戶拒絕登錄

? 是否啟用控制用戶登錄的列表文件

userlist_enable=YES 默認有此設置
userlist_deny=YES(默認值)黑名單,不提示口令,NO為白名單
userlist_file=/etc/vsftpd/users_list 此為默認值

? 連接限制

max_clients=0 最大并發連接數
max_per_ip=0 每個IP同時發起的最大連接數
? vsftpd服務指定用戶身份運行
nopriv_user=nobody

? 傳輸速率:字節/秒

anon_max_rate=0 匿名用戶的最大傳輸速率
local_max_rate=0 本地用戶的最大傳輸速率

? 連接時間:秒為單位

connect_timeout=60 主動模式數據連接超時時長
accept_timeout=60 被動模式數據連接超時時長
data_connection_timeout=300 數據連接無數據輸超時時長
idle_session_timeout=60 無命令操作超時時長

? 優先以文本方式傳輸

ascii_upload_enable=YES
ascii_download_enable=YES

? 配置FTP服務以非獨立服務方運行:listen=NO,默認為獨立方式

? cat /etc/xinetd.d/vsftpd
service ftp
{
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/vsftpd
log_on_failure += USERID
disable = no
}


Paste_Image.png

Paste_Image.png

service xinetd restart 啟動服務

6.實現基于SSL的FTPS

? 查看是否支持SSL

ldd which vsftpd 查看到libssl.so

? 創建自簽名證書

cd /etc/pki/tls/certs/
make vsftpd.pem
openssl x509 -in vsftpd.pem -noout –text

? 配置vsftpd服務支持SSL:/etc/vsftpd/vsftpd.conf

ssl_enable=YES 啟用SSL
allow_anon_ssl=NO 匿名不支持SSL
force_local_logins_ssl=YES 本地用戶登錄加密
force_local_data_ssl=YES 本地用戶數據傳輸加密
rsa_cert_file=/etc/pki/tls/certs/vsftpd.pem

? 用filezilla等工具測試

7.vsftpd虛擬用戶

? 虛擬用戶:

所有虛擬用戶會統一映射為一個指定的系統帳號:訪問共享位置,即為此系統帳號的家目錄各虛擬用戶可被賦予不同訪問權限,通過匿名用戶的權限控制參數進行指定

? 虛擬用戶帳號的存儲方式:

文件:編輯文本文件,此文件需要被編碼為hash格式
奇數行為用戶名,偶數行為密碼
db_load -T -t hash -f vusers.txt vusers.db
關系型數據庫中的表中:
實時查詢數據庫完成用戶認證
mysql庫:pam要依賴于pam-mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README

8.實現基于文件驗證的vsftpd虛擬用戶

虛擬用戶:針對某個服務,需要涉及到用戶驗證的時候,可以針對這個服務
創建單獨的賬戶密碼,用于驗證

一、創建用戶數據庫文件

? vim /etc/vsftpd/vusers.txt
wang
wangpass
mage
magepass
? cd /etc/vsftpd/
? db_load -T -t hash -f vusers.txt vusers.db (vusers.txt里面是一行用戶名一行密碼,db_load將文件轉化為特定的數據文件,沒有權限直接訪問文件系統)
? chmod 600 vusers.db

二、創建用戶和訪問FTP目錄

這是操作系統賬號,將虛擬賬號關聯到這里,給虛擬賬號分配權限訪問磁盤

? useradd -d /var/ftproot -s /sbin/nologin vuser (vuser就是系統賬號,虛擬賬號都是通過他訪問)
? chmod +rx /var/ftproot/
? centos7 還需要執行以下操作:
? chmod -w /var/ftproot/
? mkdir /var/ftproot/upload
? setfacl -m u:vuser:rwx /var/ftproot/upload

三、創建pam配置文件

? vim /etc/pam.d/vsftpd.db
auth required pam_userdb.so db=/etc/vsftpd/vusers(添加支持數據庫文件,man pam_userdb)
account required pam_userdb.so db=/etc/vsftpd/vusers

四、指定pam配置文件

? vim /etc/vsftpd/vsftpd.conf
guest_enable=YES
guest_username=vuser
pam_service_name=vsftpd.db

五、SELinux設置:

禁用SELinux 或者 setsebool -P ftpd_full_access 1

六、虛擬用戶建立獨立的配置文件

? mdkir /etc/vsftpd/vusers.d/ 創建配置文件存放的路徑
? vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers.d/

? cd /etc/vsftpd/vusers.d/ 進入此目錄
? 允許wang用戶可讀寫,其它用戶只讀
? vim wang 創建各用戶自已的配置文件
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
?vim mage 創建各用戶自已的配置文件
local_root=/ftproot 登錄目錄改變至指定的目錄

9.實現基于MYSQL驗證的vsftpd虛擬用戶

? 說明:本實驗在兩臺CentOS主機上實現,一臺做為FTP服務器,一臺做數據庫服務器

一、安裝所需要包和包組:

? 在數據庫服務器上安裝包:
? Centos7:在數據庫服務器上安裝
yum –y install mariadb-server mariadb
systemctl start mariadb.service
systemctl enable mariadb
? Centos6:在數據庫服務器上安裝
yum –y install mysql-server
?在FTP服務器上安裝vsftpd和pam_mysql包
centos6:pam_mysql由epel6的源中提供
yum install vsftpd pam_mysql
? centos7:無對應rpm包,需手動編譯安裝
yum -y groupinstall "Development Tools"
yum -y install mariadb-devel pam-devel vsftpd
下載pam_mysql-0.7RC1.tar.gz
ftp://172.16.0.1/pub/Sources/sources/pam/
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-mysql=/usr --with-pam=/usr
--with-pam-mods-dir=/lib64/security
make
make install

二、在數據庫服務器上創建虛擬用戶賬號

1.建立存儲虛擬用戶數據庫和連接的數據庫用戶
mysql> CREATE DATABASE vsftpd;
mysql> SHOW DATABASES;
? ftp服務和mysql不在同一主機:
mysql> GRANT SELECT ON vsftpd.* TO
vsftpd@'172.16.%.%' IDENTIFIED BY 'magedu';
? ftp服務和mysql在同一主機:
mysql> GRANT SELECT ON vsftpd.* TO
vsftpd@localhost IDENTIFIED BY 'magedu';
mysql> GRANT SELECT ON vsftpd.* TO
vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu';
mysql> FLUSH PRIVILEGES;
2.準備相關表
mysql> USE vsftpd;
Mysql> SHOW TABLES;
mysql> CREATE TABLE users (
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,(必須有)
password CHAR(48) BINARY NOT NULL(必須有)
);
mysql>DESC users;
測試連接
mysql -uvsftpd -h 172.16.200.200 -pmagedu
mysql> SHOW DATABASES;
3.添加虛擬用戶
? 根據需要添加所需要的用戶,為了安全應該使用PASSWORD
函數加密其密碼后存儲
mysql>DESC users;
mysql> INSERT INTO users(name,password)
values(‘wang',password('magedu'));
mysql> INSERT INTO users(name,password)
values(‘mage',password('magedu'));
mysql> SELECT * FROM users;

三、在FTP服務器上配置vsftpd服務

1.在FTP服務器上建立pam認證所需文件
vi /etc/pam.d/vsftpd.mysql 添加如下兩行
auth required pam_mysql.so user=vsftpd
passwd=magedu host=mysqlserver db=vsftpd table=users
usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd
passwd=magedu host=mysqlserver db=vsftpd table=users
usercolumn=name passwdcolumn=password crypt=2
注意:參考README文檔,選擇正確的加密方式
crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示
使用mysql password()函數加密,3表示md5加密,4表示
sha1加密
配置字段說明
? auth 表示認證
? account 驗證賬號密碼正常使用
? required 表示認證要通過
? pam_mysql.so模塊是默認的相對路徑,是相對/lib64/security/路
徑而言,也可以寫絕對路徑;后面為給此模塊傳遞的參數
? user=vsftpd為登錄mysql的用戶
? passwd=magedu 登錄mysql的的密碼
? host=mysqlserver mysql服務器的主機名或ip地址
? db=vsftpd 指定連接msyql的數據庫名稱
? table=users 指定連接數據庫中的表名
? usercolumn=name 當做用戶名的字段
? passwdcolumn=password 當做用戶名字段的密碼
? crypt=2 密碼的加密方式為mysql password()函數加密
2.建立相應用戶和修改vsftpd配置文件,使其適應mysql認證
建立虛擬用戶映射的系統用戶及對應的目錄

useradd -s /sbin/nologin -d /var/ftproot vuser
chmod 555 /var/ftproot centos7 需除去ftp根目錄的寫權限
mkdir /var/ftproot/{upload,pub}
setfacl –m u:vuser:rwx /var/ftproot/upload
確保/etc/vsftpd.conf中已經啟用了以下選項
anonymous_enable=YES
添加下面兩項
guest_enable=YES
guest_username=vuser
修改下面一項,原系統用戶無法登錄
pam_service_name=vsftpd.mysql

四、啟動vsftpd服務

service vsftpd start;systemctl start vsftpd
chkconfig vsftpd on;systemctl enable vsftpd
查看端口開啟情況

netstat -tnlp |grep :21

五、Selinux相關設置:在FTP服務器上執行

? restorecon -R /lib64/security
? setsebool -P ftpd_connect_db 1
? setsebool -P ftp_home_dir 1
? chcon -R -t public_content_rw_t /var/ftproot/

六、測試:利用FTP客戶端工具,以虛擬用戶登錄驗證結果

? tail /var/log/secure

七、在FTP服務器上配置虛擬用戶具有不同的訪問權限

vsftpd可以在配置文件目錄中為每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,只需要在vsftpd.conf指定其路徑及名稱即可
? 1、配置vsftpd為虛擬用戶使用配置文件目錄
vim /etc/vsftpd/vsftpd.conf
添加如下選項
user_config_dir=/etc/vsftpd/vusers_config
? 2、創建所需要目錄,并為虛擬用戶提供配置文件
mkdir /etc/vsftpd/vusers_config/
cd /etc/vsftpd/vusers_config/
touch wang mage
? 3、配置虛擬用戶的訪問權限
虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的相關
指令進行的。如果需要讓用戶wang具有上傳文件的權限,可以修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下
選項并設置為YES即可,只讀則設為NO
注意:需確保對應的映射用戶對于文件系統有寫權限
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}

10.Ftp工具

? Axel:網絡客戶端工具
下載安裝axel
ftp://172.16.0.1/pub/Sources/6.x86_64/axel/axel-
2.4-1.el6.rf.x86_64.rpm
? axel -n 3 -o /root
ftp://172.16.0.1/pub/ISOs/CentOS-7-x86_64-
Everything-1511.iso

Paste_Image.png

time axel -n 3 ftp://172.18.25..238/pub/f1 測試下載速度
wget

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,702評論 6 534
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,615評論 3 419
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,606評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,044評論 1 314
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,826評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,227評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,307評論 3 442
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,447評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,992評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,807評論 3 355
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,001評論 1 370
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,550評論 5 361
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,243評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,667評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,930評論 1 287
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,709評論 3 393
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,996評論 2 374

推薦閱讀更多精彩內容