詳解“FTP文件傳輸服務”配置實例
目錄
-
簡介
-
ftp工作原理
-
常見的FTP服務
-
Vsftpd服務器的安裝
-
Vsftpd.conf配置文件詳解
-
配置FTP服務器實例
-
實例:配置匿名
-
實例:配置本地用戶登錄
-
實例:配置虛擬用戶登錄(MySQL認證)
-
實例:控制用戶登錄
-
實例:設置歡迎信息
詳解:日志管理
FTP服務器配置與管理
簡介
FTP 是File Transfer Protocol(文件傳輸協議)的英文簡稱
,而中文簡稱為“文傳協議”。用于Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序(Application)?;诓煌牟僮飨到y有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。互聯網上提供文件存儲和訪問服務的計算機,他們依照的是FTP協議提供服務!支持FTP協議的服務器就是FTP服務器!FTP協議提供存儲和傳輸服務的一套協議!
下載"(Download)
和"上傳"(Upload)
?!毕螺d”文件就是從遠程主機拷貝文件至自己的計算機上;”上傳”文件就是將文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。
ftp工作原理
ftp采用客戶端/服務端的工作模式(C/S結構),通過TCP協議建立客戶端和服務器之間的連接,但與其他大多數應用協議不同,FTP協議在客戶端和服務端之間建立了兩條通信鏈路,分別是控制鏈路和數據鏈路,其中,控制鏈路負責FTP會話過程中FTP命令的發送和接收,數據鏈路則負責數據的傳輸
FTP會話包含了兩個通道,控制通道和數據通道,FTP的工作有兩種方式,一種是主動模式,一種是被動模式,以FTPServer為參照物,主動模式,服務器主動連接客戶端傳輸,被動模式,等待客戶端的的連接
(無論是主動模式還是被動模式,首先的控制通道都是先建立起來的,只是在數據傳輸模式上的區別)
主動模式
工作的原理: FTP客戶端連接到FTP服務器的21端口,發送用戶名和密碼,客戶端隨機開放一個端口(1024以上),發送 PORT命令到FTP服務器,告訴服務器客戶端采用主動模式并開放端口;FTP服務器收到PORT主動模式命令和端口號后,通過服務器的20端口和客戶端開放的端口連接,發送數據,原理如下圖:
被動模式
PASV是Passive的縮寫,中文成為被動模式,工作原理:FTP客戶端連接到FTP服務器的21端口,發送用戶名和密碼,發送PASV命令到FTP服務器, 服務器在本地隨機開放一個端口(1024以上),然后把開放的端口告訴客戶端, 客戶端再連接到服務器開放的端口進行數據傳輸,原理如下圖:
工作端口和模式
20號端口:數據傳輸端口 ftp-data
21號端口:指令傳輸端口
數據傳輸原理: FTP的傳輸有兩種方式:ASCII
、二進制
。
ASCII傳輸方式
假定用戶正在拷貝的文件包含的簡單ASCII碼文本,如果在遠程機器上運行的不是UNIX,當文件傳輸時ftp通常會自動地調整文件的內容以便于把文件解釋成另外那臺計算機存儲文本文件的格式。
但是常常有這樣的情況,用戶正在傳輸的文件包含的不是文本文件,它們可能是程序,數據庫,字處理文件或者壓縮文件。在拷貝任何非文本文件之前,用binary 命令告訴ftp逐字拷貝。
二進制傳輸模式
在二進制傳輸中,保存文件的位序,以便原始和拷貝的是逐位一一對應的。即使目的地機器上包含位序列的文件是沒意義的。例如,macintosh以二進制方式傳送可執行文件到Windows系統,在對方系統上,此文件不能執行。
如在ASCII方式下傳輸二進制文件,即使不需要也仍會轉譯。這會損壞數據。(ASCII方式一般假設每一字符的第一有效位無意義,因為ASCII字符組合不使用它。如果傳輸二進制文件,所有的位都是重要的。)
常見的FTP服務
Windows下:Serv-U FTP Server
Linux下有代表性的FTP服務器軟件是Wu-FTP
、ProFTP
及vsftpd
。Wu-FTP(Washington University FTP)
是由美國華盛頓大學開發的、以效率和穩定性為參考量的FTP軟件。它的功能強大,配置較復雜,由于開發時間較早,應用十分廣泛,也因此成為黑客們主要的攻擊目標。Wu-FTP的早期各級版本不斷出現安全漏洞,系統管理員不得不因安全因素而經常對其進行升級。ProFTP針對Wu-FTP的弱項而開發,除了在安全性方面進行了改進外,還具備設置簡單的特點,并提供了一些Wu-FTP沒有的功能,大大簡化了架設和管理FTP服務器的工作。vsftpd
則憑借在安全性方面的出色表現,被很多大型網站廣為采用。
Vsftpd服務器的安裝
軟件包
vsftpd-2.2.2-11.el6_4.1.x86_64.rpm //服務端軟件包
ftp-0.17-54.el6.x86_64.rpm //客戶端軟件包
lftp-4.0.9-1.el6.x86_64.rpm //類似ftp的客戶端軟件包,具有增強功能
1、安裝vsftpd軟件
[root@localhost ~]# yum -y install vsftpd
2、相關配置文件
[root@localhost ~]# cd /etc/vsftpd/
[root@localhost vsftpd]# ls
ftpusers user_list vsftpd.conf vsftpd_conf_migrate.sh
/etc/vsftpd/vsftpd.conf //主配置文件,核心配置文件
/etc/vsftpd/ftpusers //黑名單,這個里面的用戶不允許訪問FTP服務器
/etc/vsftpd/user_list //白名單,允許訪問FTP服務器的用戶列表
3、啟動服務
服務啟動與關閉
[root@localhost vsftpd]# chkconfig vsftpd on
[root@localhost vsftpd]# service vsftpd start
Starting vsftpd for vsftpd: [ OK ]
[root@localhost vsftpd]# netstat -antup | grep ftp
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2579/vsftpd
tcp 0 0 10.1.252.97:21 10.1.250.64:54777 ESTABLISHED 2582/vsftpd
Vsftpd.conf配置文件詳解
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=YES #匿名用戶登陸 允許
local_enable=YES #全局設置,是否容許寫入(無論是匿名本地用戶,若要啟用上傳權限的話,就要開啟他)
write_enable=YES #支持本地用戶的寫權限
local_umask=022 #本地用戶上傳上來的文件權限
anon_umask=022 #匿名用戶上傳上來文件的權限
anon_root=(none) #匿名用戶主目錄
anon_max_rate=(0) #匿名用戶速度限制
anon_umask=(077) #匿名用戶上傳文件時有掩碼(若想讓匿名用戶上傳的文件能直接被匿名下載,就這設置這里為073)
#no_anon_password=YES #匿名用戶login時不詢問口令,此項配置文件無
#anon_world_readable_only=YES #控制匿名用戶對文件的下載權限
#anon_upload_enable=YES #匿名用戶上傳是否可以,默認拒絕
#anon_mkdir_write_enable=YES #匿名用戶是否可以建立目錄的權限,默認拒絕
#anon_other_write_enable= YES #控制匿名用戶對文件和文件夾的刪除和重命名,此項配置文件里面無
dirmessage_enable=YES #顯示目錄下的.message文件內容,文件是隱藏的
xferlog_enable=YES #傳輸日志記錄,默認位置/etc/var/log/xferlog_enable
connect_from_port_20=YES #是否監控數據傳輸端口20,使用的20號端口來連接FTP
#chown_uploads=YES #所有匿名上傳的文件的所屬用戶將會被更改成chown_username
#hown_username=find #匿名上傳文件所屬用戶名
#xferlog_file=/var/log/xferlog #配合xferlog_enable=YES使用,指定日志路徑
xferlog_std_format=YES #使用標準的日志格式
#idle_session_timeout=600 #空閑超時時間
#data_connection_timeout=120 #數據傳輸超市時間
#nopriv_user=ftpsecure #當服務器運行于底層的使用用戶名,使用什么身份的用戶運行
#async_abor_enable=YES #允許使用\"async ABOR\"命令,一般不用,容易出問題 ,可以直接忽略此項,不記
#ascii_upload_enable=YES #是否可用ASCII 模式上傳。默認值為NO
#ascii_download_enable=YES #是否可用ASCII 模式下載。默認值為NO
#ftpd_banner=Welcome FTP Sev #用戶登陸顯示的歡迎信息,如果設置了banner_file則此設置無效
#deny_email_enable=YES #如果匿名用戶需要密碼,那么使用banned_email_file里面的電子郵件地址的用戶不能登錄
#banned_email_file=/etc/vsftpd/banned_emails #配合deny_email_enable,禁止使用匿名用戶登陸時作為密碼的電子郵件地址
#chroot_local_user=YES #囚牢在自己的家目錄
#chroot_list_enable=YES #如果啟動這項功能,則所有列在chroot_list_file中的使用者不能更改根目錄
#chroot_list_file=/etc/vsftpd/chroot_list #定義不能更改用戶主目錄的文件
#ls_recurse_enable=YES #是否能使用ls -R命令以防止浪費大量的服務器資源
listen=YES #獨立模式監聽服務
#listen_ipv6=YES #監聽IPV6
pam_service_name=vsftpd # pam認證服務配置文件位置及其名稱
userlist_enable=YES #是否支持userlist白名單
userlist_deny=YES #白名單轉化為黑名單
tcp_wrappers=YES #開啟tcp_wrappers支持
#listen_port=21 #使用21號端口
max_clients=100 #最大同時連接客戶端數,0不限制
max_per_ip=5 #同一個IP最大連接客戶端數,0不限制
local_max_rate=500000 #本地用戶最大傳輸速率
anon_max?_rate=200000 #匿名用戶最大傳輸速率
local_root=/local #更改本地用的根目錄
listen_address=192.168.1.63 #監聽的IP地址
download_enable=yes #是否允許下載
#pasv_enable=YES #允許使用pasv模式
#port_enable=YES #允許使用port模式
配置FTP服務器實例
通過修改不同的配置文件選項,達到不同的實驗效果
匿名FTP的基本配置
使用匿名FTP,用戶無需輸入用戶名密碼即可登錄FTP服務器,vsftpd安裝后默認開啟了匿名ftp的功能,用戶無需額外配置即可使用匿名登錄ftp服務器
這個時候用戶可以匿名方式登錄ftp服務器,查看并下載匿名賬戶主目錄下的各級目錄和文件,但是不能上傳文件或者創建目錄
[root@localhost ~]# lftp 10.1.252.97
lftp 10.1.252.97:~> ls
drwxr-xr-x 2 0 0 4096 May 11 06:17 pub
lftp 10.1.252.97:/> cd pub/
lftp 10.1.252.97:/pub> put /etc/issue
put: Access failed: 550 Permission denied. (issue) //拒絕上傳
lftp 10.1.252.97:/pub> get 1.txt //可以下載
lftp 10.1.252.97:/pub>
匿名ftp的其他設置
出于安全方面的考慮,vsftpd在默認情況下不允許用戶通過匿名FTP上傳文件,創建目錄等更改操作,但是可以修改vsftpd.conf配置文件的選項,可以賦予匿名ftp更多的權限
實例1、允許匿名ftp上傳文件
1、修改vsfpd.conf
write_enable=YES
anon_upload_enable=YES
2、更改/var/ftp/pub目錄的權限,為ftp用戶添加寫權限,并重新加載配置文件
[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
3、測試
lftp 10.1.252.97:/pub> put /etc/issue
79 bytes transferred //成功上傳
lftp 10.1.252.97:/pub> ls
-rw-r--r-- 1 0 0 0 Jul 25 01:13 1.txt
-rw------- 1 14 50 79 Jul 25 01:19 issue
實例2、允許匿名ftp創建目錄
1、修改vsftpd.conf文件
write_enable=YES
anon_mkdir_write_enable=YES
2、更改/var/ftp/pub目錄的權限,為ftp用戶添加寫權限,并重新加載配置文件
[root@localhost pub]# chmod o+w /var/ftp/pub/
[root@localhost pub]# service vsftpd reload
Shutting down vsftpd: [ OK ]
Starting vsftpd for vsftpd: [ OK ]
3、測試
lftp 10.1.252.97:/pub> mkdir zabbix
mkdir ok, `zabbix' created
lftp 10.1.252.97:/pub> ls //創建成功
-rw-r--r-- 1 0 0 0 Jul 25 01:13 1.txt
-rw------- 1 14 50 79 Jul 25 01:19 issue
drwx------ 2 14 50 4096 Jul 25 01:23 zabbix
配置本地用戶登錄
本地用戶登錄就是指使用Linux操作系統中的用戶賬號和密碼登錄ftp服務器,vsftp安裝后默只支持匿名ftp登錄,用戶如果試圖使用Linux操作系統中的賬號登錄服務器,將會被vsftpd拒絕
1、創建本地用戶
[root@localhost pub]# useradd zhanghe
[root@localhost pub]# passwd zhanghe
Changing password for user zhanghe.
New password:
BAD PASSWORD: it is too simplistic/systematic
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
2、修改vsftpd.conf文件
local_enable=YES
3、修改目錄權限
[root@localhost html]# chmod o+w /var/www/html/
4、登錄賬戶測試
配置虛擬用戶登錄(MySQL認證)
1、安裝MySQL并創建對應用戶和表
[root@localhost ~]# yum install mysql-server -y #安裝MySQL數據庫
[root@localhost ~]# service mysqld start #啟動數據庫
[root@localhost ~]# mysql_secure_installation #初始化MySQL配置
創建用戶并授權,創建對應數據庫和表并插入兩行數據
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> GRANT ALL ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.00 sec) #授予用戶權限
mysql> CREATE DATABASE vsftpd; #創建數據庫
Query OK, 1 row affected (0.00 sec)
mysql> use vsftpd; #進入指定默認數據庫
Database changed
mysql> CREATE TABLE vsftpd.users (uid SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE KEY,name VARCHAR(100) NOT NULL PRIMARY KEY,password CHAR(48) NOT NULL); #創建表
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO users (name,password) VALUES ('tom',PASSWORD('mageedu')),('jerry',PASSWORD('mageedu')),('lucy',PASSWORD('mageedu')); #插入3行,用戶為tom,jerry,lucy
Query OK, 3 rows affected (0.00 sec)
Records: 3 Duplicates: 0 Warnings: 0
mysql> FLUSH PRIVILEGES; #刷新權限
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
2、配置vsftpd基于MySQL表的虛擬用戶
首先要完成基于MySQL表的認證,需要通過pam_mysql模塊實現,我們要先安裝pam_mysql
pam_mysql模塊
CentOS 6:epel
CentOS 7:編譯安裝
[root@localhost ~]# yum -y install pam_mysql
準備要映射成為的系統賬號:
[root@localhost ~]# mkdir -pv /ftproot/{pub,upload}
[root@localhost ~]# useradd -d /ftproot vuser
[root@localhost ~]# setfacl -m u:vuser:rwx /ftproot/upload
準備基于mysql認證的pam配置文件:/etc/pam.d/vsftpd.mysql
[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so host=10.1.252.36 user=vsftpd passwd=123456 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
配置vsftpd啟用虛擬用戶,并使用指定的pam service:vsftpd.conf
//并確保pam_service_name選項的值如下所示
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=vuser
配置每虛擬用戶擁有不同的權限:vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_conf
為每個用戶單獨提供配置文件
[root@localhost ~]# mkdir /etc/vsftpd/vusers_conf
[root@localhost ~]# cd /etc/vsftpd/vusers_conf/
[root@localhost vusers_conf]# touch tom
[root@localhost vusers_conf]# vim tom
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
測試
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,1,252,97,44,23).
150 Here comes the directory listing.
drwxr-xr-x 2 500 500 4096 Jul 25 01:47 51cto
drwx------ 2 501 501 4096 Jul 25 02:17 iii
drwxr-xr-x 2 500 500 4096 Jul 25 01:45 zabbix
226 Directory send OK.
ftp>
控制用戶登錄
1、編輯vsftpd.conf文件
userlist_enable=YES
userlist_file=/etc/vsftpd/ftpuser_list
[root@localhost vsftpd]# vim user_list
或者:vim /etc/vsftpd/ftpuser_list
halt
mail
news
uucp
operator
games
nobody
tom //添加禁止登錄的用戶
2、登錄測試
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 (vsFTPd 2.2.2)
Name (10.1.252.97:root): tom
530 Permission denied.
Login failed.
ftp> ls
530 Please login with USER and PASS.
Passive mode refused.
ftp>
設置歡迎信息
用戶登錄歡迎信息
1、修改vsftpd.conf,并重載服務
ftpd_banner=Welcome to blah mageedu@ftp service.
[root@localhost vsftpd]# service vsftpd reload
2、測試
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220 Welcome to blah mageedu@ftp service.
Name (10.1.252.97:root): tom
登錄信息寫入文件
1、修改vsftpd.conf文件
#ftpd_banner=Welcome to blah mageedu@ftp service.
banner_file=/etc/vsftpd/banner.txt
2、添加歡迎信息文件
[root@localhost vsftpd]# cat banner.txt
*************************************************
* *
* Welocome to Mageedu FTP server *
* *
*************************************************
3、測試
[root@localhost ~]# ftp 10.1.252.97
Connected to 10.1.252.97 (10.1.252.97).
220-*************************************************
220-* *
220-* Welocome to Mageedu FTP server *
220-* *
220-*************************************************
220
Name (10.1.252.97:root):
目錄歡迎信息
1、編譯vsftpd.conf文件
dirmessage_enable=YES
2、在文件目錄下創建歡迎信息文件并重載服務
[root@localhost vsftpd]# cat /var/www/html/.message
歡迎進入ftp根目錄
[root@localhost html]# service vsftpd reload
3、測試
Name (10.1.252.97:root): tom
331 Please specify the password.
Password:
230-歡迎進入ftp根目錄
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
日志管理
[root@localhost ~]# cat /var/log/xferlog
Mon Jul 25 09:13:36 2016 1 10.1.252.96 0 /pub/1.txt b _ o a lftp@ ftp 0 * c
//提示時間:從10.1.252.96訪問:訪問的文件:b是二進制傳輸方式:o是服務器到客戶端:a表示匿名
Mon Jul 25 09:19:49 2016 1 10.1.252.96 79 /pub/issue b _ i a lftp@ ftp 0 * c
//提示時間:從10.1.252.96訪問:訪問的文件:b是二進制傳輸方式:i是客戶端到服務端:a表示匿名
Mon Jul 25 09:46:01 2016 1 10.1.250.64 49451 /var/www/html/Linux_Services_and_Security.txt b _ i r zhanghe ftp 0 * c
提示時間:從10.1.252.64訪問:訪問的文件:b是二進制傳輸方式:i是客戶端到服務端:r表示真實用戶:服務名ftp:認證方式0表示無:*無法獲取用戶ID:c表示傳輸已完成
[root@localhost ~]#
原創文章,作者:M20_he,如若轉載,請注明出處:http://www.www58058.com/52605