Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: МИГРИРУЕМ С vsFTPd на ProFTPd + квотирование  (Прочитано 4632 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн onsergey

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
  • ЕДUbuntu - научился сам, научи другого ; )
    • Просмотр профиля
МИГРИРУЕМ С vsFTPd на ProFTPd ( Ububnta 12.04/Ubunta 12.10, ProFTPd 1.3.4b Включая квотирование )
После нескольких дней неудач установить vsFTPd на Ubuntu 12.x принял решение о мигрировании
1. Удаляем/сносим vsftpd
sudo service vsftpd stop
sudo apt-get autoremove vsftpd

2. Устанавливаем ProFTPd (из репозитария Ubuntu версия 1.3.4a) с модулем MySQL
sudo apt-get install proftpd-basic proftpd-mod-mysql

3. Конфигурим основной конфиг ProFTPd /etc/proftpd/proftpd.conf

...
# Подключение файла конфигурации для SQL
Include /etc/proftpd/sql.conf

AuthOrder                       mod_sql.c
RequireValidShell               off
...
#Каждый пользователь строго в своей папке
DefaultRoot ~
...
#Добавим поддержку кодировки кириллицы из оболочки в 1251 в UTF8 при записи на сервер
<IfModule mod_lang.c>
LangEngine on
UseEncoding utf-8 cp1251
</IfModule>

4. Под MySQL конфигурим modules.conf и sql.conf (Позже, для 1.3.4b modules.conf не понадобится)
4.1. modules.conf

...
# Install one of proftpd-mod-mysql, proftpd-mod-pgsql or any other
# SQL backend engine to use this module and the required backend.
# This module must be mandatory loaded before anyone of
# the existent SQL backeds.
LoadModule mod_sql.c
...
# Install proftpd-mod-mysql and decomment the previous
# mod_sql.c module to use this.
LoadModule mod_sql_mysql.c
....
4.2. sql.conf

#
<IfModule mod_sql.c>
#SQLBackend     mysql

## Режим работы модуля
# on=auth+log
# auth - используется только для аутентификации
# log  - используется только для логирования
# default = on
SQLEngine on

## Режим аутентификации
# on = users+groups
# users - авторизация пользователей без использования групп
# default = on
SQLAuthenticate users

## Метод аутентификации
# Plaintext - пароль храниться открытым текстом в бд
# Crypt - зашифрован функцией ENCRYPT('mypassword')
# Backend зашифрован функцией PASSWORD('mypassword')
# default = none
SQLAuthTypes Crypt

## Данные для подключения к БД (бывшая vsftpd база с одноимённым пользователем vsftpd и паролем vsftpdpass)
SQLConnectInfo vsftpd@localhost vsftpd vsftpdpass

## Информация о таблице пользователей
# В vsftpd был "усечённый" вариант подключения - имя/пароль
# SQLUserInfo `имя таблицы` `поле с именем пользователя` `поле с паролем` ...
# default = users userid passwd uid gid homedir shell
SQLUserInfo users username password uid gid home shell

## Информация о таблице групп
#SQLGroupInfo groups groupname gid members

## Минимальный UID.
# default = 999
#SQLMinUserUID 999
## Минимальный GID
# default = 999
#SQLMinUserGID 999

</IfModule>

5. Создаём таблицы MySQL на доступ и квоты (Если квоты не нужны, то оставьте только таблицу users и из п.6 внесите одного пользователя для теста, после чего выполните перезапуск демона – см. п.8)

CREATE TABLE users (
        primary_key int not null auto_increment primary key,
        username varchar(20) not null,
        password varchar(50) not null,
        uid int not null,
        gid int not null,
        homedir varchar(50) not null,
        shell varchar(20) not null
        );

