The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

proftpd + mysql + mod_qouta (ftp mysql quota)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: ftp, mysql, quota,  (найти похожие документы)
From: Khomyakov Alexandr aka airo <airo@airo.com.ru.> Date: Mon, 11 Aug 2006 14:31:37 +0000 (UTC) Subject: proftpd + mysql + mod_qouta Введение задача: Организовать ftp доступ для нескольких пользователей и назначить этим пользователям квоты, Статья написана из за того что мало информации о том как же сконфигурировать mod_quotatab. Надеюсь кому-нибудь пригодиться :) Информация о пользователях и квотах будет содержаться в mysql, вызвано это тем что юзеров секьюрнее держать в базе данных, а реализация mod_quotatab на текстовых файлах не очень красиво выглядит в плане того что квоты в этом случае добавляются с помощью скрипта со сложным синтаксисом. Я рассчитываю на то что вы самостоятельно сможете установить proftpd с mod_sql и mod_qouta и базу данных mysql. Создаем базу данных и таблицы, и пользователя. mysql -u root -p CREATE DATABASE proftpd; USE proftpd; grant select,insert,update,delete on proftpd.* to proftpd@localhost identified by 'password'; CREATE TABLE users ( primary_key int not null auto_increment primary key, username varchar(20) not null, password varchar(20) 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 ); Добавляем группу и юзера для proftpd и виртуальных пользователей proftpd pw group add ftp pw user add ftp -s /sbin/nologin -d /dev/null -g ftp заносим пользователей и квоты. Если для системного пользователя, смотрим uid gid [airo@airo /]# cat /etc/passwd |grep airo airo:*:1005:0:User &:/home/airo:/usr/local/bin/bash insert into users values (NULL,'airo','passwd','1005','0','/home/airo','/sbin/nologin'); insert into quotalimits values ('airo','user','false','hard','0','0','0','0','0','0'); Если для виртуального пользователя, то его файлы должны кому то принадлежать. Это будет user ftp. [airo@airo /]# cat /etc/passwd |grep ftp: ftp:*:1012:1013:User &:/dev/null:/sbin/nologin insert into users values (NULL,'uk','uk123','1012','1013','/home/vftp/uk','/sbin/nologin'); задем квоту в 150Мб insert into quotalimits values ('airo','user','false','hard','157286400','0','0','0','0','0'); Комментарии к таблице users username: имя виртуального пользователя passwd: незашифрованный пароль uid: uid пользователя которому будут принадлежать файлы gid: gid пользователя которому будут принадлежать файлы homedir: chroot директория пользователя. shell: по умолчанию /sbin/nologin Комментарии к таблице quotalimits name: имя виртуального пользователя quota_type: тип ограничения по (user,qroup,class или all - для всех) per_session: true - использовать квоту только на текущую сессию, в этом случае ни куда не записывается размер использованной квоты и для каждой новой сессии используется указанная квота. false - в этом случае использование квоты заноситься в базу данных. limit_type: soft - возможно некоторое превышение квоты hard - жостко заданная квота, превышение невозможно bytes_in_avail лимит загрузки в байтах ( если 150 Мб то 157286400 байт) 0 = нет лемита bytes_out_avail лимит скачивания в байтах. 0 = нет лимита bytes_xfer_avail: Лимит передачи в байтах.0 = нет лимита files_in_avail: Лимит количества загружаемых файлов. 0 = нет лимита files_out_avail: Лимит количесва скачиваемых файлов. 0 = нет лимита files_xfer_avail: Лимит количесва передачи файлов. 0 = нет лимита таблицу quotatallies редактировать не нужно proftpd это делает сам. Для виртуальных пользователей можно использовать любую папку, я например использовал следующую mkdir /home/vftp только вот для каждого нового пользователя нужно обязательно создавать домашнюю директорию и назначать владельца согласно выставленным в БД uid и gid mkdir /home/vftp/uk chown ftp:ftp /home/vftp/uk Собственно конфиг proftpd #-------------------- proftpd.conf ---------------------------# ServerName "FTP server for site.ru " ServerAdmin airo@site.ru ServerType standalone DefaultServer on ServerIdent on Port 21 Umask 022 MaxClients 10 "Sorry, the maximum number of allowed users are already connected (%m)" MaxClientsPerHost 10 "Sorry, you may not connect more than one time. %m allowed users already connected" MaxLoginAttempts 3 User ftp Group ftp SyslogLevel notice UseReverseDNS off IdentLookups off SystemLog /var/log/proftpd/proftpd.log TransferLog /var/log/proftpd/proftpd-tranfer.log ExtendedLog /var/log/proftpd/proftpd-extended.log read,write ExtendedLog /var/log/proftpd/proftpd-auth.log AUTH auth LogFormat default "%h %l %u %t \"%r\" %s %b" LogFormat auth "%v [%P] %h %t \"%r\" %s" LogFormat write "%h %l %u %t \"%r\" %s %b" TimeoutIdle 300 TimeoutLogin 300 TimeoutNoTransfer 360 TimeoutStalled 640 DefaultTransferMode binary AllowForeignAddress off DisplayConnect /etc/ftp_connect.msg DisplayLogin /etc/ftp_login.msg AccessDenyMsg "ATTENTION!!! ALL CONNECTIONS LOGED" AccessGrantMsg "Now upload/download files" DisplayGoAway "Go Away" PersistentPasswd off DefaultRoot ~ <Directory ~ > AllowOverwrite on <Limit Write> AllowAll </Limit> <Limit READ> AllowAll </Limit> </Directory> # Если нужен анонимный доступ раскомментировать. #< Anonymous /path/to/anonymous/users> # Директория для анонимов. # User ftp # Group ftp # UserAlias anonymous ftp # MaxClients 10 # < Limit WRITE> # DenyAll # Запрещаем писать. # < /Limit> #< /Anonymous> #sql info SQLAuthTypes Plaintext # хранить пароли в открытом тексте SQLAuthenticate users SQLConnectInfo proftpd@localhost proftpd password # база@хост логин пароль SQLUserInfo users username password uid gid homedir shell # данные которые беруться из базы RequireValidShell off # непроверять валидность шелла #SQLLogFile /var/log/proftpd/sql.log #нужно только на время тестирования после закоментить, генерирует много инфы. # config quotas # =========== QuotaEngine on # включить квоту QuotaDirectoryTally on QuotaDisplayUnits Mb 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_avail, files_xfer_avail FROM quotalimits WHERE name = '%{0}' AND quota_type = '%{1}'" 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 quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" 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 + %{2}, files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name = '%{6}' AND quota_type = '%{7}'" quotatallies 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 --------------------------------# Создаем директорию для логов mkdir /var/log/proftpd запросы SQLNamedQuery get-quota-limit SQLNamedQuery get-quota-tally SQLNamedQuery update-quota-tally должны быть одной строкой в конфиге. вот вродебы и все теперь можно запусктать proftpd если не получаеться смотреть логи. проверить работоспособность квоты можно залогинившись и набрав команду ftp> quote site quota 200-The current quota for this session are [current/limit]: Name: airo Quota Type: User Per Session: False Limit Type: Hard Uploaded Mb: 0.00/150.00 Downloaded Mb: unlimited Transferred Mb: unlimited Uploaded files: unlimited Downloaded files: unlimited Transferred files: unlimited 200 Please contact airo@site.ru if these entries are inaccurate
  • Список источников. http://proftpd.org http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-Quotas.html http://www.botik.ru/doc/proftpd-doc/mod_quotatab.html#QuotaDirectoryTally

  • << Предыдущая ИНДЕКС Правка src / Печать Следующая >>

    Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, arruah (ok), 16:16, 30/10/2006 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    было бы не плохо почитать аналогичную статью, только с авторизацией в openldap
     
  • 1.2, Pasystem (??), 13:25, 26/01/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Статья супер, спасибо за неё :)
    получилось с первого раза
    только в конфиге proftpd в запросе mysql
    надо было только указать знак переноса обратный слэш, хотя не знаю может это только у меня такая ошибка
     
  • 1.3, b2d (?), 17:37, 30/05/2007 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Спасибо за статью - все поднялось. Платформа Gentoo,
    v.1.3.1-rc1 на BSD не заработал даже 1.3.2 ...
    вопрос такой .. для анонимов..хочу создать папку incoming с квотой 1Гб, как это реализовать при данной схеме??
     
  • 1.4, rsa (?), 09:30, 05/02/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    при исплоьзовании MySQL совершенно нет необходимости держать пароли пользователей в открытом виде, достаточно в proftpd.conf указать:
    SQLAuthTypes Backend
    SQLBackend mysql

    и, соответственно в SQL-запросе использовать password('userpass')

     
  • 1.5, Илья (??), 12:33, 15/02/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Подскажите, а можно как то организовать пользователям онлайн просмотр израсходованного трафика (или оставшегося)?
     
  • 1.6, AlexRusSoft (?), 08:12, 26/02/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Если установите SQLAuthTypes Backend то не забудте изменить размер хранимого пароля
    password varchar(50) not null
     
  • 1.7, Mstyslav (?), 14:00, 08/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    спасибо автору, мануал очень толковый и достаточно подробный. завелось все с пол-пинка!
     
  • 1.8, bibi (?), 06:11, 20/10/2008 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >Подскажите, а можно как то организовать >пользователям онлайн просмотр >израсходованного трафика (или оставшегося)?

    select sum(bytes)   from xfer_table where user_name = 'bibi';

     
  • 1.9, Женк (??), 21:53, 04/01/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Хм... сижу тут парюсь. с пятым мускулом не работает
     
  • 1.10, Gurd (?), 17:25, 28/06/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Всё работает с пятым! Огромное спасибо.
     
  • 1.11, nestap (?), 16:06, 12/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    u mine problema i ne polucheatsa resahati...

        SQLNamedQuery uid SELECT "domain.uid FROM ftp_users,domain WHERE domain.id=ftp_users.domain AND ftp_users.email='%u'"
        #domain.uid eto id usera... a etot user mojet imeti neskoliko ftp_user a limit quota totje

        SQLNamedQuery get-quota-limit SELECT "uid, quota_type, per_session, limit_type, \
            bytes_in_avail, bytes_out_avail, bytes_xfer_avail, files_in_avail, files_out_avail, files_xfer_avail FROM quotalimits WHERE uid=%{uid}"

        SQLNamedQuery get-quota-tally SELECT "uid, quota_type, bytes_in_used, bytes_out_used, \
            bytes_xfer_used, files_in_used, files_out_used, files_xfer_used FROM quotatallies WHERE uid=%{uid}"

        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 + %{2}, \
            files_in_used = files_in_used + %{3}, files_out_used = files_out_used + %{4}, \
            files_xfer_used = files_xfer_used + %{5} WHERE uid = %{uid}" quotatallies
        SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4}, %{5}, %{uid}" quotatallies
        QuotaLimitTable sql:/get-quota-limit
        QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally
        QuotaLog                        /var/log/proftpd/quota.log


    pomaghi pojalusta....

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру