CentOS pure-ftpd配置及錯誤解決
使用yum安裝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儲存賬號資訊,除去前面的註釋# 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
新增FTP使用者
ftptest是虛擬使用者,不需要在系統中進行新建
-u -g後是系統使用者賬號或者id號,一般使用執行的nginx或apache的賬號id
-d是預設的家目錄
# pure-pw useradd ftptest -u apache -g apache -d /var/www/blog/ftp -m
輸入密碼...
儲存Pure-FTPD使用者資料庫
# 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 你伺服器的ip或域名,注意防火牆 MYSQLPort mysql伺服器的埠
建立pureftpd資料庫,並建立表,表結構如下,我只使用了賬號密碼功能,如果需要使用頻寬限制、訪問限制可使用其他欄位,同時要修改pureftpd-mysql.conf的相應配置。
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目錄下,放到其它地方不能正常記錄)
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
服務 service rsyslog restart
到現在設定完畢,重啟下pure-ftpd,現在在客戶端登陸ftp就可以看到日誌記錄了
另外: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
pureftp日誌
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主動模式(port)與被動模式(pasv)
主動模式
主動方式的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伺服器指定一個有 限的埠範圍來減小伺服器高位埠的暴露。這樣,不在這個範圍的任何埠會被伺服器的防火牆阻塞。雖然這沒有消除所有針對伺服器的危險,但它大大減少了危 險。