1、ftp工做原理簡介mysql
ftp是工做於應用層的協議,21/tcp端口,ftp是C/S的模型,數據分爲兩種鏈接,分別是命令鏈接數據鏈接,命令鏈接是文件管理類命令,始終在線的鏈接;數據鏈接是數據傳輸,是按需建立及關閉的鏈接。數據在傳輸格式根據文件類型進行選擇傳輸格式,有文件傳輸、二進制傳輸。sql
ftp有兩鏈接模式主動和被動模式,在主動模式中由服務器建立鏈接,客戶端響應鏈接的方式,服務器選擇21/tcp端口,客戶端在響應鏈接選擇一個隨機端口的與服務器進行通訊,在傳輸文件時服務器將使用20/tcp端口與客戶端的隨機端口加1進行數據傳輸;在被動模式中客戶端選擇一個隨機端口請求服務器的21/tcp端口,服務器用21號端口響應客戶端的請求,當文件傳輸時客戶端使用在隨機端口上加1的端口請求服務器的文件數據,服務器選擇一個隨機端口響應客戶端的文件傳輸請求。數據庫
2、ftp軟件種類vim
ftp的服務器和客戶端的軟件種類有不少軟件能夠實現的安全
服務器端軟件:wu-ftpd、proftpd、pureftp、vsftpd、ServUbash
客戶端軟件:ftp、lftp、lftpget、wget、curl、filezilla、gftp服務器
3、ftp響應碼session
ftp和Web服務軟件同樣有請求響應碼,能夠根據響應碼來確認故障;併發
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
經過pam_mysql模塊實現把用戶名和密碼存儲在MySQL數據庫,當客戶端登陸進行認證時就在MySQL數據庫進行查找,以實現用戶的管理。
1、安裝所須要程序
1)安裝mysql和pam_mysql
# yum -y install vsftpd mysql-servermysql-devel pam_mysql
注意:pam_mysql由epel源提供。
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}