Pure-FTPd是Linux上的一個開源的FTP服務程序,在易用性、配置性上比vsftp較方便,下面咱們使用centos6演示安裝和配置pure-ftpd。mysql
# yum install epel-release
# yum install pure-ftpd
# vim /etc/pure-ftpd/pure-ftpd.conf # 1. 修改 PAMAuthentication no # 2. 使用PureDB存儲帳號信息,除去前面的註釋# PureDB /etc/pure-ftpd/pureftpd.pdb # 3. 打開ftp被動模式的端口範圍,並確認改端口範圍沒有被防火牆攔截 PassivePortRange 30000 31000 ForcePassiveIP PASV的外網IP地址 # 4. 關閉匿名訪問權限 AnonymousOnly no # 5. 打開日誌記錄功能 AltLog clf:/var/log/pureftpd.log # 6. 限制每一個用戶只能在本身的目錄中 ChrootEveryone yes
ftptest是虛擬用戶,不須要在系統中進行新建
-u -g後是系統用戶帳號或者id號,通常使用運行的nginx或apache的帳號id
-d是默認的家目錄linux
# pure-pw useradd ftptest -u apache -g apache -d /var/www/blog/ftp -m 輸入密碼...
# pure-pw mkdb
# service pure-ftpd start
# vim /etc/pure-ftpd/pure-ftpd.conf # 修改pure-ftpd.conf配置文件,去除MySQLConfigFile前# MySQLConfigFile /etc/pure-ftpd/pureftpd-mysql.conf #PureDB /etc/pure-ftpd/pureftpd.pdb # vim /etc/pure-ftpd/pureftpd-mysql.conf MYSQLServer 你服務器的ip或域名,注意防火牆 MYSQLPort mysql服務器的端口
建立pureftpd數據庫,並建立表,表結構以下,我只使用了帳號密碼功能,若是須要使用帶寬限制、訪問限制可以使用其餘字段,同時要修改pureftpd-mysql.conf的相應配置。nginx
CREATE DATABASE ftpdb; CREATE TABLE users( User varchar(16) NOT NULL default '', status enum('0','1') NOT NULL default '0', Password varchar(64) NOT NULL default '', Uid varchar(11) NOT NULL default '-1', Gid varchar(11) NOT NULL default '-1', Dir varchar(128) NOT NULL default '', ULBandwidth smallint(5) NOT NULL default '0', DLBandwidth smallint(5) NOT NULL default '0', comment tinytext NOT NULL, ipaccess varchar(15) NOT NULL default '*', QuotaSize smallint(5) NOT NULL default '0', QuotaFiles int(11) NOT NULL default 0, PRIMARY KEY (User), UNIQUE KEY User (User) ); INSERT INTO `tp` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('ftpuser', '1', MD5('secret'), '2001', '2001', '/home/ftpdir', '0', '0', '', '*', '0', '0');
1)創建文件/var/log/pureftpd.log
(因爲安全機制問題,log文件只能放在/var/log目錄下,放到其它地方不能正常記錄)sql
2)修改/etc/rsyslog.conf
shell
1.在這行的cron.none
後面添加;ftp.none
使ftp的日誌信息成私有
*.info;mail.none;authpriv.none;cron.none /var/log/messages
爲
*.info;mail.none;authpriv.none;cron.none;ftp.none /var/log/messages
數據庫
2.在/etc/rsyslog.conf
文件最後加上
3.重啓syslogd
服務 service rsyslog restart
apache
到如今設置完畢,重啓下pure-ftpd,如今在客戶端登錄ftp就能夠看到日誌記錄了vim
rsyslog服務瞭解 : http://www.linuxidc.com/Linux/2017-02/140484.htmcentos
另外:pure-ftpd的配置文件中有對日誌選項進配置項。安全
=============[pure-ftpd.conf日誌選項]==========================
If you want to log all client commands, set this to "yes".
This directive can be duplicated to also log server responses.
若是你想記錄全部的操做記錄,如刷新列表,進入目錄的日誌等,將值設爲yes
VerboseLog no
If you want to add the PID to every logged line, uncomment the following
line.
若是你想在日誌的每一行都添加當前的pure-ftpd的pid,將值設爲yes,不然就註釋掉
LogPID yes
不啓用AltLog選項,保持全部的AltLog的註釋狀態
AltLog clf:/var/log/pureftpd.log
ftp.* -/var/log/pureftpd.log
注意: 不要去掉/var前面的-號,不然日誌會在/var/log/messages 與 /var/log/purefpd.log裏各記錄一份. 添加了-號,就只會記錄在/var/log/purefptd.log內
登陸返回 530錯誤
tail -f /var/log/message查看錯誤日誌後發現爲Authentication failed for user。
該錯誤是由於帳號認證失敗致使的,你你沒有打開PureDB功能,我使用的是PureDB存儲帳號密碼,你也能夠配置mysql存儲,打開後須要重啓服務器。
使用ftp軟件鏈接成功後,目錄讀取失敗
第一步:pure-ftpd是支持被動模式鏈接的,被動模式鏈接方式須要服務端打開一個隨機端口,先試試用主動模式是否能夠鏈接,我使用的Filezilla軟件(通常客戶端軟件都支持),若是能夠鏈接通常緣由就是服務端的隨機端口被防火牆給阻攔掉了。
第二步:cat /proc/sys/net/ipv4/ip_local_port_range該文件,該文件是tcp的預留端口配置,查看你設置的端口範圍是否在該範圍以內,若是在設置成其餘的
查看配置PassivePortRange
的端口範圍並配置防火牆經過便可。
pure-ftpd的訪問日誌都在/var/log/pureftpd.log下,上傳、下載、刪除了某個文件都會記錄在該日誌裏。
主動方式的FTP是這樣的:客戶端從一個任意的非特權端口N(N>1024)鏈接到FTP服務器的命令端口,也就是21端口。而後客戶端開始監聽端口N+1,併發送FTP命令「port N+1」到FTP服務器。接着服務器會從它本身的數據端口(20)鏈接到客戶端指定的數據端口(N+1)。
當開啓一個 FTP鏈接時,客戶端打開兩個任意的非特權本地端口(N > 1024和N+1)。第一個端口鏈接服務器的21端口,但與主動方式的FTP不一樣,客戶端不會提交PORT命令並容許服務器來回連它的數據端口,而是提交 PASV命令。這樣作的結果是服務器會開啓一個任意的非特權端口(P > 1024),併發送PORT P命令給客戶端。而後客戶端發起從本地端口N+1到服務器的端口P的鏈接用來傳送數據。
主動模式:服務器向客戶端敲門,而後客戶端開門(隨機開個高位端口)
被動模式:客戶端向服務器敲門,而後服務器開門(隨機開個高位端口,pure-ftpd的配置項爲PassivePortRange)
主動FTP對FTP服務器的管理有利,但對客戶端的管理不利。由於FTP服務器企圖與客戶端的高位隨機端口創建鏈接,而這個端口頗有可能被客戶端的防火牆阻塞掉。被動FTP對FTP客戶端的管理有利,但對服務器端的管理不利。由於客戶端要與服務器端創建兩個鏈接,其中一個連到一個高位隨機端口,而這個端口頗有可能被服務器端的防火牆阻塞掉。
幸運的是,有折衷的辦法。既然FTP服務器的管理員須要他們的服務器有最多的客戶鏈接,那麼必須得支持被動FTP。咱們能夠經過爲FTP服務器指定一個有 限的端口範圍來減少服務器高位端口的暴露。這樣,不在這個範圍的任何端口會被服務器的防火牆阻塞。雖然這沒有消除全部針對服務器的危險,但它大大減小了危 險。