Конфигурация конкретного пользователя Proftpd из MySQL
Я уже настроил сервер proftpd с подключением MySQL. Все отлично работает
Я хотел бы установить конкретные разрешения для каждого пользователя из базы данных с помощью (PathAllowFilter
, PathDenyFilter
...)
Сервер работает на дистрибутиве Ubuntu 12.04 LTS.
1 ответ
Это не так просто, нет единого модуля для этого. Но я нашел решение для этого.
Это не оптимально, потому что вы должны перезапускать сервер 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
- "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
=> ваше имя пользователя MySQLpassword
=> ваш пароль MySQLhost
=> ваш хост MySQLdatabase
=> ваша база данных MySQL
6. Перезагрузите сервер ProFTPd
Я надеюсь, что это поможет вам. Удачи