使用yum安裝pure-ftpd
Pure-FTPd是Linux上的一個(gè)開(kāi)源的FTP服務(wù)程序,在易用性、配置性上比vsftp較方便,下面我們使用CentOS 6演示安裝和配置pure-ftpd。
安裝epel源
# yum install epel-release
使用yum命令安裝Pure-ftpd
# yum install pure-ftpd
配置Pure-ftpd
# vim /etc/pure-ftpd/pure-ftpd.conf # 1. 修改 PAMAuthentication no # 2. 使用PureDB存儲(chǔ)賬號(hào)信息,除去前面的注釋# PureDB /etc/pure-ftpd/pureftpd.pdb # 3. 打開(kāi)ftp被動(dòng)模式的端口范圍,并確認(rèn)改端口范圍沒(méi)有被防火墻攔截 PassivePortRange 30000 31000 ForcePassiveIP PASV的外網(wǎng)IP地址 # 4. 關(guān)閉匿名訪問(wèn)權(quán)限 AnonymousOnly no # 5. 打開(kāi)日志記錄功能 AltLog clf:/var/log/pureftpd.log # 6. 限制每個(gè)用戶只能在自己的目錄中 ChrootEveryone yes
添加FTP用戶
ftptest是虛擬用戶,不需要在系統(tǒng)中進(jìn)行新建
-u -g后是系統(tǒng)用戶賬號(hào)或者id號(hào),一般使用運(yùn)行的nginx或apache的賬號(hào)id
-d是默認(rèn)的家目錄
# pure-pw useradd ftptest -u apache -g apache -d /var/www/blog/ftp -m 輸入密碼...
保存Pure-FTPD用戶數(shù)據(jù)庫(kù)
# pure-pw mkdb
使添加的用戶生效
# service pure-ftpd start
配置mysql管理pure-ftpd用戶
# 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 你服務(wù)器的ip或域名,注意防火墻 MYSQLPort mysql服務(wù)器的端口
創(chuàng)建pureftpd數(shù)據(jù)庫(kù),并創(chuàng)建表,表結(jié)構(gòu)如下,我只使用了賬號(hào)密碼功能,如果需要使用帶寬限制、訪問(wèn)限制可使用其他字段,同時(shí)要修改pureftpd-mysql.conf的相應(yīng)配置。
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
(由于安全機(jī)制問(wèn)題,log文件只能放在/var/log目錄下,放到其它地方不能正常記錄)
2)修改/etc/rsyslog.conf
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
服務(wù) service rsyslog restart
到現(xiàn)在設(shè)置完畢,重啟下pure-ftpd,現(xiàn)在在客戶端登陸ftp就可以看到日志記錄了
rsyslog服務(wù)了解 : http://www.linuxidc.com/Linux/2017-02/140484.htm
另外:pure-ftpd的配置文件中有對(duì)日志選項(xiàng)進(jìn)配置項(xiàng)。
=============[pure-ftpd.conf日志選項(xiàng)]==========================
If you want to log all client commands, set this to “yes”.
This directive can be duplicated to also log server responses.
如果你想記錄所有的操作記錄,如刷新列表,進(jìn)入目錄的日志等,將值設(shè)為yes
VerboseLog no
If you want to add the PID to every logged line, uncomment the following
line.
如果你想在日志的每一行都添加當(dāng)前的pure-ftpd的pid,將值設(shè)為yes,否則就注釋掉
LogPID yes
不啟用AltLog選項(xiàng),保持所有的AltLog的注釋狀態(tài)AltLog clf:/var/log/pureftpd.log
pureftp日志
ftp.* -/var/log/pureftpd.log
注意: 不要去掉/var前面的-號(hào),否則日志會(huì)在/var/log/messages 與 /var/log/purefpd.log里各記錄一份. 添加了-號(hào),就只會(huì)記錄在/var/log/purefptd.log內(nèi)
常見(jiàn)錯(cuò)誤及解決辦法
-
登錄返回 530錯(cuò)誤
tail -f /var/log/message查看錯(cuò)誤日志后發(fā)現(xiàn)為Authentication failed for user。
該錯(cuò)誤是因?yàn)橘~號(hào)認(rèn)證失敗導(dǎo)致的,你你沒(méi)有打開(kāi)PureDB功能,我使用的是PureDB存儲(chǔ)賬號(hào)密碼,你也可以配置mysql存儲(chǔ),打開(kāi)后需要重啟服務(wù)器。
-
使用ftp軟件連接成功后,目錄讀取失敗
第一步:pure-ftpd是支持被動(dòng)模式連接的,被動(dòng)模式連接方式需要服務(wù)端打開(kāi)一個(gè)隨機(jī)端口,先試試用主動(dòng)模式是否可以連接,我使用的Filezilla軟件(一般客戶端軟件都支持),如果可以連接一般原因就是服務(wù)端的隨機(jī)端口被防火墻給阻攔掉了。
第二步:cat /proc/sys/net/ipv4/ip_local_port_range該文件,該文件是tcp的預(yù)留端口配置,查看你設(shè)置的端口范圍是否在該范圍之內(nèi),如果在設(shè)置成其他的
查看配置
PassivePortRange
的端口范圍并配置防火墻通過(guò)即可。
日志查看
pure-ftpd的訪問(wèn)日志都在/var/log/pureftpd.log下,上傳、下載、刪除了某個(gè)文件都會(huì)記錄在該日志里。
ftp主動(dòng)模式(port)與被動(dòng)模式(pasv)
主動(dòng)模式
主動(dòng)方式的FTP是這樣的:客戶端從一個(gè)任意的非特權(quán)端口N(N>1024)連接到FTP服務(wù)器的命令端口,也就是21端口。然后客戶端開(kāi)始監(jiān)聽(tīng)端口N+1,并發(fā)送FTP命令“port N+1”到FTP服務(wù)器。接著服務(wù)器會(huì)從它自己的數(shù)據(jù)端口(20)連接到客戶端指定的數(shù)據(jù)端口(N+1)。
被動(dòng)模式
當(dāng)開(kāi)啟一個(gè) FTP連接時(shí),客戶端打開(kāi)兩個(gè)任意的非特權(quán)本地端口(N > 1024和N+1)。第一個(gè)端口連接服務(wù)器的21端口,但與主動(dòng)方式的FTP不同,客戶端不會(huì)提交PORT命令并允許服務(wù)器來(lái)回連它的數(shù)據(jù)端口,而是提交 PASV命令。這樣做的結(jié)果是服務(wù)器會(huì)開(kāi)啟一個(gè)任意的非特權(quán)端口(P > 1024),并發(fā)送PORT P命令給客戶端。然后客戶端發(fā)起從本地端口N+1到服務(wù)器的端口P的連接用來(lái)傳送數(shù)據(jù)。
總結(jié)
主動(dòng)模式:服務(wù)器向客戶端敲門,然后客戶端開(kāi)門(隨機(jī)開(kāi)個(gè)高位端口)
被動(dòng)模式:客戶端向服務(wù)器敲門,然后服務(wù)器開(kāi)門(隨機(jī)開(kāi)個(gè)高位端口,pure-ftpd的配置項(xiàng)為PassivePortRange)
優(yōu)缺點(diǎn)
主動(dòng)FTP對(duì)FTP服務(wù)器的管理有利,但對(duì)客戶端的管理不利。因?yàn)镕TP服務(wù)器企圖與客戶端的高位隨機(jī)端口建立連接,而這個(gè)端口很有可能被客戶端的防火墻阻塞掉。被動(dòng)FTP對(duì)FTP客戶端的管理有利,但對(duì)服務(wù)器端的管理不利。因?yàn)榭蛻舳艘c服務(wù)器端建立兩個(gè)連接,其中一個(gè)連到一個(gè)高位隨機(jī)端口,而這個(gè)端口很有可能被服務(wù)器端的防火墻阻塞掉。
幸運(yùn)的是,有折衷的辦法。既然FTP服務(wù)器的管理員需要他們的服務(wù)器有最多的客戶連接,那么必須得支持被動(dòng)FTP。我們可以通過(guò)為FTP服務(wù)器指定一個(gè)有 限的端口范圍來(lái)減小服務(wù)器高位端口的暴露。這樣,不在這個(gè)范圍的任何端口會(huì)被服務(wù)器的防火墻阻塞。雖然這沒(méi)有消除所有針對(duì)服務(wù)器的危險(xiǎn),但它大大減少了危 險(xiǎn)。
Pureftpd http://www.sfodin.cn/Linux/2016-11/137619.htm
PureFtp+PureAdmin:實(shí)現(xiàn)基于虛擬賬號(hào)的FTP服務(wù)器 http://www.sfodin.cn/Linux/2013-06/85728.htm
PureFtp+PureAdmin安裝配置 http://www.sfodin.cn/Linux/2014-06/103267.htm
Vsftpd虛擬用戶的配置及PureFtp配置解析 http://www.sfodin.cn/Linux/2012-12/76502.htm
CentOS7.2安裝FTP(pure-ftpd-1.0.43) http://www.sfodin.cn/Linux/2016-10/135971.htm