我已经设置了一个带有MySQL连接的proftpd服务器。一切都很好。
我想使用(PathAllowFilter,PathDenyFilter,...)从数据库中为每个用户设置特定的权限
运行在Ubuntu 12.04 LTS发行版上的服务器。
发布于 2013-05-10 08:52:54
这并不容易,没有一个单独的模块可以做到这一点。但我找到了解决这个问题的办法。
这并不是最好的,因为每次更改MySQL配置时都必须重新启动ProFTPd服务器,但它是有效的。
因为您有一个已经运行MySQL的ProFTPd服务器,所以我将只解释特定用户配置的一部分。
对于此解决方案,您需要使用以下模块编译ProFTPd:
<IfUser> conditions)为了帮助您进行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 视图:
selects‘s id和configuration列连接在一起,形成唯一的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 VIEW;
视图3.创建 ctxt 视图
userconf- "userconf-“这个视图是"Default”行和user行的串联("Default“行有1作为用户名,user行有user's id +1作为name
id作为nameidCREATE 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 视图
对于conf_id
ctxt_id
id和configuration列是串联的id +1是selects的联合(对于每个列,都需要联合)创建视图ftpuser_map AS SELECT concat (ftpuser.id,'-PathDenyFilter') AS conf_id,(ftpuser.id + 1) AS ctxt_id from联合select concat(ftpuser.id,'-PathAllowFilter') AS conf_id,(ftpuser.id+ 1) AS ctxt_id;
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 => your MySQL => your MySQL usernamepassword MySQL => your MySQL => MySQL=> your MySQL=>6.重新启动ProFTPd服务器
我希望这能对你有所帮助。祝好运
https://stackoverflow.com/questions/16473013
复制相似问题