【问题标题】:Proftpd specific user configuration from MySQL来自 MySQL 的 Proftpd 特定用户配置
【发布时间】:2013-05-09 23:48:04
【问题描述】:

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

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

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

【问题讨论】:

  • 你试过什么?你在哪里看过? Stackoverflow 不是在这里为您完成工作的。
  • 是的,我尝试了很多东西都没有运气。

标签: mysql ftp proftpd


【解决方案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 进行全局配置。

我们将使用“视图”伪造 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 服务器

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

【讨论】:

  • 在我看来,我完全按照自己的意愿去做。我会试试这个解决方案。
  • 有效!这是一个很好的解决方案谢谢!是否有可能在不重新启动服务器的情况下更改配置?
  • 很高兴看到它对您有所帮助。不,使用此解决方案您必须重新启动服务器,因为配置会在开始时加载一次。
猜你喜欢
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多