Конфигурация конкретного пользователя 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 => ваше имя пользователя MySQL
  • password => ваш пароль MySQL
  • host => ваш хост MySQL
  • database => ваша база данных MySQL

6. Перезагрузите сервер ProFTPd

Я надеюсь, что это поможет вам. Удачи

Другие вопросы по тегам