LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1227|回复: 11

社区FTP插件从WIN环境转到XNIX环境,应怎么配置proftpd?

[复制链接]
发表于 2003-11-21 16:02:19 | 显示全部楼层 |阅读模式
1 我原来的插件说明(Serv-U扩展插件):

A 功能:

使用 ServU Plus 的 8 大理由
实现单人单号
下载帐号完全独立,跟论坛的 ID 一一对应,极大程度的避免了盗连的情况。

IP 限制
可以限制会员可用的 IP 数、以及IP规则,更进一步避免盗连的情况。

流量购买
可以和论坛货币挂钩,增强了论坛的互动性。

可选用自定义密码或随机密码
可以设制是否由会员自定义密码或者是统一给出随机密码,方便了大家使单人单号系统更人性化。

方便的用户管理器
简单、实用的用户管理器可以十分方便的控制会员的帐号、统计流量、设置帐号等级等。

SFV 校验
功能强大的 SFV 校验工具,以及独创文件如在上传中会有 .uploading 文件标明,避免会员错误下载上传中的文件。

稳定
本插件己经测试一年多,能无故障使用半年,极大程度保护您的论坛的利益。

扩展性
很容易扩展到不同的论坛、下载中心,现在已经有LB、UT、动网、VBB论坛的Hack。
 楼主| 发表于 2003-11-21 16:03:20 | 显示全部楼层

B 我用的论坛是VBB。其中插件的MYSQL部分如下:

B 我用的论坛是VBB。其中插件的MYSQL部分如下:

create database ServUPlus;
use ServUPlus;
create table TUser (
FUserName varchar(40) not null,
FPassword varchar(40),
FGroupName varchar(40),
FUpLoad BIGINT not null default 0,
FDownLoad BIGINT not null default 0,
FCredit BIGINT not null default 0,
FLastLogin DATETIME,
FEnable TINYINT not null default 0,
FExpired DATETIME,
FAllow_IP TEXT,
FMemo TEXT
);
ALTER TABLE TUser ADD PRIMARY KEY (FUserName);
create table TGroup (
FGroupName varchar(40) not null,
FSUUserName varchar(40),
FSUDomainID integer,
FEnable TINYINT not null default 0,
FRatios TINYINT not null default 0,
FRatiosUp integer not null default 1,
FRatiosDown integer not null default 1,
FMaxUser integer not null default -1,
FMemo TEXT
);
ALTER TABLE TGroup ADD PRIMARY KEY (FGroupName);

create table TLog (
FID int(11) NOT NULL auto_increment,
FDateTime DATETIME not null default 'NOW()',
FLocalIP varchar(21),
FIP varchar(21),
FUserName varchar(40),
FFileName varchar(200),
FFileSize integer,
FState varchar(10) not null,
PRIMARY KEY (FID)
);
 楼主| 发表于 2003-11-21 16:04:23 | 显示全部楼层

3 VBB的FTP中心HACK代码:这里不方便帖出来,给出下载地址

3 VBB的FTP中心HACK代码:这里不方便帖出来,给出下载地址

 楼主| 发表于 2003-11-21 16:05:16 | 显示全部楼层

4 我的要求:

4 我的要求:

就是让pureftpd或proftpd可以调用和更新2帖的数据库表,以控制论坛会员的下载流量。

感谢!
 楼主| 发表于 2003-11-21 18:52:01 | 显示全部楼层
发表于 2003-11-21 19:03:32 | 显示全部楼层
不知道如何弄,不懂。proftpd用的很少。架好后,只会开帐号这些小规模的动作。下面是安装篇

请精通此道的弟兄来指点一下,多谢。

北南 呈上



====================================================
proftpd+mysql用户认证+quota磁盘限额
· · RealSKy

转帖: http://www.yesky.com/20030324/1658881_2.shtml
====================================================
由于proftpd最新版1.2.8目前还是RC版,加上有些设置不能通用, 所以在这里还是使用1.2.7版。

  1、下载和安装

  首先下载源码

  1) proftpd1.2.7:
  ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.7.tar.bz2
  2) mod_quotatab-1.2.4 (1.2.5 版本的mod_quotatab是用在最新的1.2.8rc1上的)
  http://www.castaglia.org/proftpd ... otatab-1.2.4.tar.gz

  假定你的机器上已经安装好了mysql

  开始编译安装

  将proftpd的源码包解压缩到某临时目录下:
  localhost proftpd # tar -jxvf proftpd-1.2.7.tar.bz2

  解压缩 mod_quotatab-1.2.4
  localhost proftpd # tar -zxvf proftpd-mod-quotatab-1.2.4.tar.gz

  进入 mod_quotatab 目录
  localhost proftpd # cd mod_quotatab

  把mod_quotatab中的文件拷贝到 proftpd 中的modules 目录中
  localhost mod_quotatab # cp * ../proftpd-1.2.7/modules

  在开始运行configure之前,我们要先改动一个文件

  进入 proftpd-1.2.7/contrib 目录
  localhost mod_quotatab # cd ../proftpd-1.2.7/contrib

  修改 mod_sql_mysql.c
  localhost contrib # vi mod_sql_mysql.c

  找到#include 把他该为你实际路径。如果你的mysql 安装在 /usr/local/mysql 下,就把它修改为#include r

  然后执行:

  localhost contrib # cd ..
  localhost proftpd-1.2.7 # cd ..
  localhost proftpd #./configure --prefix=DIR --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=DIR --with-libraries=DIR

  需要修改的三个地方:

  --prefix=DIR 你要安装到哪里
  --with-includes=DIR mysql 的includes 目录
  --with-libraries=DIR mysql 的lib 目录

  然后执行:

  make
  make install

  完成安装。

  2、配置过程

  基本配置我就不多说了,网上这类文章有很多,实在不会的话,自己找找就是了,这里主要介绍如何配置mysql用户认证和磁盘限额。

  1) mysql 用户认证部分

  在proftpd.conf中加入以下内容:

  #设置MySQL认证:

  #数据库联接的信息,DatabaseName是数据库名, HostName是主机名,#Port是端口号,UserName是连接数据库的用户名,Password是密码。
  SQLConnectInfo DatabaseName@HostName:port UserName Password

  #数据库认证的类型:
  SQLAuthTypes Backend Plaintext

  #指定用来做用户认证的表的有关信息。("FTPUSERS"和"FTPGRPS"是数据表名字,等一会而在下面建立)
  SQLUserInfo FTPUSERS userid passwd uid gid homedir shell

  SQLGroupInfo FTPGRPS groupname gid members
 #设置如果shell为空时允许用户登录:
  RequireValidShell off

  #数据库的鉴别
  SQLAuthenticate users groups usersetfast groupsetfast

  #如果home目录不存在,则系统会为根据它的home项新建一个目录:
  SQLHomedirOnDemand on

  然后在这个数据库中建立一个用户表FTPUSERS,这个表是必须的:

  use FTP;
  create table FTPUSERS (
  userid TEXT NOT NULL,
  passwd TEXT NOT NULL,
  uid INT NOT NULL,
  gid INT NOT NULL,
  home TEXT,
  shell TEXT
  );

  此表格是为了用户认证所需要的,其中userid、passwd是必不可少的,userid是用做FTP服务的用户名;passwd是指此用户的密码; uid是系统用户的ID,也就是所映射的系统用户;gid是所属系统组的ID;home是该用户所在的HOME目录;shell可以为该用户指定相应的 shell。当然你可以建立更多的字段,例如:用来记录用户登录次数的count,或者是日期的date,如果你对配置熟悉了之后,你可以根据自己的喜欢添加更多的功能。在此就不多讲。

  如果你想需要所有的功能,你还可以添加另外一个需要的表:FTPGRPS,也就是确定组的表格,当然也可以不用,这里讲一个它的格式:

  create table FTPGRPS (
  grpname TEXT NOT NULL,
  gid SMALLINT NOT NULL,
  members TEXT NOT NULL,
  );

  其中grpname是组的名称,gid是系统组的ID,members是组的成员。注意:多成员,他们之间要用逗号隔开,不能使用空格。

  为空表格插入记录:

  INSERT INTO FTPUSERS (userid, passwd, uid, gid, home, shell)
  valueS ('user1', '999999', '1000', '1000', '/home/FTP/user1', '' );

  按此格式你可以插入这每一个用户添加一个记录。

  如果你要想应用到更多的功能,且建立了组的表格,你也要为此添加记录,不过一定要注意在members的字段多个成员一定要用逗号隔开。

  INSERT INTO FTPGRPS VALUES ('FTPGRPS', 1000, 'FTPUSR');

  3、为FTP用户建立相应的系统用户。

  在本例中,只整个FTP服务只提供一个有效的系统用户FTPUSR和组FTPGRP,当然你也可以设置多个系统用户。但出于安全的考虑,我只设一个,用他来启动FTP daemon,并把所有的FTP用户映射过这个用户。

  先建立FTPGRP组:
  groupadd -g 1000 -r FTPGRP

  建立FTPUSR用户:
  adduser -u 1000 -g 1000 -d /home/FTP -s /bin/bash -r FTPUSR

  为FTPUSR建立HOME,把所有的FTP user 活动空间全放在此目录下:
  mkdir /home/FTP
  chown FTPUSR /home/FTP
  chgrp FTPGRP /home/FTP

  到这里MYSQL认证部分就算基本配置好了,接下来是磁盘限额部分

  首先,还是编辑proftpd文件

  #磁盘限额部分
  QuotaDirectoryTally on

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

  QuotaEngine on

  #磁盘限额日志记录
  QuotaLog "你的LOG路径"

  # 打开磁盘限额信息,当登陆FTP帐户后,使用命令 "quote SITE QUOTA" 后可显示当前用户的磁盘限额
  QuotaShowQuotas on

  #以下是SQL调用语句,不用修改直接拷贝过去

  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


  然后建立mysql 数据表

  CREATE TABLE quotalimits (
  name VARCHAR(30),
  quota_type ENUM("user", "group", "class", "all") NOT NULL,
  per_session ENUM("false", "true") NOT NULL,
  limit_type ENUM("soft", "hard") NOT NULL,
  bytes_in_avail FLOAT NOT NULL,
  bytes_out_avail FLOAT NOT NULL,
  bytes_xfer_avail FLOAT NOT NULL,
  files_in_avail INT UNSIGNED NOT NULL,
  files_out_avail INT UNSIGNED NOT NULL,
  files_xfer_avail INT UNSIGNED NOT NULL
  );

  CREATE TABLE quotatallies (
  name VARCHAR(30) NOT NULL,
  quota_type ENUM("user", "group", "class", "all") NOT NULL,
  bytes_in_used FLOAT NOT NULL,
  bytes_out_used FLOAT NOT NULL,
  bytes_xfer_used FLOAT NOT NULL,
  files_in_used INT UNSIGNED NOT NULL,
  files_out_used INT UNSIGNED NOT NULL,
  files_xfer_used INT UNSIGNED NOT NULL
  );

  说明一下,quotatallies表不需要作修改,它记录了用户当前的磁盘使用情况,由程序自动记录

  要注意的是quotalimits 表中一些字段的含意

  quota_type 磁盘限额的鉴别,可以设置单各用户,也可以设置一各组中的全部用户,还可以设置全部用户
  bytes_in_avail 上传最大字节数,就是FTP用户空间容量 (设置个字段的时候是以byte(字节)为单位,如果要限额在10M,那就是10240000,下面也一样)
  bytes_out_avail 下载最大字节数,需要注意的是,这个字段中记录的是用户总共能从服务器上下载多少数据,数据是累计的。
  bytes_xfer_avail 总共可传输的文件的最大字节数(上传和下载流量)需要注意的是,这个字段中记录的是用户总共能传输文件的最大字节数,数据是累计的。

  files_in_avail INT 总共能上传文件的数目
  files_out_avail INT 能从服务器上下载文件的总数目
  files_xfer_avail INT 总共可传输文件的数目(上传和下载)

  好了,开始使用磁盘限额,我们要将上面建立的user1帐号给予10M空间,最多能上传500个文件到服务器上,文件传输流量为20M,只能传输10个文件。只要在MYSQL中插入

  INSERT INTO `quotalimits` ( `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` )
  VALUES ('user1', 'user', 'false', 'soft', '10240000', '0', '2048000', '500', '0', '10');

  就可以了,不需要设置的部分用0代替就可以了

  现在运行proftpd,登陆到user1 ,使用quote SITE QUOTA 就会显示user1用户的磁盘使用情况

  ftp> quote SITE QUOTA
  200-The current quota for this session are [current/limit]:
  Name: user1
  Quota Type: User
  Per Session: False
  Limit Type: Soft
  Uploaded Kb: 0.00/10000.00
  Downloaded Kb: unlimited
  Transferred Kb: 0.00/2000.00
  Uploaded files: 0/500
  Downloaded files: unlimited
  Transferred files: 0/10
  200 Please contact root@localhost if these entries are inaccurate

  OK,安装完毕。
 楼主| 发表于 2003-11-21 23:39:19 | 显示全部楼层
感謝幫助。如果這個作好了。以後就可以通過論壇程序中的金錢?碜詣涌刂茣T的下載流量和自動開設帳號了。發展有前途!
发表于 2003-11-27 10:14:28 | 显示全部楼层
呵呵,这样的东西是商业用途的
恐怕你要用实际的money来换了
 楼主| 发表于 2003-11-27 20:15:21 | 显示全部楼层
晕啊。什么商业用途。
 楼主| 发表于 2003-12-3 20:25:16 | 显示全部楼层
再顶。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表