CREATE TABLE quotalimits (
      name VARCHAR(30),
      quota_type ENUM("user", "group", "class", "all") NOT NULL,
      per_session ENUM("false", "true") NOT NULL,
      limit_type ENUM("soft", "hard") NOT NULL,
      bytes_in_avail FLOAT NOT NULL,
      bytes_out_avail FLOAT NOT NULL,
      bytes_xfer_avail FLOAT NOT NULL,
      files_in_avail INT UNSIGNED NOT NULL,
      files_out_avail INT UNSIGNED NOT NULL,
      files_xfer_avail INT UNSIGNED NOT NULL
    );

CREATE TABLE quotatallies (
      name VARCHAR(30) NOT NULL,
      quota_type ENUM("user", "group", "class", "all") NOT NULL,
      bytes_in_used FLOAT NOT NULL,
      bytes_out_used FLOAT NOT NULL,
      bytes_xfer_used FLOAT NOT NULL,
      files_in_used INT UNSIGNED NOT NULL,
      files_out_used INT UNSIGNED NOT NULL,
      files_xfer_used INT UNSIGNED NOT NULL
    );

6. Заполняем таблицы
6.1. Пользователи FTP-сервера (реальные - берём GID и UID из /etc/pass ), а виртуальных по GID и UID цепляем к одному реальному, например бывшему vsftpd :)

insert into users values (NULL,'vsftpd',ENCRYPT('vsftpdpass'),'1010','65533','/home/vsftpd','/bin/false');

 #uid gid сохраняем реального пользователя/группы (в нашем случае vsftpd)
 insert into users values (NULL,'user_www',ENCRYPT('user01pass'),'1010','65533','/home/vsftpd/www','/bin/false');
 insert into users values (NULL,'user_www2',ENCRYPT('user02pass'),'1010','65533','/home/vsftpd/www2','/bin/false');

6.2. Квоты (в Кб)

Подобие "root" только для ftp - ограничения квоты нет
insert into quotalimits values ('vsftpd','user','false','hard','0','0','0','0','0','0');

Квота виртуального пользователя в 100 Кб и 1Гб (!!!если единица квотирования будет килобайтом, смотри ниже настройки  mod_quotatab.c)
 insert into quotalimits values ('user_www','user','false','hard','100','0','0','0','0','0');
 insert into quotalimits values ('user_www2','user','false','hard','1048576','0','0','0','0','0');

7. Делаем настройки квотирования
Дописываем в конец основного конфигурационного файла proftpd.conf
(!все команды в одну строчку)
<IfModule mod_quotatab.c>
## Данные для подключения к БД
#SQLConnectInfo vsftpd@localhost vsftpd vftpsdpa2012

