Новости

OpenNET: стаття - Віртуальний ftp сервер на базі proftpd з користувачами в MySQL (virtual ftp proftpd quote linux debian)

  1. Віртуальний ftp сервер на базі proftpd з користувачами в MySQL (virtual ftp proftpd quote linux debian)

Віртуальний ftp сервер на базі proftpd з користувачами в MySQL (virtual ftp proftpd quote linux debian)


Ключові слова: virtual , ftp , proftpd , quote , linux , debian , ( знайти схожі документи )
From: Денисенко Руслан <ruslan [at] black-soft [dot] com> Date: Sun, 23 Feb 2008 17:02:14 +0000 (UTC) Subject: Віртуальний ftp сервер на базі proftpd з користувачами в MySQL Оригінал: ua/?q=node/22> http://howtoforge.org.ua/?q=node/22 Автор: Falko Timme <ft [at] falkotimme [dot] com> Переклад: Денисенко Руслан <ruslan [at] black-soft [dot] com> Оригінал англійською: http://www.howtoforge.com/proftpd_mysql_virtual_hosting Цей документ описує, як встановити сервер Proftpd, який використовує віртуальних користувачів з бази даних MySQL, замість справжніх системних користувачів. Це є набагато більшою продуктивністю і дозволяє мати тисячі користувачів ftp на єдиній машині. На додаток до того, я покажу як використовувати квоти з цією конфігурацією. Для адміністрації бази даних MySQL ви можете використовувати веб інструменти подібні phpMyAdmin, які також будуть встановлені в цьому howto. phpMyAdmin - це зручний графічний інтерфейс адміністірованія бази даних MySql, це означає, що вам не доведеться возитися з командним рядком. Ця howto заснована на Debian Sarge (Debian 3.1). Ви повинні вже встановити основну систему Debian, як описано тут: - http://www.howtoforge.com/perfect_setup_debian_sarge - http://www.howtoforge.com/perfect_setup_debian_sarge_p2 Це повинно застосуватися і до інших Debian-based дістібудівам, подібно Ubuntu, Knoppix, і т.п .. На інших дістрібудівах подібно SuSE, Fedora, Mandriva, і т.п. тільки інсталяція Proftpd інша; конфігурація Proftpd повинна застосуватися до цих дістібудівам також. Цей howto мається на увазі як практичне керівництво; і не відкриває теоритических частина. Теорія розглядається в багатьох інших документах в Web. Цей документ не дає гарантії якогось виду! Я хочу сказати, що це не єдиний шлях установки такої системи. Є багато шляхів досягнення цієї мети, але це шлях, який вабрал я. Я не даю ніякої гарантії, що дана конфігурація буде працювати у вас! 1. Встановлюємо MySQL і phpMyAdmin Це все може бути встановлено цілком однієї єдиною командою apt-get install mysql-server mysql-client libmysqlclient12-dev phpmyadmin Вам буде задано кілька запитань Enable suExec? &lt;- Yes Configuring mysql-server (Install Hints) <- OK Which web server would you like to reconfigure automatically? &lt;- apache, apache2 Do you want me to restart apache now? <- Yes Створіть пароль для root користувача MySql (замініть yourrootsqlpassword паролем, який ви хочете використовувати): mysqladmin -u root password yourrootsqlpassword 2. Встановлення Proftpd з підтримкою MySQL Для Debian доступний заздалегідь сконфігурованих пакет proftpd-mysql. Встановіть його як standalone daemon, подібно до цього: apt-get install proftpd-mysql Run proftpd from inetd or standalone? <- standalone Then we create an ftp group ( "ftpgroup") and user ( "ftpuser") that all our virtual users will be mapped to. Replace the group- and userid 2001 with a number that is free on your system: groupadd -g 2001 ftpgroup useradd -u 2001 -s / bin / false -d / bin / null -c "proftpd user" -g ftpgroup ftpuser Потім створимо ftp групу ( "ftpgroup") і користувача ( "ftpuser"), під якими будуть працювати всі віртуальні користувачі. Замініть group- і userid 2001 року на номер який вільний у вашій системі. groupadd -g 2001 ftpgroup useradd -u 2001 -s / bin / false -d / bin / null -c "proftpd user" -g ftpgroup ftpuser 3. Створення MySQL бази для Proftpd Зараз ми створимо базу даних ftp і користувача MySql, назвемо його proftpd, daemon proftpd буде використовувати його пізніше, щоб з'єднатися з базою даних ftp. mysql -u root -p create database ftp; GRANT SELECT, INSERT, UPDATE, DELETE ON ftp. * TO 'proftpd' @ 'localhost' IDENTIFIED BY 'password'; GRANT SELECT, INSERT, UPDATE, DELETE ON ftp. * TO 'proftpd'@'localhost.localdomain' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; Замініть рядок password на пароль який ви хотіли б використовувати для користувача MySQL proftpd. Ще в оболонці MySQL, ми створюємо таблиці бази даних, які нам потрібні: USE ftp; CREATE TABLE ftpgroup (groupname varchar (16) NOT NULL default '', gid smallint (6) NOT NULL default '5500', members varchar (16) NOT NULL default '', KEY groupname (groupname)) TYPE = MyISAM COMMENT = ' ProFTP group table '; CREATE TABLE ftpquotalimits (name varchar (30) default NULL, quota_type enum ( 'user', 'group', 'class', 'all') NOT NULL default 'user', per_session enum ( 'false', 'true') NOT NULL default 'false', limit_type enum ( 'soft', 'hard') NOT NULL default 'soft', bytes_in_avail int (10) unsigned NOT NULL default '0', bytes_out_avail int (10) unsigned NOT NULL default '0', bytes_xfer_avail int (10) unsigned NOT NULL default '0', files_in_avail int (10) unsigned NOT NULL default '0', files_out_avail int (10) unsigned NOT NULL default '0', files_xfer_avail int (10) unsigned NOT NULL default '0 ') TYPE = MyISAM; CREATE TABLE ftpquotatallies (name varchar (30) NOT NULL default '', quota_type enum ( 'user', 'group', 'class', 'all') NOT NULL default 'user', bytes_in_used int (10) unsigned NOT NULL default '0', bytes_out_used int (10) unsigned NOT NULL default '0', bytes_xfer_used int (10) unsigned NOT NULL default '0', files_in_used int (10) unsigned NOT NULL default '0', files_out_used int (10) unsigned NOT NULL default '0', files_xfer_used int (10) unsigned NOT NULL default '0') TYPE = MyISAM; CREATE TABLE ftpuser (id int (10) unsigned NOT NULL auto_increment, userid varchar (32) NOT NULL default '', passwd varchar (32) NOT NULL default '', uid smallint (6) NOT NULL default '5500', gid smallint (6) NOT NULL default '5500', homedir varchar (255) NOT NULL default '', shell varchar (16) NOT NULL default '/ sbin / nologin', count int (11) NOT NULL default '0', accessed datetime NOT NULL default '0000-00-00 00:00:00', modified datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (id), UNIQUE KEY userid (userid)) TYPE = MyISAM COMMENT = 'ProFTP user table'; quit; Як ви можливо помітили по команді quit ми покинули оболонку MySQL і повернулися до оболонки Linux. Я буду вважати, що ім'я хоста вашої системи сервера ftp - це server1.example.com) ви можете звернутися до phpMyAdmin по http://server1.example.com/phpmyadmin/ (Ви можете використовувати IP адресу замість server1.example.com) в браузері пройдіть реєстрацію як користувач proftpd. Пізніше ви можете використовувати phpMyAdmin щоб контролювати ваш сервер Proftpd. 4. Конфігурація Proftpd Відкрийте /etc/proftpd.conf і додайте наступні рядки: DefaultRoot ~ # The passwords in MySQL are encrypted using CRYPT SQLAuthTypes Plaintext Crypt SQLAuthenticate users * groups * # used to connect to the database # databasename @ host database_user user_password SQLConnectInfo ftp @localhost proftpd password # Here we tell ProFTPd the names of the database columns in the "usertable" # we want it to interact with. Match the names with those in the db SQLUserInfo ftpuser userid passwd uid gid homedir shell # Here we tell ProFTPd the names of the database columns in the "grouptable" # we want it to interact with. Again the names match with those in the db SQLGroupInfo ftpgroup groupname gid members # set min UID and GID - otherwise these are 999 eachSQLMinID 500 # create a user's home directory on demand if it does not exist CreateHome on # Update count every time user logs in SQLLog PASS updatecount SQLNamedQuery updatecount UPDATE "count = count + 1, accessed = now () WHERE userid = '% u'" ftpuser # Update modified everytime user uploads or deletes a file SQLLog STOR, DELE modified SQLNamedQuery modified UPDATE "modified = now () WHERE userid = '% u' "ftpuser # User 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 ftpquotalimits WHERE name = '% {0}' AND quota_type = '% {1}' "SQLNamedQuery get-quota-tally SELECT" name, quota_type, bytes_in_used, bytes_out_used, bytes_xfer_used, fi les_in_used, files_out_used, files_xfer_used FROM ftpquotatallies 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} ' "ftpquotatallies SQLNamedQuery insert-quota-tally INSERT"% {0},% {1},% {2},% {3},% {4},% {5},% {6}, % {7} "ftpquotatallies QuotaLimitTable sql: / get-quota-limitQuotaTallyTable sql: / get-quota-tally / update-quota-tally / insert-quota-tally RootLogin off RequireValidShell off Переконайтеся в тому що ви замінили рядок password, на реальний пароль для MySQL користувача proftpd в рядку SQLConnectInfo! Перезапускаємо Proftpd: /etc/init.d/proftpd restart 5. Заповнення бази даних і тестування Для заповнення бази даних ви можете використовувати оболонку MySql mysql -u root -p USE ftp; Для початку ми додамо запис в таблицю ftpgroup. Вона містить поля groupname, groupid і username. Групу / користувача ftp ми створили в кінці кроку два (замініть groupid, на той який ви зазначений при створенні користувача): INSERT INTO `ftpgroup` (` groupname`, `gid`,` members`) VALUES ( 'ftpgroup', 2001., 'ftpuser'); Зараз ми закінчили з таблицею ftpgroup. Нам не доведеться створювати подальших записів тут. Кожен раз, коли ви створюєте нового віртуального користувача ftp, ви робите це в таблицях ftpquotalimits і ftpuser. Так що давайте створювати нашого першого користувача (ми все ще перебуваємо в оболонці MySQL): INSERT INTO `ftpquotalimits` (` 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`) VALUES ( 'exampleuser', 'user', 'true', 'hard', 15728640, 0, 0, 0, 0, 0); INSERT INTO `ftpuser` (` id`, `userid`,` passwd`, `uid`,` gid`, `homedir`,` shell`, `count`,` accessed`, `modified`) VALUES (1, 'exampleuser', 'secret', 2001., 2001., '/home/www.example.com', '/ sbin / nologin', 0, '', ''); quit; (Не забувайте замінити groud- і userid 2001 року на укзано в останньому INSERT, якщо ви використовуєте інші значення, ніж використовувані в цій howto!) Зараз відкрийте свою програму клієнта FTP на вашій робочій станції (що-небудь подібно WS_FTP або SmartFTP, якщо ви працюєте на системі Windows) і пробуйте з'єднатися. Ім'я хоста ви використовуєте server1.example.com (або IP адреса системи), ім'я користувача - exampleuser, і пароль секрет. Якщо ви з'єдналися - привітання! В іншому випадку, що-небудь пройшло неправильно. Зараз, якщо ви виконаєте ls -l / home ви повинні побачити, що директорія /home/www.example.com (початковий каталог exampleuser's) автоматично створена, і вона належить ftpuser і ftpgroup (користувача / групу ми створили в кінці кроку два). Щоб залишити оболонку MySQL, наберіть quit; 5.1 Адміністрація Бази даних Для більшості людей адміністрація бази легше, якщо вони мають графічний інтерфейс до MySQL; таким чином ви можете використовувати phpMyAdmin (в цьому прикладі http://server1.example.com/phpmyadmin/ ), Щоб контролювати базу даних ftp. Кожен раз, коли ви створюєте нового користувача, вам доведеться створити тільки записи в таблицях ftpquotalimits і ftpuser, так що я поясню стовпчики цих таблиць тут: Таблиця ftpuser: userid: Ім'я віртуального користувача Proftpd (напр. Exampleuser). passwd: незашифрованому (тобто, clear-text) пароль користувача. uid: Userid користувача ftp, ви створили в кінці кроку два (напр. 2001). gid: Groupid групи ftp, ви створили в кінці кроку два (напр. 2001). homedir: Початковий каталог віртуального користувача Proftpd (напр. /home/www.example.com). Якщо його не існує, він буде створений, коли новий користувач пройде першу авторизацію через FTP. Віртуальний користувач буде укладено в chroot оточення початкового каталогу, тобто, він не може звертатися до інших тек за межами його початкового каталогу. shell: Встановіть / sbin / nologin за замовчуванням. Таблиця ftpquotalimits: name: Ім'я віртуального користувача Proftpd (напр. Exampleuser). quota_type: Обмежити quota по користувачу або групі. Ми використовуємо тут користувача. per_session: true або false. True ліміти квоти дійсні тільки для сесії. Наприклад, якщо користувач має квоту 15 МБ, і він переслав 15 МБ протягом поточної сесії, потім він не може пересилати що-небудь ще. Але якщо він реєструється знову, то він знову має доступних 15 МБ. false, користувач має 15 МБ і байдуже якщо він реєструється знову. limit_type: hard або soft. Hard ліміт квоти - це ліміт never-to-exceed, в той час як м'яка квота може бути тимчасово перевищена. Нормально ви використовуєте hard тут. bytes_in_avail: Ліміт в байтах (напр. 15728640 для 15 МБ). 0 означає безмежним. bytes_out_avail: Ліміт завантаження в байтах. 0 означає безмежним. bytes_xfer_avail: Ліміт передачі в байтах.0 означає безмежним. files_in_avail: Upload ліміт в файлах. 0 означає безмежним. files_out_avail: Download ліміт в файлах. 0 означає безмежним. files_xfer_avail: Ліміт Tranfer в файлах. 0 означає безмежним. Таблиця ftpquotatallies використовується Proftpd всередині, щоб управляти квотами, так що вам не доведеться робити записів там! Якщо ви хочете створити анонімний ftp акаунт (обліковий запис ftp, до якого кожен може отримати доступ без логіна і пароля), ви можете зробити це подібно до цього: Для початку ми створюємо користувача і групу з ім'ям anonymous_ftp. Користувач має початковий каталог / home / anonymous_ftp: groupadd -g 2002 anonymous_ftp useradd -u 2002 -s / bin / false -d / home / anonymous_ftp -m -c "Anonymous FTP User" -g anonymous_ftp anonymous_ftp (Замініть 2002 з group- / userid, який вільний на вашій системі.) Потім ми створюємо директорію / home / anonymous_ftp / incoming, яка дозволить анонімному користувачу переслати файли: mkdir / home / anonymous_ftp / incoming chown anonymous_ftp: nogroup / home / anonymous_ftp / incoming І завершальний етап, відкрити / etc / proftpd.conf і додати такі директиви до нього: # Limit WRITE everywhere in the anonymous chroot <Directory *> <Limit WRITE> DenyAll </ Limit> </ Directory> # Uncomment this if you're brave. <Directory incoming> # Umask 022 is a good standard umask to prevent new files and dirs # (second parm) from being group and world writable. Umask 022 022 <Limit READ WRITE> DenyAll </ Limit> <Limit STOR> AllowAll </ Limit> </ Directory> </ Anonymous> Перезапустіть Proftpd: /etc/init.d/proftpd restart Зараз анонімні користувачі можуть входити на сервер, і вони можуть завантажити файли з / home / anonymous_ftp, але upload обмежений в / home / anonymous_ftp / incoming (і як тільки долучено в / home / anonymous_ftp / incoming, він не може бути ні прочитаний ні завантажений звідти; адміністратору доведеться перемістити його в / home / anonymous_ftp відразу, щоб зробити фаил доступним іншим). (Зауважте: Ви можете створити тільки один анонімний ftp акаунт на один IP адреса!) Посилання: Proftpd: http://www.proftpd.org/ MySQL: http://www.mysql.com/ phpMyAdmin: http://www.phpmyadmin.net/

  • 1.1 , хм (?), 19:58, 28/06/2008 [ відповісти ] [ +++ ] [ · · · ]
