我已经设置了一个带有 MySQL 连接的 proftpd 服务器。一切正常。
我想使用 ( PathAllowFilter
, PathDenyFilter
, ...)为数据库中的每个用户设置特定权限
在 Ubuntu 12.04 LTS 发行版上运行的服务器。
这并不容易,没有单个模块可以做到这一点。但我找到了解决方案。
这不是最佳选择,因为每次更改 MySQL 配置时都必须重新启动 ProFTPd 服务器,但它可以工作。
由于您有一个已经运行 MySQL 的 ProFTPd 服务器,我将仅解释特定用户配置的部分。
对于此解决方案,您需要使用以下模块编译 ProFTPd:
<IfUser>
条件)为了帮助您重新编译 ProFTPd,您可以运行此命令proftpd -V
来查看您的版本是如何配置的。您可以在此处找到一些文档。
编译好 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
视图
id
,用户行有用户id
+ 1 as id
。id
为name
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 服务器
我希望这能帮到您。祝你好运