Это не так просто, единого модуля для этого нет. Но я нашел решение для этого.
Это не оптимально, потому что вам нужно перезапускать сервер ProFTPd каждый раз, когда вы меняете конфигурацию MySQL, но это работает.
Поскольку у вас есть сервер ProFTPd, который уже работает с MySQL, я объясню только часть конфигурации конкретного пользователя.
Для этого решения вам нужно, чтобы 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 как
id
, а пользовательские строки имеют пользовательские id
+ 1 как id
.
- Объединить «userconf-» и
id
пользователя как name
- "ЕслиПользователь" как
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.
Я надеюсь, что это поможет вам. Удачи
person
Code-Source
schedule
10.05.2013