+ / - а як відкрити доступ анонімам (без введення будь-яких там guest, anonimous і пароля) до папки / pub в директорії / var / ftp ?? і навіщо створювати анонімусів папку в директорії home, якби я захотів додати Узер: anonymous_ftp і щоб він логін віддалено до системи, тоді так, я розумію, а на FTP вже є публічна директорія нафіга ще персональну !?
  • 1.2 , хм (?), 20:06, 28/06/2008 [ відповісти ] [ +++ ] [ · · · ]
+ / - і до речі хотів сказати, управляти всією системою в цілому можна і через інтерфейс Webmin, не потрібно бует рукоблудія в консолі.
  • 1.3 , t0xas (??), 21:10, 16/11/2008 [ відповісти ] [ +++ ] [ · · · ]
+ / - Добрий час доби. У мене таке питання, у мене при установки proftpd-mysql не спитав як встановити його. Просто встановився і все. І тепер /etc/init.d/proftpd start
говорить

ProFTPd warning: can not start neither in standalone nor in inetd / xinetd mode. Check your configuration.

  • 1.5 , will (?), 2:52, 03/12/2008 [ відповісти ] [ +++ ] [ · · · ]
+ / - Поправте код в четвертому розділі - рядки наїжджають один на одного - виходить каша:
user_passwordSQLConnectInfo
Майже вся вставка така

