Специальная пользовательская конфигурация Proftpd из MySQL

Я уже настроил сервер proftpd с подключением к MySQL. Все работает нормально.

Я хотел бы установить определенные разрешения для каждого пользователя из базы данных, используя (PathAllowFilter, PathDenyFilter,...)

Сервер работает на дистрибутиве Ubuntu 12.04 LTS.


person Leni Versovitch    schedule 09.05.2013    source источник
comment
Что вы пробовали? Где вы смотрели? Stackoverflow здесь не для того, чтобы делать вашу работу за вас.   -  person    schedule 10.05.2013
comment
Да, я пробовал много вещей, но безрезультатно.   -  person Leni Versovitch    schedule 10.05.2013


Ответы (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
  • "ЕслиПользователь" как 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
comment
Мне кажется, я делаю именно то, что хочу. Я попробую это решение. - person Leni Versovitch; 10.05.2013
comment
Оно работает! Это отличное решение, спасибо! Есть ли возможность изменить конфигурацию без перезагрузки сервера? - person Leni Versovitch; 10.05.2013
comment
Рад видеть, что это помогло вам. Нет, с этим решением вам нужно перезапустить сервер, потому что конфигурация загружается один раз в начале. - person Code-Source; 10.05.2013