0

我已经设置了一个带有 MySQL 连接的 proftpd 服务器。一切正常。

我想使用 ( PathAllowFilter, PathDenyFilter, ...)为数据库中的每个用户设置特定权限

在 Ubuntu 12.04 LTS 发行版上运行的服务器。

4

1 回答 1

1

这并不容易,没有单个模块可以做到这一点。但我找到了解决方案。

这不是最佳选择,因为每次更改 MySQL 配置时都​​必须重新启动 ProFTPd 服务器,但它可以工作。

由于您有一个已经运行 MySQL 的 ProFTPd 服务器,我将仅解释特定用户配置的部分。

对于此解决方案,您需要使用以下模块编译 ProFTPd:

  • mod_ifsession(使用此模块您将能够配置<IfUser>条件)
  • mod_conf_sql(使用此模块,您将能够从 MySQL 加载配置)

为了帮助您重新编译 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视图

  • 此视图是“默认”行和用户行的串联(“默认”行有 1 as id,用户行有用户id+ 1 as id
  • 连接“userconf-”和用户idname
  • “如果用户”为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 服务器

我希望这能帮到您。祝你好运

于 2013-05-10T00:52:53.737 回答