因工作原因需要開ftp服務,通過cu等網站查閱了相關資料,選擇了pure-ftpd+mysql作為ftp伺服器,因需要限制指定用戶的訪問許可權,而網上關於pure-ftpd+mysql的文章都沒有介紹這方面的內容。在仔細查看pure-ftpd的說明文檔后終於配置成功,現將經驗貼出來跟大家分享。
系統:freebsd 5.3+pure-ftpd-1.0.21+mysql-5.0.3-beta
安裝過程
1:更新cvs樹,獲得最新版本的pure-ftpd和mysql,再以port方式安裝pure-ftpd和mysql,修改配置使之能正常登陸。關於這一步網上的文章很多,這裡不再贅述
2:ee /usr/local/etc/pureftpd-mysql.conf (如果沒有的話需要手工複製過來)
3:修改 「MYSQLGetPW SELECT Password FROM users WHERE User="\L" 」,將其改為「MYSQLGetPW SELECT Password FROM users WHERE User="\L" and (ipaccess='*' or ipaccess=SUBSTRING_INDEX("\R",".",3))」這裡是限制C類地址登陸,限制單個ip可直接將ipaccess欄位設為限制登陸的ip地址。以此類推,可以設定為限制A、B類地址或指定ip地址範圍。
其實這個實現方法就是一個簡單的sql語句,有興趣的可在此基礎上設計出更安全,效率更高的配置~
pureftpd-mysql.conf中各轉義符的含義說明:
# \L is replaced by the login of the user trying to authenticate.
用「\L」置換嘗試通過認證的用戶名
# \I is replaced by the IP address the user connected to.
用「\I」置換用戶訪問的IP地址(如ftp伺服器在不同的ip地址上開放多個ftp服務,這個就能判斷用戶訪問的是哪個ftp服務)
# \P is replaced by the port number the user connected to.
以「\P」置換用戶訪問的埠號(作用同上)
# \R is replaced by the IP address the user connected from.
以「\R」置換訪問者的ip地址(這就是限制ip登陸的關鍵)
# \D is replaced by the remote IP address, as a long decimal number.
以「\D」置換訪問者的以十進位表達的ip地址。
mysql中用戶表建表語句:
DROP TABLE IF EXISTS `users`;
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`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
本文也收錄在本人的blog中,因個人水平有限,如有錯誤請予指正,並請大家多提寶貴意見。
[火星人 ] pureftpd+mysql限制單個ip或A、B、C類地址登陸的方法已經有201次圍觀