来自MySQL的Proftpd特定用户配置

时间:2013-05-09 23:48:04

标签: mysql ftp proftpd

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

我想使用(PathAllowFilterPathDenyFilter,...来确定数据库中每个用户的特定权限。

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

1 个答案:

答案 0 :(得分:1)

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

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

由于你有一台已经运行MySQL的ProFTPd服务器,我只会解释特定用户配置的部分。

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

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

为了帮助您重新编译ProFTPd,您可以运行此命令proftpd -V以查看您的版本的配置方式。您可以找到一些文档here

编译ProFTPd服务器并运行后,您将必须登录MySQL服务器。

如果您阅读mod_conf_sql,他们会说要创建3个表ftpctxt, ftpconf, ftpmap。我们将创建这些表,除非您想从MySQL进行全局配置。

我们将使用“views”伪造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
  • View是一个选择联合(对于每个列都需要一个联合)

    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为id。< / LI>
  • 将“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
  • 的用户ctxt_id + 1
  • View是一个选择联合(对于每个列都需要一个联合)

    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 =&gt;你的MySQL用户名
  • password =&gt;你的MySQL密码
  • host =&gt;你的MySQL主机
  • database =&gt;你的MySQL数据库

<强> 6。重新启动ProFTPd服务器

我希望这会对你有所帮助。祝你好运