MySQL验证的Quota磁盘限额安装手记 |
||
最近尝试了在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的确是个不错的东东! |