让proftpd也可以用mysql轻松管理用户实现ftp磁盘配额

mahy 2010-06-29

linux下配置ftp可以用proftpd,因为它可以与mysql深入整合,轻松实现用户管理,而且每个用户还能单独控制其磁盘使用配额。

一、源码安装

./configure–with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql\

–with-includes=/data/amp/mysql/include/mysql\

–with-libraries=/data/amp/mysql/lib/mysql\

–prefix=/data/amp/proftpd

make

makeinstall

二、设置proftpd的启动服务

(1)#cpproftpd.1.2.xxx/contrib/dist/rpm/proftpd.init.d/etc/rc.d/init.d/proftpd

(2)编辑proftpd文件

#vi/etc/rc.d/init.d/proftpd

将PATH=”$PATH:/usr/local/sbin”修改为

PATH=”$PATH:/usr/local/sbin:/data/amp/proftpd/sbin”

(3)设置proftpd权限为可执行

#chmod+x/etc/rc.d/init.d/proftpd

(4)将proftpd加入系统服务

#chkonfig–addproftpd

这样就可以用serviceproftpdstart和serviceproftpdstop和serviceproftpdrestart来分别执行开启服务,停止服务与重启服务

三、启动ftp服务

#proftpd/sbin/proftpd

–Fatal:Group:Unknowngroup‘nogroup’online30of‘/data/amp/proftpd/etc/proftpd.conf’

若有报错,修改配置文件proftpd.conf

Groupnobody

默认是禁止匿名用户访问的

四、打开iptables中的21端口

#vi/etc/sysconfig/iptables

增加:

-ARH-Firewall-1-INPUT-mstate–stateNEW-mtcp-ptcp–dport21-jACCEPT

重启iptables

#/etc/rc.d/init.d/iptablesrestart

五、整合mysql

(1)增加mysql数据库用户:账号proftpd:密码password,并赋予proftpd数据库的权限

(2)proftpd配置文件增加如下内容:

##————addbydayuformysqlusers—————##

##提高连接速度

IdentLookupsoff

UseReverseDNSoff

#启用passiveport模式(若不配置也可以,但有的ftp客户端软件需要用这个尤其内网)

PassivePorts5000050100

#——–MySQL验证:loadsql.modformysqlauthoritative——–#

#配置FTP用户为MySQL数据库认证方式

#SQLConnectInfodatabaseName@hostName:portuserNamepassword

SQLConnectInfoproftpd@localhost账号proftpd密码password

#Backend表示用户认证方式为MySQL数据库的认证方式

#Plaintext表示明文认证方式,排在最前面的为最先使用的方式

SQLAuthTypesBackendPlaintext

#校验数据表

#SQLAuthenticateusersgroupsusersetfastgroupsetfast

SQLAuthenticateusers

#指定ftp用户数据表的名字和其中的字段名,表名可自行定义,字段名不要改动。

SQLUserInfoftpusersuseridpasswduidgidhomedirshell

#指定ftp用户组数据表的名字和其中的字段名,这个数据表是可选的,字段名不要改动。

#SQLGroupInfoftpGroupgroupnamegidmembers

#指定是否必须为FTP用户指定一个系统shell,off表示不用指定,on表示必须指定。为了系统安全应该指定为off。

RequireValidShelloff

#如果用户主目录不存在,则系统会根据此用户在用户数据表中的homedir字段的值新建一个目录

#SQLHomedirOnDemandon

SQLNegativeCacheon

#SQLLogFile/var/log/proftpd.sql.log

#用户登录欢迎窗口中显示登录用户已访问次数

SQLNamedQuerygetloginsSELECT“countfromftpuserswhereuserid=’%u’”

SQLNamedQuerygetlastloginSELECT“lastloginfromftpuserwhereuserid=’%u’”

SQLNamedQueryupdateloginsUPDATE“count=count+1,host=’%h’,lastlogin=current_timestamp()WHEREuserid=’%u’”ftpusers

SQLShowInfoPASS“230″“You’veloggedon%{getlogins}times!”

SQLLogPASSupdatelogins

#——–loadsql.modformysqlauthoritative——–#

#——–磁盘配额:loadqudes.modforQuotalimit——–#

#打开磁盘限额引擎

QuotaEngineon

#设置磁盘限额

QuotaDirectoryTallyon

#设置磁盘容量显示时的单位

QuotaDisplayUnitsMb

#设置磁盘限额日志文件

QuotaLog“/var/log/proftpd.quota.log”

#允许显示磁盘限额信息,ftp登录后可执行quotesitequota命令查看当前磁盘使用情况

QuotaShowQuotason

#指定磁盘限额模块使用的数据库信息

SQLNamedQueryget-quota-limitSELECT“name,quota_type,per_session,limit_type,bytes_in_avail,bytes_out_avail,bytes_xfer_avail,files_in_avail,files_out_avail,files_xfer_availFROMquotalimits\

WHEREname=‘%{0}’ANDquota_type=‘%{1}’”

SQLNamedQueryget-quota-tallySELECT“name,quota_type,bytes_in_used,bytes_out_used,bytes_xfer_used,files_in_used,files_out_used,files_xfer_usedFROMquotatallies\

WHEREname=‘%{0}’ANDquota_type=‘%{1}’”

SQLNamedQueryupdate-quota-tallyUPDATE“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}\

WHEREname=‘%{6}’ANDquota_type=‘%{7}’”quotatallies

SQLNamedQueryinsert-quota-tallyINSERT“%{0},%{1},%{2},%{3},%{4},%{5},%{6},%{7}”quotatallies

QuotaLimitTablesql:/get-quota-limit

QuotaTallyTablesql:/get-quota-tally/update-quota-tally/insert-quota-tally

#———loadqudes.modforQuotalimit——–#

(3)在iptables中增加passiveprot端口

-ARH-Firewall-1-INPUT-mstate–stateNEW-mtcp-ptcp–dport50000:50100-jACCEPT

(4)建立mysql数据表

CREATETABLE`ftpusers`(

`userid`varchar(30)NOTNULL,

`passwd`varchar(80)NOTNULL,

`uid`int(11)unsignedNOTNULL,

`gid`int(11)unsignedNOTNULL,

`homedir`varchar(255)DEFAULTNULL,

`shell`varchar(255)DEFAULTNULL,

`count`int(10)unsignedNOTNULL,

`host`varchar(30)NOTNULL,

`lastlogin`datetimeNOTNULL,

UNIQUEKEY`userid`(`userid`),

UNIQUEKEY`uid`(`uid`)

);

还有剩余部分请移步安徽php社区吧。

原创文章来源:安徽php社区http://bbs.hfphp.org/thread-741-1-1.html

欢迎大家进行交流,转载请说明出处,谢谢

相关推荐