# config quotas
# ===========
QuotaEngine on<><------># включить квоту
QuotaDirectoryTally on
#Можно Байты, Килобайты, Мегабайты
QuotaDisplayUnits Kb
QuotaShowQuotas on
SQLNamedQuery get-quota-limit SELECT "name, quota_type, per_session, limit_type, bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out
SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM q
SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{
SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{6}, %{7}" quotatallies
QuotaLimitTable sql:/get-quota-limit
QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
QuotaLog /var/log/proftpd/quota.log
#----------------------------- end config --------------------------------
</IfModule>

8. Предварительный тест
Перезапускаем демона ProFTPd

sudo /etc/init.d/proftpd restart

Заходим в FTP-оболочку нашим указанным пользователем, например user_www
Стоит помнить, что мы присвоили оставшиеся от vsftpd права (sudo chown vsftpd:nogroup /home/vsftpd/www )

Обязательно смотрим логи, в частности /var/log/proftpd/quota.log
-----------------------------------
окт. 30 02:42:35 mod_quotatab/1.3.0[8404]: error: unsupported limit table type: 'sql'
окт. 30 02:42:35 mod_quotatab/1.3.0[8404]: error: unable to open QuotaLimitTable: Операция не позволяется
окт. 30 02:42:35 mod_quotatab/1.3.0[8404]: error: unsupported tally table type: 'sql'
окт. 30 02:42:35 mod_quotatab/1.3.0[8404]: error: unable to open QuotaTallyTable: Операция не позволяется
окт. 29 22:42:35 mod_quotatab/1.3.0[8404]: turning QuotaEngine off
-----------------------------------
Это мой бывший лог, что означало, что нет поддержки таблицы квотирования из-за неподключенного mod_quotatab модуля.

9. Создаём модуль квотирования
9.1. Ставим всё необходимое для компиляции и линковки
sudo apt-get install build-essential
9.2. Дополняем вспомогательные пакеты SSL-доступа, криптографии, мускл-клиента
sudo apt-get install libssl0.9.8 libssl1.0.0 libcap2 libmysqlclient-dev
9.3. Отдельно ТАЩИМ библиотеку mysql-connector-c-6.0.2.tar.gz
Идём на сайт мускульного коннектора
http://www.mysql.com/downloads/connector/c/#downloads

Выбираем платформу source code, качаем mysql-connector-c-6.0.2.tar.gz
Через наш рабочий FTP «затаскиваем» например в /var/source (sudo mkdir /var/source копируем cp -r /home/vsftpd/www/* /var/source/)

Распаковываем sudo tar –xvf mysql-connector-c-6.0.2.tar.gz
“Запоминаем” доступ к мускульным файлам включения и библиотек ( /var/source/mysql-connector-c-6.0.2/include  /var/source/mysql-connector-c-6.0.2/libmysql )

9.4. Тащим исходник ProFTPd
sudo cd /var/source
sudo wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.4b.tar.gz
sudo tar –xvf proftpd-1.3.4b.tar.gz

9.5. Конфигурируем компиляцию
./configure --with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql  --with-includes=/var/source/mysql-connector-c-6.0.2/include --with-libraries=/var/source/mysql-connector-c-6.0.2/libmysql --with-libdir=/usr/lib/x86_64-linux-gnu

9.6. Делаем компиляцию и компановку
make

9.7. Делаем инсталляцию
make install

9.8. Меняем демона A на B (останавливаем, удаляем старого, на его место копируем нового)
sudo /etc/init.d/proftpd stop
sudo rm –r /usr/sbin/proftpd
sudo cp –r /var/source/ /proftpd-1.3.4b/ proftpd/usr/sbin/proftpd

9.9. Закомментируем модуль modules.conf в основном файле proftp.conf
(!видимо для B он не нужен, в противном случае лезут ошибки запуска)
# Includes DSO modules
#Include /etc/proftpd/ modules.conf

9.10 Стартуем демона
sudo /etc/init.d/proftpd start

9.11 Тест квоты
Тупо качаем до 100 Кб и смотрим запреты. «Непомещающиеся в квоту» должны стать в 0 Кб размером

9.12 Обязательно смотрим логи, в частности /var/log/proftpd/quota.log
------------------------
Oct 30 19:40:26 mod_quotatab/1.3.0[22399]: quotatab write(): limit exceeded, returning Disk quota exceeded
Oct 30 19:40:26 mod_quotatab/1.3.0[22399]: STOR: quota reached: used 0.00 of 0.00 upload Mb
Oct 30 19:40:26 mod_quotatab/1.3.0[22399]: STOR: quota reached: 'access.log' removed
Oct 30 19:44:43 mod_quotatab/1.3.0[22404]: found limit entry for user 'user_www'
Oct 30 19:44:43 mod_quotatab/1.3.0[22404]: creating new tally entry to match limit entry
Oct 30 19:44:43 mod_quotatab/1.3.0[22404]: created tally entry for user 'user_www'
Oct 30 19:44:43 mod_quotatab/1.3.0[22404]: quotatab fs registered
------------------------

10. Вроде всё хорошо, но русские файлы в CuteFTP выглядят русскими, а в самой Ubuntu крокозябры. А вот с «А»-версией было всё хорошо.  :2funny:  :2funny:  :2funny:
Если программы работают правильно - ищите ошибки в компиляторах.
Говорят вы ищите нового программиста. Да, ищем, и старого тоже.
Секондбук - серверная гламурного бунтаря.

 

Страница сгенерирована за 0.047 секунд. Запросов: 22.