vsftpd程序實現ftp


一、ftp工作原理簡介

  ftp是工作於應用層的協議,21/tcp端口,ftpC/S的模型,數據分爲兩種連接,分別是命令連接數據連接,命令連接是文件管理類命令,始終在線的連接;數據連接是數據傳輸,是按需創建及關閉的連接。數據在傳輸格式根據文件類型進行選擇傳輸格式,有文件傳輸、二進制傳輸。

 

  ftp有兩連接模式主動和被動模式,在主動模式中由服務器創建連接,客戶端響應連接的方式,服務器選擇21/tcp端口,客戶端在響應連接選擇一個隨機端口的與服務器進行通信,在傳輸文件時服務器將使用20/tcp端口與客戶端的隨機端口加1進行數據傳輸;在被動模式中客戶端選擇一個隨機端口請求服務器的21/tcp端口,服務器用21號端口響應客戶端的請求,當文件傳輸時客戶端使用在隨機端口上加1的端口請求服務器的文件數據,服務器選擇一個隨機端口響應客戶端的文件傳輸請求。

 

二、ftp軟件種類

ftp的服務器和客戶端的軟件種類有很多軟件可以實現的

服務器端軟件:wu-ftpdproftpdpureftpvsftpdServU

客戶端軟件:ftplftplftpgetwgetcurlfilezillagftp

 

三、ftp響應碼

ftpWeb服務軟件一樣有請求響應碼,可以根據響應碼來確認故障;

  1xx:信息

  2xx:成功類的狀態碼

  3xx:提示需進一步提供補充信息的狀態碼

  4xx:客戶端錯誤

  5xx:服務端錯誤

[root@stu09 ~]# ftp172.16.9.28
Connected to172.16.9.28 (172.16.9.28).
220 (vsFTPd 2.2.2)                 #:狀態碼
Name (172.16.9.28:root): ftp        #匿名用戶被映射成爲ftp
331 Please specifythe password.
Password:
230 Loginsuccessful.
Remote system typeis UNIX.
Using binary mode totransfer files.
ftp> ls
227 Entering Passive Mode (172,16,9,28,254,240).     #被動模式,172.16.9.28:(254+150+1)*240)   IP:端口
150 Here comes thedirectory listing.
drwxr-xr-x    2 0       0            4096 Aug 04  2014 pub
226 Directory sendOK.

 

四、ftp實現軟件vsftpd

  ftp可以使用登錄的用戶認證類型有虛擬用戶、系統用戶、匿名用戶。

 在CentOS 6.6中安裝vsftpd還是很方便的,直接yum install vsftpd就可以了。安裝完後生成的文件如下:

  用戶認證配置文件:/etc/pam.d/vsftpd

  服務腳本/etc/rc.d/init.d/vsftpd

  日誌滾動程序:/etc/logrotate.d/vsftpd

  配置文件:/etc/vsftpd

    主配置文件:/etc/vsftpd/vsftpd.conf

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

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

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

 

五、vsftpd的配置說明

1)匿名用戶的配置

anonymous_enable=YES     #啓用匿名用戶 

anon_upload_enable=YES       #啓用匿名用戶上傳功能

anon_mkdir_write_enable=YES    #啓用匿名用戶創建目錄功能

anon_other_write_enable=YES      #啓用匿名用戶刪除文件功能

注意:上傳的功能取決於系統的權限和是否有上傳的權限

 

2)系統用戶的配置

local_enable=YES     #開啓系統用戶 

write_enable=YES             #開啓寫的權限

local_umask=022     #系統用戶上傳文件完文件的權限

 

禁錮所有的ftp本地用戶其家目錄中

chroot_local_user=YES 

禁錮指定的ftp本地用戶其家目錄中

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

 

3)虛擬用戶

  所有的虛擬用戶會被統一映射爲一個指定的系統賬號,訪問的共享位置即爲系統賬號的家目錄;各虛擬用戶可被賦予不同的訪問權限,通過匿名用戶的權限控制參數進行指定;虛擬用戶賬號可存儲在文件和關係型數據庫表中。

 

4)其它配置信息說明

開啓目錄消息,就是切換此目錄時,會顯示此目錄中以.message文件的內容,此.messages是隱藏文件

dirmessage_enable=YES

 

日誌

xferlog_enable=YES       #開啓上傳,下載日誌

xferlog_file=/var/log/xferlog

xferlog_std_format=YES

 

改變上傳文件的屬主

chown_uploads=YES

chown_username=whoever

 

會話:

idle_session_timeout=600    #空閒會話超時時長

data_connection_timeout=120   #數據連接超時時長

 

vsftp使用pma完成使用認證,其用到的pam配置文件

pam_service_name=vsftpd      

 

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

userlist_enable=YES

userlist_deny=YES|NO

 

默認的文件爲/etc/vsftpd/user_list

 

