GZICP.com   
 
    返回首页
    联系我们
 
 
     

整合MySQL+Proftpd+Quotas管理

www.gzicp.com   2004年7月5日 15:09:56
 

MySQL 的安装部份省略不讲了 然而 Table 的内容我也省略不讲了... 内容就在下面的 proftpdmysql.sql 的档案...

mysql -u??? -p??? < proftpdmysql.sql

如果你只是要用 MySQL 管理账号的话请用这一个档案 usermysql.sql

mysql -u??? -p??? < usermysql.sql


下载位置 http://home.pchome.com.tw/net/baixyz/slackware/proftpd/proftpd_mysql.tar.gz  或 http://www.slackware.org.tw/webhd/

账号 guest 进去后寻找就找到了

解开来后会有两个档案 proftpdmysql.sql && usermysql.sql

在这之前系统当然也要先建立有关 UID / GID 的数据...
useradd -u 1000 -g 100 -d / -s /bin/false test

shell 的问题 我是都采用 /bin/false

这样有一的问题在就是 Proftp 会无法登入,所以说要在 Proftpd.conf 设定中加入

RequireValidShell off

如果要用 /bin/bash 的话 RequireValidShell off 就不用设了 预设是 on

如果只是要单纯的账号管理 执行下段就可以了
INSERT INTO ftpuser(userid, passwd, uid, gid, homedir, shell, email)  VALUES ('test', 'test', '1000', '100', '/home/test', '/bin/false', 'test@domain.com');

如果要 账号管理 Quotas 的话必须这样在这之前系统当然也要先建立有关 UID / GID 的数据...
useradd -u 1000 -g 100 -d / -s /bin/false test


先建立账号
INSERT INTO ftpuser(userid, passwd, uid, gid, homedir, shell, email)  VALUES ('test', 'test', '1000', '100', '/home/test', '/bin/false', 'test@domain.com');

在建立 Quotas 的条件
INSERT INTO ftpquotalimits (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 ('test','user','true', 'soft', '15728640','0','0','0','0','0')

这是限制最大只能传 15Mb , 单位的地方各位可能要自行转换了


下面是一个简单的对照表


ftpquotalimits 窗体
name︰ - 用户账号
quota_type︰ - user, group, class, all (we use user)
per_session︰ - true or false (we use true)
limit_type︰ - soft or hard (we use hard) soft 跟 hard 差在那好像是 hard 一次读设定档, 如果用 soft 可及时在 数据库更改立即起用
bytes_in_avail︰ - 允许上传的字节数
bytes_out_avail︰ - 允许下载的字节数
bytes_xfer_avail︰ - 允许传输的字节数(包括上传/下载)
files_in_avail︰ - 允许上传的文件数
files_out_avail︰ - 允许下载的文件数
files_xfer_avail︰ - 允许传输的文件数(包括上传/下载)

 

上面建立账号及建立 Quotas

说真的并不怎么方便 各位可以自行写 Perl / PHP / JSP 等等 Web 上的管理接口,由于我要跟我一些管理程序的整合, 所以并不方便公开, 我想这简单的来说应该不难,等我有空我在特地为这只程序写一套管理接口


由于内建的 ProFTPd 并为支持 MySQL ,所以要自行安装过...

首先要下载 两个档案 一个就是 Proftpd 主程序及一个新 mod 就是 Quotas

wget http://www.castaglia.org/proftpd/modules/proftpd-mod-quotatab-1.2.11.tar.gz
wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.2.9.tar.gz
各位如果有兴趣 http://www.castaglia.org/proftpd/ 这里面还有其它 mod


tar zxvf proftpd-1.2.9.tar.gz
tar zxvf proftpd-mod-quotatab-1.2.11.tar.gz
cp mod_quotatab/*.c mod_quotatab/*.h proftpd-1.2.9/contrib/
cd proftpd-1.2.9/contrib

由于我的 MySQL 是自行安装的所以必须修改过 mod_sql_mysql.c
如果是各位自行安装的请参考您的正确位置, 在加以修改下面这段

pico mod_sql_mysql.c

寻找 #include <mysql.h>
改为 #include </usr/pro/mysql/include/mysql/mysql.h>

如果是预设 Slackware 所安装的不用改这段了

cd ../
./configure --prefix=/usr/pro/proftpd --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql:mod_wrap \
--with-includes=/usr/pro/mysql/include/mysql \
--with-libraries=/usr/pro/mysql/lib/mysql

make && make install


如果是预设 Slackware 所安装的 MySQL 也不用执行下面这段了
如果是各位自行安装的请参考您的正确位置, 在加以修改下面这段

echo "/usr/pro/mysql/lib/mysql" >> /etc/ld.so.conf
ldconfig


#
#设定 Proftpd
#

cd /usr/pro/proftpd/etc
SQLAuthTypes Backend Plaintext
SQLAuthenticate users* groups*


# databasename@host database_user user_password

# 数据表@localhost 账号 密码

SQLConnectInfo proftpd@localhost proftpd proftpd
SQLUserInfo ftpuser userid passwd uid gid homedir shell
SQLGroupInfo ftpgroup groupname gid members
SQLHomedirOnDemand on

# Update count every time user logs in
SQLLog PASS updatecount
SQLNamedQuery updatecount UPDATE "count=count+1,accessed=now() WHERE userid='%u'" ftpuser

# Update modified everytime user uploads or deletes a file
SQLLog STOR,DELE modified
SQLNamedQuery modified UPDATE "modified=now() WHERE userid='%u'" ftpuser

#
# 如果您只有要账号管理下面的就不用设了
#

QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb # b"|"Kb"|"Mb"|"Gb" 这是它的限制单位
QuotaShowQuotas on
QuotaLog "/var/log/proftpd/quota.log"


下面为一整行否则会无法执行 ProFTP


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 = '%' AND quota_type = '%'"


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 = '%' AND quota_type = '%'"


SQLNamedQuery update-quota-tally 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 = '%'" ftpquotatallies

SQLNamedQuery insert-quota-tally INSERT "%, %, %, %, %, %, %, %" ftpquotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally


然后在执行 ProFTP , 如果设定有错会出现讯息, 在加一修改到正确如果是正常 执行 proftp 是不会有任何讯息


参考数据
http://www.khoosys.net/single.htm?ipg=848
http://www.5ilinux.com/blog/archives/000091.html

 

相关文章
·ProFTPD 详解(2004年07月03日)
·ProFtpd快速指南(2004年07月03日)
·proftpd安装手记(2004年07月03日)
·Linux上的quota磁盘配额限制(2004年04月21日)
最新文章
·Proftpd FAQ汇总  (2004年08月22日)
·proftpd学习笔记(四)  (2004年08月22日)
·proftpd学习笔记(三)  (2004年08月22日)
·proftpd学习笔记(二)  (2004年08月22日)
·proftpd学习笔记(一)  (2004年08月22日)
·Mandrake+Proftpd+MySQL+Quotas  (2004年08月22日)





 
 
Copyright © 1999-2005 GZICP.com All Rights Reserved