最近嘗試了在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的文件,大家完全照抄就基本可以了。
|
至此,完成了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表里設置一下就行了,這個表里的各個參數分別代表:
代碼:
|
五、完成最后的用戶、用戶組和目錄設置
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的確是個不錯的東東!