+ SQLHomedirOnDemand застарів, замість нього CreateHome з трохи розширеним синтаксисом

У CentOS 5 в конфіги за замовчуванням не включені модулі

LoadModule mod_quotatab.c
LoadModule mod_quotatab_sql.c

  • 1.9 , imriot (Ok), 15:30 28/06/2010 [ відповісти ] [ +++ ] [ · · · ]
+ / - В мануалі насправді багато моментів упущено, але інформацціонной цінності його не змінює.
- Fatal: unknown configuration directive 'SQLAuthTypes' on line 3 of '/etc/proftpd/proftpd.conf') як мені цю помилку усунути?

/etc/proftpd/modules.conf
прибери # в рядку
# LoadModule mod_sql.c

ЗИ Потім він у тебе ругнется на eachSQLMinID


Додати коментар

Спонсори:

Хостинг:



Ua/?
Lt;- Yes Configuring mysql-server (Install Hints) <- OK Which web server would you like to reconfigure automatically?
Lt;- apache, apache2 Do you want me to restart apache now?
Встановіть його як standalone daemon, подібно до цього: apt-get install proftpd-mysql Run proftpd from inetd or standalone?
Conf') як мені цю помилку усунути?

Уважаемые партнеры, если Вас заинтересовала наша продукция, мы готовы с Вами сотрудничать. Вам необходимо заполнить эту форму и отправить нам. Наши менеджеры в оперативном режиме обработают Вашу заявку, свяжутся с Вами и ответят на все интересующее Вас вопросы.

Или позвоните нам по телефонам: (048) 823-25-64

Организация (обязательно) *

Адрес доставки

Объем

Как с вами связаться:

Имя

Телефон (обязательно) *

Мобильный телефон

Ваш E-Mail

Дополнительная информация: