数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

proftpd+mysql+quota整合


发布日期:2019年10月09日
 
proftpd+mysql+quota整合

网上关于proftpd的安装文章实在是不少我只是稍微整理了一下并且使用了新的 quota磁盘限额模块由于proftpd最新版目前还是RC版加上有些设置不能通用 所以在这里还是使用

首先下载源码

proftpd:

ftp:///distrib/source/proftpdtarbz

mod_quotatab ( 版本的mod_quotatab是用在最新的rc上的)

modquotatabtargz

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

开始编译安装

将proftpd的源码包解压缩到某临时目录下

localhost proftpd # tar jxvf proftpdtarbz

解压缩 mod_quotatab

localhost proftpd # tar zxvf proftpdmodquotatabtargz

进入 mod_quotatab 目录

localhost proftpd # cd mod_quotatab

把mod_quotatab中的文件拷贝到 proftpd 中的modules 目录中

localhost mod_quotatab # cp * /proftpd/modules

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

进入 proftpd/contrib 目录

localhost mod_quotatab # cd /proftpd/contrib

修改 mod_sql_mysqlc

localhost contrib # vi mod_sql_mysqlc

找到#include 把他该为你实际路径

如果你的mysql 安装在 /usr/local/mysql 下就把它修改为#include r

然后

localhost contrib # cd

localhost proftpd # cd

localhost proftpd #/configure prefix=DIR withmodules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql withincludes=DIR withlibraries=DIR

需要修改的三个地方

prefix=DIR 你要安装到哪里

withincludes=DIR mysql 的includes 目录

withlibraries=DIR mysql 的lib 目录

然后

make

make install 完成安装

接下来进入你安装好的proftpd目录 修改etc/nf 文件开始配置

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

mysql 用户认证部分

在nf中加入以下内容

#设置MySQL认证

#数据库联接的信息DatabaseName是数据库名 HostName是主机名

#Port是端口号UserName是连接数据库的用户名Password是密码

SQLConnectInfo DatabaseName@HostNameort UserName Password

#数据库认证的类型

SQLAuthTypes Backend Plaintext

#指定用来做用户认证的表的有关信息(FTPUSERSFTPGRPS是数据表名字等一会而在下面建立)

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

);

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

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

create table FTPGRPS (

grpname TEXT NOT NULL

gid SMALLINT NOT NULL

members TEXT NOT NULL

);

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

为空表格插入记录

INSERT INTO FTPUSERS (userid passwd uid gid home shell)

valueS (user /home/FTP/user );

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

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

INSERT INTO FTPGRPS VALUES (FTPGRPS FTPUSR);

为FTP用户建立相应的系统用户

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

先建立FTPGRP组

groupadd –g –r FTPGRP

建立FTPUSR用户

adduser –u –g –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 getquotalimit 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 = %{} AND quota_type = %{}

SQLNamedQuery getquotatally 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 = %{} AND quota_type = %{}

SQLNamedQuery updatequotatally UPDATE bytes_in_used = bytes_in_used + %{} \

bytes_out_used = bytes_out_used + %{} bytes_xfer_used = bytes_xfer_used + %{} \

files_in_used = files_in_used + %{} files_out_used = files_out_used + %{} \

files_xfer_used = files_xfer_used + %{} \

WHERE name = %{} AND quota_type = %{} quotatallies

SQLNamedQuery insertquotatally INSERT %{} %{} %{} %{} %{} %{} %{} %{} quotatallies

QuotaLimitTable sql:/getquotalimit

QuotaTallyTable sql:/getquotatally/updatequotatally/insertquotatally

然后建立mysql 数据表

CREATE TABLE quotalimits (

name VARCHAR()

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() 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(字节)为单位

上一篇:如何向mysql数据库的表中录入数据

下一篇:MySQL高级特性----对比与其他数据库