最近嘗試了在FreeBSD上配置了一個基於Proftpd的FTP服務器,要求使用MySQL數據庫存放FTP用戶信息,並在數據庫內存放用戶Quota磁盤限額信息,同時還支持anonymous匿名用戶登陸。
之前網上搜索到一些文章,好像都出自同一個朋友的手,到處都是轉載或者稍微的修改。下面是Michael根據大家的經驗和proFTPd的MAN文檔進行的實際安裝手記。
本次Michael的FTP服務器使用的是FreeBSD 4.10 Release版本,Michael決定使用FreeBSD非常優秀的Ports系統進行所有軟件的安裝。以下的所有操作均是在Root用戶或者sudo root的情況下完成。
一、安裝MySQL
#cd /usr/ports/databases/MySQL41-server
#make install
系統會自動下載mysql的安裝包MySQL-4.1.14.tar.gz,並完成編譯和安裝過程。
注1:對於mysql的安裝,需要說明幾點要注意的地方,FreeBSD的Ports自動完成MySQL安裝後,還需要自己完成下面幾件事情後才能正常使用。
1、創建mysql用戶和MySQL用戶組,並修改目錄權限。
#pw groupadd MySQL -g 88
#pw adduser MySQL -u 88 -g 88 -d /nonexistent -s /sbin/nologin
#chown -R mysql:mysql /var/db/MySQL
#chown -R mysql:mysql /usr/local/share/MySQL
2、創建MySQL系統數據庫
#/usr/local/bin/MySQL_install_db
#/usr/lcoal/bin/MySQL_create_system_tables
3、創建MySQL自啟動腳本
#cp /usr/local/share/mysql/mysql.server /usr/local/etc/rc.d/MySQL-server.sh
4、創建MySQL配置文件 my.cnf
#cp /usr/local/share/MySQL/my-medium.cnf /etc/my.cnf (有my-medium、small、large、huge等可選)
現在,你可以通過 /usr/local/etc/rc.d/mysql-server.sh start 或者重啟系統來啟動MySQL了。
二、安裝proFTPd
和MySQL的安裝很相似,使用ports安裝:
#cd /usr/ports/ftp/proFTPd-MySQL
#make install
安裝的時候會要求選擇proFTPd要安裝的模塊,選擇好MySQL和quota,其他的根據情況選擇然後系統自動下載proFTPd-1.3.0rc2.tar.bz2並完成編譯和安裝。
三、配置proFTPd.conf
完成上面的安裝,proFTPd其實已經可以運行了,但是我們還需要根據自己的安裝要求進行必要的配置,所以先備份默認的配置文件。
#cp /usr/local/etc/proftpd.conf /usr/local/etc/proFTPd.conf.sample
1、重新編寫proFTPd.conf,下面是Michael的文件,大家完全照抄就基本可以了。
#基本配置 ServerName "Michael's Ftp Site" ServerType standalone DefaultServer on #設置用戶登陸時不顯示FTP服務器版本信息 ServerIdent off #設置ftp服務使用的端口,可以修改 Port 21 #設置ftp目錄的權限 Umask 022 #設置系統各種超時時間和重試次數 MaxLoginAttempts 3 TimeoutLogin 120 TimeoutIdle 600 TimeoutNoTransfer 900 TimeoutStalled 3600 #允許最大的同時連接用戶數 MaxClients 10 #允許每個用戶主機最大並發連接數 MaxClIEntsPerHost 3 AllowOverwrite no AllowStoreRestart on UseReverseDNS off #如果shell為空時允許用戶登錄 RequireValidShell off #將用戶限制在自己的主目錄下 ,這個設置很重要 DefaultRoot ' #設置系統最大的進程數,防止DOS攻擊,默認是30 MaxInstances 10 #設置系統用於運行proftpd服務的用戶和用戶組(需要後面自己創建) User FTPUSR Group FTPGRP #設置對全局的文件可以進行改寫 AllowOverwrite on #設置系統運行日志和文件傳輸日志 SystemLog /var/log/proftpd.syslog TransferLog /var/log/proftpd.transferlog ######################## 下面是匿名登陸部分的設置 ################# #匿名用戶登陸後訪問的目錄為 FTP用戶的主目錄
至此,完成了proFTPd.conf配置文件的編寫。
注2:之前Michael按照網上的部分文檔編寫了最後部分的MySQL調用語句,結果最後運行proFTPd後,登陸時總是出現421 Service not available 的錯誤,後來發現是最後部分的語句有問題,上面的語句是Michael經過修改後的,將不會有問題。
四、完成MySQL數據庫表配置
完成proFTPd.conf配置文件後,需要進行數據庫表的配置,包括創建表和插入數據。
1、登陸MySQL或者使用PHPmyadmin工具創建數據庫 FTP
#MySQLadmin create FTP
2、運行下面的sql語句創建表和插入必要數據
-- PHPMyAdmin SQL Dump
-- version 2.6.4-pl2
-- http://www.PHPmyadmin.Net
--
-- 主機: localhost
-- 生成日期: 2005 年 11 月 03 日 14:23
-- 服務器版本: 4.1.14
-- PHP 版本: 4.4.0
--
-- 數據庫: `FTP`
--
-- --------------------------------------------------------
--
-- 表的結構 `FTPGRPS`
--
CREATE TABLE `FTPGRPS` (
`groupname` text NOT NULL,
`gid` smallint(6) NOT NULL default '0',
`members` text NOT NULL
) ENGINE=MyISAM;;
--
-- 導出表中的數據 `FTPGRPS`
--
INSERT INTO `FTPGRPS` VALUES ('FTPGRP', 2001, 'FTPUSR');
INSERT INTO `FTPGRPS` VALUES ('ftpusers', 2002, 'FTP');
-- --------------------------------------------------------
--
-- 表的結構 `FTPUSERS`
--
CREATE TABLE `FTPUSERS` (
`userid` text NOT NULL,
`passwd` text NOT NULL,
`uid` int(11) NOT NULL default '0',
`gid` int(11) NOT NULL default '0',
`homedir` text,
`shell` text
) ENGINE=MyISAM;;
--
-- 導出表中的數據 `FTPUSERS`
--
INSERT INTO `FTPUSERS` VALUES ('Michael', 'testftp', 2001, 2001, '/var/FTP/incoming', '');
-- --------------------------------------------------------
--
-- 表的結構 `quotalimits`
--
CREATE TABLE `quotalimits` (
`name` varchar(30) default NULL,
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`per_session` enum('false','true') NOT NULL default 'false',
`limit_type` enum('soft','hard') NOT NULL default 'soft',
`bytes_in_avail` float NOT NULL default '0',
`bytes_out_avail` float NOT NULL default '0',
`bytes_xfer_avail` float NOT NULL default '0',
`files_in_avail` int(10) unsigned NOT NULL default '0',
`files_out_avail` int(10) unsigned NOT NULL default '0',
`files_xfer_avail` int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM;;
--
-- 導出表中的數據 `quotalimits`
--
-- 設置Michael用戶,磁盤配額1G,可以上傳下載流量2G,最多文件數10個
INSERT INTO `quotalimits` VALUES ('Michael', 'user', 'false', 'soft', 1.024e+09, 0, 2.048e+09, 10, 0, 0);
-- --------------------------------------------------------
--
-- 表的結構 `quotatallIEs`
--
CREATE TABLE `quotatallIEs` (
`name` varchar(30) NOT NULL default '',
`quota_type` enum('user','group','class','all') NOT NULL default 'user',
`bytes_in_used` float NOT NULL default '0',
`bytes_out_used` float NOT NULL default '0',
`bytes_xfer_used` float NOT NULL default '0',
`files_in_used` int(10) unsigned NOT NULL default '0',
`files_out_used` int(10) unsigned NOT NULL default '0',
`files_xfer_used` int(10) unsigned NOT NULL default '0'
) ENGINE=MyISAM;;
如果你想設置quota,只要在FTPquotalimits表裡設置一下就行了,這個表裡的各個參數分別代表:
代碼:
quotalimits表 name: - 用戶帳號 quota type: - user, group, class, all (we use user) per_session: - true or false (we use true) limit_type: - 硬限制 or 軟限制 (我們一般用硬限制) bytes_in_avail: - 允許上傳的字節數 bytes_out_avail: - 允許下載的字節數 bytes_xfer_avail: - 允許傳輸的字節數(包括上傳/下載) files_in_avail: - 允許上傳的文件數 files_out_avail: - 允許下載的文件數 files_xfer_avail: - 允許傳輸的文件數(包括上傳/下載)
五、完成最後的用戶、用戶組和目錄設置
1、創建proFTPd服務運行的用戶和用戶組
#pw groupadd FTPGRP -g 2001
#pw adduser FTPUSR -u 2001 -g 2001 -d /var/FTP/incoming -s /sbin/nologin
2、創建匿名登陸用戶映射的系統用戶和用戶組
#pw groupadd FTPusers -g 2002
#pw adduser ftp -u 2002 -g 2001 -d /var/FTP/incoming -s /sbin/nologin
六、運行測試配置系統服務
1、運行proFTPd服務
#/usr/local/sbin/proFTPd
2、測試
在任何一台可以訪問服務器的機器上測試ftp連接,使用Michael用戶和testFTP口令登陸,然後運行quote SITE QUOTA命令查看設置的磁盤限額信息,然後測試使用anonymous匿名用戶登陸測試。
3、監控和調試proFTPd服務
#/usr/local/sbin/proftpd proftpd -n -d 5 -c /usr/local/etc/proFTPd.conf
這樣在測試和連接ftp的時候,可以在主機上看到所有的proFTPd運行信息
4、日志監控
可以使用下面的命令查看系統日志、傳送日志等。
#tail -f /var/log/proFTPd.syslog
#tail -f /var/log/proFTPd.transferlog
5、配置系統自啟動proFTPd服務
#vi /etc/rc.conf
加入下面一行
proFTPd_enable=”YES”
這樣系統啟動的時候會調用/usr/local/etc/rc.d/proftpd.sh腳本啟動proFTPd服務。
ok
大功告成,大家可以根據自己的需要修改上面任何一個部分的細節,最好在自己理解的基礎上進行修改,整個過程包括proftpd的配置都很簡單。有問題歡迎大家來和我討論,經過Michael測試使用,發現proFTPd的確是個不錯的東東!