ftp - Proftpd specific user configuration from MySQL -
i have set proftpd server mysql connection. works fine.
i set specific permissions each user database using (pathallowfilter
, pathdenyfilter
, ...)
the server running on ubuntu 12.04 lts distribution.
it not easy, there no single module this. found solution this.
it's not optimal because have restart proftpd server each time change mysql configuration, works.
as have proftpd server run mysql, explain part of specific user configuration.
for solution need proftpd compiled these modules:
- mod_ifsession (with module able configure
<ifuser>
conditions) - mod_conf_sql (with module able load configuration mysql)
to proftpd recompilation, can run command proftpd -v
see how version configured. can found documentation here.
once have compiled proftpd server , it's run, have log on mysql server.
if read mod_conf_sql, create 3 tables ftpctxt, ftpconf, ftpmap
. not create these tables unless want have global configuration mysql.
we fake mysql configuration "views".
1. first add each specific configuration user column (make sure have default value):
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. create conf
view:
- user's
id
, configuration column concatenated make uniqueid
- user's configuration column used
type
- user's configuration value used
info
view union of selects (for every column union required)
create view ftpuser_conf select concat(ftpuser.id,'-pathdenyfilter') id,'pathdenyfilter' type,ftpuser.pathdenyfilter info ftpuser union select concat(ftpuser.id,'-pathallowfilter') id,'pathallowfilter' type, ftpuser.pathallowfilter info ftpuser;
3. create ctxt
view
- this view concatenation of "default" row , user's rows ("default" row has 1
id
, user's rows have user'sid
+ 1id
. - concatenate "userconf-" , user's
id
name
- "ifuser"
type
user's username
info
create view ftpuser_ctxt select 1 id,null parent_id, 'default' name, 'default' type, null info union select (ftpuser.id + 1) id,1 parent_id, concat('userconf-',ftpuser.userid) name, 'ifuser' type,ftpuser.userid info fron ftpuser;
4. create map
view
- user's
id
, configuration column concatenatedconf_id
- user's
id
+ 1ctxt_id
view union of selects (for every column union required)
create view ftpuser_map select concat(ftpuser.id,'-pathdenyfilter') conf_id,(ftpuser.id + 1) ctxt_id ftpuser union select concat(ftpuser.id,'-pathallowfilter') conf_id,(ftpuser.id + 1) ctxt_id ftpuser;
5. add these lines proftpd configuration
<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>
where:
user
=> mysql usernamepassword
=> mysql passwordhost
=> mysql hostdatabase
=> mysql database
6. restart proftpd server
i hope you. luck
Comments
Post a Comment