让proftpd也可以用mysql轻松管理用户实现ftp磁盘配额
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
欢迎大家进行交流,转载请说明出处,谢谢