連接限制:

max_clients:最大併發連接數;

max_per_ip:每個IP可同時發起的併發請求數;

 

傳輸速率:

anon_max_rate:匿名用戶的最大傳輸速率,單位是“字節/秒”

 

local_max_rate:本地用戶的最大傳輸速率,單位是“字節/秒”

 

 

六、實現vsftp+pam+mysql

wKioL1VTXYKRyf_LAAVl4L7hqOU793.bmp

  通過pam_mysql模塊實現把用戶名和密碼存儲在MySQL數據庫,當客戶端登錄進行認證時就在MySQL數據庫進行查找,以實現用戶的管理。


1、安裝所需要程序

1)安裝mysqlpam_mysql

# yum -y install vsftpd mysql-servermysql-devel pam_mysql

注意:pam_mysqlepel源提供。

2、準備數據庫及相關表

1)準備數據庫和表

首先請確保mysql服務已經正常啓動,而後,按需要建立存儲虛擬用戶的數據庫即可,這裏將其創建爲vsftp數據庫 

MariaDB [(none)]> CREATE DATABASE vsftp
 
MariaDB [vsftp]> grant select on vsftp.*to vsftp@'172.16.%.%' identified by 'vsftpd';
Query OK, 0 rows affected (0.04 sec)
 
MariaDB [vsftp]> flush privileges;
Query OK, 0 rows affected (0.00 sec) 
 
MariaDB [vsftp]> CREATE TABLE users (id  INT UNSIGNED NOT NULL AUTO_INCREMENTPRIMARY KEY, name VARCHAR(50) BINARY NOT NULL, password CHAR(48)BINARY NOTNULL);

 

2)添加測試的虛擬賬號

根據需要添加所所需要的用戶,需要說明的是,這裏將其密碼爲了安全起見應該使用PASSWORD函數加密後存儲;

MariaDB [vsftp]> INSERT INTO users(name,password) VALUES ('tom',password('ftp')),('jerry',password('vsftp'));
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0  Warnings: 0
 
MariaDB [vsftp]> select * from users;
+----+-------+-------------------------------------------+
| id | name | password                                  |
+----+-------+-------------------------------------------+
|  1| tom   |*89DED2CC215FEBF4D5077792E8CBF7B3A3CE6A53 |
|  2| jerry | *EDE7E32F5C826747A362F47049DF433214ADBFE6 |
+----+-------+-------------------------------------------+

3、配置vsftpd

1)建立pam認證所需文件

#vi /etc/pam.d/vsftpd.mysql

添加如下兩行

auth required pam_mysql.so user=vsftppasswd=vsftpd host=172.16.9.20 db=vsftp table=users usercolumn=namepasswdcolumn=password crypt=2
 
account required pam_mysql.so user=vsftppasswd=vsftpd host=172.16.9.20 db=vsftp table=users usercolumn=namepasswdcolumn=password crypt=2

 

注意:由於mysql的安裝方式不同,pam_mysql.so基本unix sock連接mysql服務器時可能會出問題,此時建議授權一個遠程連接的mysql並訪問vsftpd數據庫的用戶;

 

2)修改vsftpd的配置文件,使其適應mysql認證

建立虛擬用戶映射的系統用戶及對應的目錄

[root@stu09 ~]# mkdir /ftpserver
[root@stu09 ~]# useradd -s /sbin/nologin  -d /ftpserver/pub  vuser

 

請確保/etc/vsftpd.conf中已經啓用了以下選項

anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_upload_enable=NO
anon_mkdir_write_enable=NO
chroot_local_user=YES

 

而後添加以下選項

guest_enable=YES
guest_username=vuser

 

並確保pam_service_name選項的值如下所示

pam_service_name=vsftpd.mysql

 

3)重啓vsftpd服務

 

4、配置虛擬用戶具有不同的訪問權限

vsftpd可以在配置文件目錄中爲每個用戶提供單獨的配置文件以定義其ftp服務訪問權限,每個虛擬用戶的配置文件名同虛擬用戶的用戶名。配置文件目錄可以是任意未使用目錄,只需要在vsftpd.conf指定其路徑及名稱即可。

 

1)配置vsftpd爲虛擬用戶使用配置文件目錄

 

#vim vsftpd.conf

添加如下選項

user_config_dir=/etc/vsftpd/vuser_config

 

2)創建所需要目錄,併爲虛擬用戶提供配置文件

mkdir /etc/vsftpd/vuser_config/
cd /etc/vsftpd/vuser_config/
touch tom jerry

3)配置虛擬用戶的訪問權限

 

虛擬用戶對vsftpd服務的訪問權限是通過匿名用戶的的相關指令進行的,比如,如果需要讓tom用戶具有上傳文件的權限,可以修改/etc/vsftpd/vuser_config/tom文件,在裏面添加如下選項即可。

anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable=(YES|NO}


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