分享
 
 
 

FreeBSD上Proftpd带匿名登陆和使用MySQL用户验证的Quota磁盘限额安装手记

王朝mysql·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

自从在Yahoo工作后,对FreeBSD的喜欢是越来越强烈,这两年多几乎再也不用RedHat之类的Linux了,最近尝试了在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

#设置对全局的文件可以进行改写

<Directory />

AllowOverwrite on

</Directory>

#设置系统运行日志和文件传输日志

SystemLog /var/log/proftpd.syslog

TransferLog /var/log/proftpd.transferlog

######################## 下面是匿名登陆部分的设置 #################

#匿名用户登陆后访问的目录为 ftp用户的主目录

<Anonymous ~ftp>

User ftp

Group ftpusers

#设置anonymous用户为系统实际用户ftp的别名

UserAlias anonymous ftp

#设置匿名用户同时在线最大用户数

#此用户数受限于前面的全局同时在线用户数

MaxClients 5

#设置welcome.msg文件作为用户登陆的提示信息文件

#.message文件作为用户每次进入的目录提示信息

DisplayLogin welcome.msg

DisplayFirstChdir .message

#设置一些特殊的权限,比如写文件和登陆限制等 (可以不用)

<Limit WRITE>

DenyAll

</Limit>

<Limit LOGIN>

Order deny,allow

Deny from 61.101.201.0/32

Allow from all

</Limit>

</Anonymous>

######################## 完成匿名登陆的设置 #################

######################## 下面是磁盘限额Quota设置 ############

#启用磁盘限额

QuotaDirectoryTally on

SQLHomedirOnDemand on

#磁盘限额单位 b"|"Kb"|"Mb"|"Gb"

QuotaDisplayUnits "Mb"

QuotaEngine on

#磁盘限额日志记录

QuotaLog "/var/log/proftpd.quotalog"

#打开磁盘限额信息 "quote SITE QUOTA"命令

QuotaShowQuotas on

####################### 完成磁盘配额设置 ####################

####################### 下面是MySQL数据库部分设置 ###########

#数据库联接的信息

#FTP是数据库名,localhost是MySQL主机名,3306是mysql服务的端口号

#Michael是连接数据库的用户名,testpwd是密码(如果没有密码留空)

SQLConnectInfo FTP@localhost:3306 Michael testpwd

#数据库认证的类型

SQLAuthTypes Backend Plaintext

#指定用来做用户认证的表的有关信息。(将在后面创建)

SQLUserInfo FTPUSERS userid passwd uid gid homedir shell

SQLGroupInfo FTPGRPS groupname gid members

#数据库认证

SQLAuthenticate users groups usersetfast groupsetfast

#proftpd进行的mysql调用语句,别修改任何地方

SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail,files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'"

SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" quotatallies

SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies

QuotaLimitTable sql:/get-quota-limit

QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally

至此,完成了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的确是个不错的东东!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有