Proftpd+mod_sql模块+mysql的配置
前段时间为了学院的ftp管理,进行了一番尝试,下面是整理出来的完整文档。
一、mod_sql能做什么?
mod_sql是能使用数据库记录信息对Proftpd用户进行登录认证的一个module,
它由一个前端模块(front module)和后端模块(end modules)组成,后端模块是跟数据库相关的特别定制的,比如mod_sql_mysql就是用来连接mysql数据库, mod_sql_postgres用来连接postgres数据库。
现在最新的版本稳定版本proftpd 1.2.10中已经自带有这个module。
二、安装配置过程
1、安装 mysql
因为mod_sql_mysql需要调用libmysqlclient库函数,所以你最好从源代码编译安装mysql,如果你之前已经安装了已编译好的的mysql server可以使用下面参数编译,注意使用的源代码的版本需要跟你已安装的mysql的版本一致
./configure –with-named-curses-libs=/lib/libncurses.so.5
–without-server –prefix=/usr/local/mysql
make && make install
具体安装过程可以参考mysql的使用说明
2、安装proftpd
./configure –prefix=/usr/local/proftpd –with-modules=mod_sql:mod_sql_mysql
:mod_quotatab:mod_quotatab_sql
–with-includes=/usr/local/mysql/include/mysql
–with-libraries=/usr/local/mysql/lib/mysql
make && make install
创建ftp用户和组
groupadd -g 5500 ftpgroup
adduser -u 5500 -s /bin/false -d /bin/null -c "proftpd user" -g ftpgroup ftpuser
建立ftp的主目录
mkdir /var/ftproot
给予权限
chown ftpuser:ftpgroup /var/ftproot
3、创建数据库表
–创建数据库
CREATE TABLE FtpUser (
userid VARCHAR(30) NOT NULL UNIQUE,
passwd VARCHAR(80) NOT NULL,
uid INTEGER NOT NULL,
gid INTEGER NOT NULL,
homedir VARCHAR(255) NOT NULL,
shell VARCHAR(255),
);
CREATE TABLE FtpGroup (
groupname VARCHAR(30) NOT NULL,
gid INTEGER NOT NULL PRIMARY KEY,
members TEXT
);
CREATE TABLE FtpQuotalimits (
name varchar(30) NOT NULL UNIQUE,
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′
);
CREATE TABLE FtpQuotatallies (
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′
);
–创建供mod_sql使用的数据库登录用户 - proftpd
grant select, insert, update on YourDBName.* to ‘proftpd’@'localhost’ identified by ‘proftpd’;
–在数据库中新增一条用户记录,帐号密码都是test, 5500 是前面给ftpuser的uid, ftpgroup的gid, home为 /var/ftproot/test
INSERT INTO FtpUser VALUES (’test’,'test’,5500,5500,’/var/ftproot/test’,”);
–在数据库中新增一条组记录
INSERT INTO FtpGroup VALUES (’ftpgroup’,5500,’ftpuser’);
–在数据库中新增一条数据库配额记录, test用户的磁盘上限为 1MB
INSERT INTO FtpQuotalimits VALUES (’test’,'user’,'true’,’soft’,1048580,0,0,0,0,0);
4、然后配置 /usr/local/proftpd/etc/proftpd.conf
主要加上下面的部分
<Global>
# ftpgroup 组用户只显示自己的相对路径
DefaultRoot ~ ftpgroup
#——–打开mod_sql,使用mysql验证——–#
# Backend 表示用户认证方式为 MySql 数据库认证
# Plaintext 表示明文认证
SQLAuthTypes Backend Plaintext
SQLAuthenticate on
# 数据库连接信息 数据库名@主机地址:端口 用户名 密码
SQLConnectInfo YourDBName@localhost:3306 proftpd proftpd
# 指定用户信息表
SQLUserInfo FtpUser userid passwd uid gid homedir shell
# 指定用户组信息表
SQLGroupInfo FtpGroup groupname gid members
SQLDefaultHomedir “/var/ftproot”
# 如果用户主目录不存在则根据 homedir 字段自动创建一个
SQLHomedirOnDemand on
SQLNegativeCache on
RequireValidShell off
#————#
#——–磁盘限额——–#
# 打开磁盘限额功能
QuotaEngine on
# 统计目录操作
QuotaDirectoryTally on
# 使用 MB 为单位给用户显示磁盘配额信息
QuotaDisplayUnits Mb
# 显示磁盘配额信息给用户
QuotaShowQuotas on
# 磁盘配额使用的日志文件
QuotaLog “/var/log/proftpd.quota.log”
# 磁盘配额模块要使用的数据库查询语句
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 FtpQuotalimits \
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 FtpQuotatallies \
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}’” FtpQuotatallies
SQLNamedQuery insert-quota-tally INSERT “%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}” FtpQuotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
#—————–#
参考资料
中文:
http://www.chinaunix.net/jh/15/693798.html
http://www.linuxmine.com/2769.html
http://www.5ilinux.com/blog/archives/000082.html
英文:
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-SQL.html
http://www.castaglia.org/proftpd/modules/mod_sql.html
http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Quotas.html
http://www.castaglia.org/proftpd/modules/mod_quotatab.html