vsftpd程序實現ftp


1、ftp工做原理簡介mysql

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

 

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

 

2、ftp軟件種類vim

ftp的服務器和客戶端的軟件種類有不少軟件能夠實現的安全

服務器端軟件:wu-ftpdproftpdpureftpvsftpdServUbash

客戶端軟件:ftplftplftpgetwgetcurlfilezillagftp服務器

 

3、ftp響應碼session

ftpWeb服務軟件同樣有請求響應碼,能夠根據響應碼來確認故障;併發

  1xx:信息curl

  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.

 

4、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訪問產資源的位置:給虛擬用戶指定的映射在爲成系統用戶的家目錄

 

5、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:本地用戶的最大傳輸速率,單位是「字節/秒」

 

 

6、實現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}
相關文章
相關標籤/搜索