这并不容易,没有单个模块可以做到这一点。但我找到了解决方案。
这不是最佳选择,因为每次更改 MySQL 配置时都必须重新启动 ProFTPd 服务器,但它可以工作。
由于您有一个已经运行 MySQL 的 ProFTPd 服务器,我将只解释特定用户配置的部分。
对于此解决方案,您需要使用以下模块编译 ProFTPd:
为了帮助您重新编译 ProFTPd,您可以运行此命令proftpd -V 来查看您的版本是如何配置的。你可以找到一些文档here。
一旦您编译好 ProFTPd 服务器并运行它,您就必须登录您的 MySQL 服务器。
如果您阅读 mod_conf_sql,他们会说要创建 3 个表 ftpctxt, ftpconf, ftpmap。我们将不会创建这些表,除非您希望从 MySQL 进行全局配置。
我们将使用“视图”伪造 MySQL 配置。
1.首先,您将每个特定配置添加为用户列(确保具有默认值):
ALTER TABLE ftpuser #
ADD PathDenyFilter VARCHAR( 255 ) NOT NULL DEFAULT '(\.ftp)|(\.hta)[a-z]+$';`
ALTER TABLE ftpuser
ADD PathAllowFilter VARCHAR( 255 ) NOT NULL DEFAULT '.*$';`
....
2。创建conf 视图:
- 用户的
id 和配置列连接在一起,形成一个唯一的id
- 用户的配置栏被用作
type
- 用户的配置值被用作
info
-
视图是选择的联合(对于每一列都需要一个联合)
CREATE VIEW ftpuser_conf AS SELECT concat(ftpuser.id,'-PathDenyFilter')
AS id,'PathDenyFilter' AS type,ftpuser.PathDenyFilter AS info from ftpuser
UNION
SELECT concat(ftpuser.id,'-PathAllowFilter')
AS id,'PathAllowFilter' AS type, ftpuser.PathAllowFilter AS info
from ftpuser;
3.创建ctxt 视图
- 此视图是“默认”行和用户行的串联(“默认”行有 1 作为
id,用户的行有用户的id + 1 作为id。
- 将“userconf-”和用户的
id 连接为name
- “IfUser”为
type
-
用户名info
CREATE VIEW ftpuser_ctxt AS
SELECT 1 AS id,NULL AS parent_id, 'default' AS name, 'default' AS type, NULL AS info
UNION
SELECT (ftpuser.id + 1) AS id,1 AS parent_id,
concat('userconf-',ftpuser.userid) AS name,
'IfUser' AS type,ftpuser.userid AS info
FRON ftpuser;
4.创建map 视图
- 用户的
id 和配置列连接为conf_id
- 用户的
id + 1 代表ctxt_id
-
视图是选择的联合(对于每一列都需要一个联合)
CREATE VIEW ftpuser_map
AS SELECT concat(ftpuser.id,'-PathDenyFilter')
AS conf_id,(ftpuser.id + 1) AS ctxt_id
from ftpuser
union
select concat(ftpuser.id,'-PathAllowFilter')
AS conf_id,(ftpuser.id + 1) AS ctxt_id
from ftpuser;
5.将这些行添加到您的 ProFTPd 配置中
<IfModule mod_conf_sql.c>
Include sql://user:password@host/db:database/ctxt:ftpuser_ctxt:id,parent_id,type,info/conf:ftpuser_conf:id,type,info/map:ftpuser_map:conf_id,ctxt_id/base_id=1
</IfModule>
地点:
-
user => 你的 MySQL 用户名
-
password => 你的 MySQL 密码
-
host => 你的 MySQL 主机
-
database => 你的 MySQL 数据库
6.重新启动您的 ProFTPd 服务器
我希望这会对你有所帮助。祝你好运