让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
make install
二、设置proftpd的启动服务
(1)#cp proftpd.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 –add proftpd
这样就可以用service proftpd start和service proftpd stop 和service proftpd restart来分别执行开启服务,停止服务与重启服务
三、启动ftp服务
# proftpd/sbin/proftpd
– Fatal: Group: Unknown group ‘nogroup’ on line 30 of ‘/data/amp/proftpd/etc/proftpd.conf’
若有报错,修改配置文件proftpd.conf
        Group                                nobody
默认是禁止匿名用户访问的
四、打开iptables中的21端口
# vi /etc/sysconfig/iptables
增加:
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 21 -j ACCEPT
重启iptables
# /etc/rc.d/init.d/iptables restart
五、整合mysql
(1)增加mysql数据库用户: 账号proftpd : 密码password,并赋予proftpd数据库的权限
(2)proftpd配置文件增加如下内容:
##———— add by dayu for mysql users —————##
##提高连接速度
IdentLookups off
UseReverseDNS off
#启用passiveport模式(若不配置也可以,但有的ftp客户端软件需要用这个尤其内网)
PassivePorts 50000 50100
#——– MySQL验证:load sql.mod for mysql authoritative ——–#
# 配置FTP用户为MySQL数据库认证方式
#SQLConnectInfo databaseName@hostName:port userName password
SQLConnectInfo proftpd@localhost 账号proftpd 密码password
#Backend表示用户认证方式为MySQL数据库的认证方式
#Plaintext表示明文认证方式,排在最前面的为最先使用的方式
SQLAuthTypes Backend Plaintext
#校验数据表
#SQLAuthenticate users groups usersetfast groupsetfast
SQLAuthenticate users
#指定 ftp用户数据表的名字和其中的字段名,表名可自行定义,字段名不要改动。
SQLUserInfo ftpusers userid passwd uid gid homedir shell
#指定ftp用户组数据表的名字和其中的字段名,这个数据表是可选的,字段名不要改动。
#SQLGroupInfo ftpGroup groupname gid members
#指定是否必须为FTP用户指定一个系统shell,off表示不用指定,on表示必须指定。为了系统安全应该指定为off。
RequireValidShell off
# 如果用户主目录不存在,则系统会根据此用户在用户数据表中的 homedir字段的值新建一个目录
#SQLHomedirOnDemand on
SQLNegativeCache   on
#SQLLogFile /var/log/proftpd.sql.log
#用户登录欢迎窗口中显示登录用户已访问次数
SQLNamedQuery getlogins SELECT “count from ftpusers where userid=’%u’”
SQLNamedQuery getlastlogin SELECT “lastlogin from ftpuser where userid=’%u’”
SQLNamedQuery updatelogins UPDATE “count=count+1,host=’%h’,lastlogin=current_timestamp() WHERE userid=’%u’” ftpusers
SQLShowInfo PASS “230″ “You’ve logged on %{getlogins} times!”
SQLLog PASS updatelogins
#——– load sql.mod for mysql authoritative ——–#
#——– 磁盘配额:load qudes.mod for Quota limit ——–#
#打开磁盘限额引擎
QuotaEngine on
#设置磁盘限额
QuotaDirectoryTally on
#设置磁盘容量显示时的单位
QuotaDisplayUnits Mb
#设置磁盘限额日志文件
QuotaLog “/var/log/proftpd.quota.log”
#允许显示磁盘限额信息,ftp登录后可执行quote site quota命令查看当前磁盘使用情况
QuotaShowQuotas on
# 指定磁盘限额模块使用的数据库信息
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 quotalimits \
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 quotatallies \
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}’” quotatallies
SQLNamedQuery insert-quota-tally INSERT “%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}”   quotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
#——— load qudes.mod for Quota limit ——–#
(3)在iptables中增加passiveprot端口
-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 50000:50100 -j ACCEPT
(4)建立mysql数据表
CREATE TABLE `ftpusers` (
  `userid` varchar(30) NOT NULL,
  `passwd` varchar(80) NOT NULL,
  `uid` int(11) unsigned NOT NULL,
  `gid` int(11) unsigned NOT NULL,
  `homedir` varchar(255) DEFAULT NULL,
  `shell` varchar(255) DEFAULT NULL,
  `count` int(10) unsigned NOT NULL,
  `host` varchar(30) NOT NULL,
  `lastlogin` datetime NOT NULL,
  UNIQUE KEY `userid` (`userid`),
  UNIQUE KEY `uid` (`uid`)
);
还有剩余部分请移步安徽php社区吧。

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

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

你可能感兴趣的:(sql,PHP,mysql,linux,配置管理)