说轻松,配置起来可真不轻松,不过幸好有google,如果靠百度,估计我怎么死的都不知道~ 废话不多说,开始写流程

平台:ubuntu10.04 server
前景重现:已经安装好mysql,安装ispcp正式版、分支版本都失败,决定独立安装
清理垃圾:
apt-get remove preftpd
rm -rf /etc/proftpd
开始安装(mod_mysql是我后来看配置文件才发现要装~)
apt-get install proftpd proftpd-mod-mysql
选择 standalone
vi /etf/proftpd/proftpd.conf
依照如下修改设置
UseIPv6 off
Include /etc/proftpd/sql.conf #前面的#删掉
创建ftp权限
groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c “proftpd user” -g ftpgroup ftpuser
mysql创建proftpd库,最好用phpmyadmin
先创建用户,用户名proftpd,密码自定义一个或者随机都可以,然后建立ftp库
create database ftp;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO ‘proftpd’@'localhost’ IDENTIFIED BY ‘password’;
GRANT SELECT, INSERT, UPDATE, DELETE ON ftp.* TO ‘proftpd’@'localhost.localdomain’ IDENTIFIED BY ‘password’;
FLUSH PRIVILEGES;
点ftp库的sql指令选项卡,(命令行操作时,输入 use ftp;)
CREATE TABLE ftpgroup (
groupname varchar(16) NOT NULL default ”,
gid smallint(6) NOT NULL default ’5500′,
members varchar(16) NOT NULL default ”,
KEY groupname (groupname)
) COMMENT=’ProFTP group table’;
CREATE TABLE ftpquotalimits (
name varchar(30) default NULL,
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 int(10) unsigned NOT NULL default ’0′,
bytes_out_avail int(10) unsigned NOT NULL default ’0′,
bytes_xfer_avail int(10) unsigned 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 int(10) unsigned NOT NULL default ’0′,
bytes_out_used int(10) unsigned NOT NULL default ’0′,
bytes_xfer_used int(10) unsigned 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′
);
CREATE TABLE ftpuser (
id int(10) unsigned NOT NULL auto_increment,
userid varchar(32) NOT NULL default ”,
passwd varchar(32) NOT NULL default ”,
uid smallint(6) NOT NULL default ’5500′,
gid smallint(6) NOT NULL default ’5500′,
homedir varchar(255) NOT NULL default ”,
shell varchar(16) NOT NULL default ‘/sbin/nologin’,
count int(11) NOT NULL default ’0′,
accessed datetime NOT NULL default ’0000-00-00 00:00:00′,
modified datetime NOT NULL default ’0000-00-00 00:00:00′,
PRIMARY KEY (id),
UNIQUE KEY userid (userid)
) COMMENT=’ProFTP user table’;
quit;
修改刚刚激活的sql.conf
vi /etc/proftpd/modules.conf
#
# Proftpd sample configuration for SQL-based authentication.
#
# (This is not to be used if you prefer a PAM-based SQL authentication)
#
<IfModule mod_sql.c>
#
# Choose a SQL backend among MySQL or PostgreSQL.
# Both modules are loaded in default configuration, so you have to specify the backend
# or comment out the unused module in /etc/proftpd/modules.conf.
# Use ‘mysql’ or ‘postgres’ as possible values.
#
#SQLBackend mysql
#
#SQLEngine on
#SQLAuthenticate on
#
# Use both a crypted or plaintext password
#SQLAuthTypes Crypt Plaintext
#
# Use a backend-crypted or a crypted password
#SQLAuthTypes Backend Crypt
#
# Connection
#SQLConnectInfo proftpd@sql.example.com proftpd_user proftpd_password
#
# Describes both users/groups tables
#
#SQLUserInfo users userid passwd uid gid homedir shell
#SQLGroupInfo groups groupname gid members
#
DefaultRoot ~
SQLBackend mysql
# The passwords in MySQL are encrypted using CRYPT
SQLAuthTypes Plaintext Crypt
SQLAuthenticate users groups
# used to connect to the database
# databasename@host database_user user_password
SQLConnectInfo 数据库名@localhost 用户名 密码
# Here we tell ProFTPd the names of the database columns in the “usertable”
# we want it to interact with. Match the names with those in the db
SQLUserInfo ftpuser userid passwd uid gid homedir shell
# Here we tell ProFTPd the names of the database columns in the “grouptable”
# we want it to interact with. Again the names match with those in the db
SQLGroupInfo ftpgroup groupname gid members
# set min UID and GID – otherwise these are 999 each
SQLMinID 500
# create a user’s home directory on demand if it doesn’t exist
CreateHome 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
# User quotas
# ===========
QuotaEngine on
QuotaDirectoryTally on
QuotaDisplayUnits Mb
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 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
RootLogin off
RequireValidShell off
</IfModule>
wq!
文件编辑完了,添加个用户在ftpuser表里,填写用户名、密码、homedir的位置就可以了
然后重启服务
service proftpd restart (或/etc/init.d/proftpd restart)
参考文献:http://www.howtoforge.com/virtual-hosting-with-proftpd-and-mysql-debian-lenny
