proftpd + mysql + lighttpd = свой мини хостинг

Итак. Статья предназначается для тех кто хочет сделать на своем компьютере подобие виртуального хостинга. Как вариант просто настроить фтп сервер(пропустите ненужные для вас настройки lighttpd). Итак что нам понадобится? Lighttpd - легковесный http сервер Mysql - реляционная база данных. Proftpd - популярный и очень мощный фтп сервер Mysql & Lighttpd будем устанавливать из репозитория. А вот proftpd прийдется собирать ручками. Устанавливаем lighttpd & mysql-server: Debian: apt-get install lighttpd mysql-server libmysqlclient15-dev libmysql++-dev Fedora core: yum install mysql mysql-server mysql++-devel (поскольку я сижу на дебиане то за точность команды не ручаюсь) Установили? Переходим далее. Теперь создаем временную директорию для исходников: mkdir /home/smit/src/ не забываем изменить ;) переходим в нее и забираем последние исходники proftpd wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.1.tar.gz распаковываем А теперь внимание. Нам понадобится знать где хранятся заголовочные файлы для mysql. Я приведу пример для Debian Debian: ./configure --prefix=/usr/local/ -with-modules=mod_sql:mod_sql_mysql:mod_quotatab:mod_quotatab_sql --with-includes=/usr/include/mysql/ Если все прошло без ошибок (Они могут возникнуть только в том случае если вы неправильно указали местоположение заголовочных файлов) То переходим к компиляции. make && make install После выполнения данных команд бинарные файлы окажутся в /usr/local/bin/ конфиг в /usr/local/etc/ Теперь нам нужно настроить сервер MySql для работы с proftpd Для начала мы должны установить пароль на пользователя root выполняем в консоли : mysql -u root use mysql После туда же вставляем: UPDATE user SET password=PASSWORD("abcd") WHERE user="root"; и это: FLUSH PRIVILEGES; перезапускаем сервис. abcd - ваш пароль не забудьте сменить на что то более серьезное ;) База готова к "Употреблению". Теперь нам нужно создать базу для сервера . mysql -u root -p програма спросит ваш пароль который мы установили ранее. Теперь нам нужно создать базу create database proftpd; После выбираем только что созданую базу use proftpd; Создаем базу 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 );

Теперь мы должны добавить пользователя и группу. От имени которых будет работать сервер. groupadd ftp useradd ftp -s /sbin/nologin -d /dev/null -g ftp заносим пользователей и квоты. Если для системного пользователя, смотрим uid gid: cat /etc/passwd | grep smit smit:x:1000:1000:smit,,,:/home/smit:/bin/bash 1000:1000 это и есть uid gid. Вносим данные в таблицу. mysql -u root -p use proftpd; insert into users values (NULL,'smit','passwd','1000','1000','/home/smit','/sbin/nologin'); insert into quotalimits values ('smit','user','false','hard','0','0','0','0','0','0'); Этими командами мы создали аккаунт для уже существующего пользователя в системе. Теперь перейдем к виртуальным пользователям. Файлы должны кому то пренадлежать. Это будет пользователь ftp. Смотрим uid gid: cat /etc/passwd | grep ftp ftp:x:1001:1001::/dev/null:/sbin/nologin Вносим данные в таблицу: mysql -u root -p use proftpd; insert into users values (NULL,'Test','12345','1012','1013','/home/ftp/test','/sbin/nologin'); Test, 12345,/home/ftp/test - это соотвественно логин пользователя пароль и директория для пользователя. Я сделал директорию /home/ftp/ куда будут помещатся все пользовательские директории. так же не забываем что новыми директориями должен владеть пользователь ftp. chown ftp:ftp /home/ftp/test Задаем квоту в 150 мегабайт. musql -u root -p use proftpd insert into quotalimits values ('test','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 это делает сам. ServerName "FTP server" ServerAdmin smit@smit.com 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 ~


AllowOverwrite on

AllowAll AllowAll

Если нужен анонимный доступ раскомментировать.

< 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

Фтп сервер настроен и готов к работе. Теперь переходим к настройке Web- сервера. В Debian для включения модуля используйте команду lighty-enable-mod В остальных системах : nano /etc/lighttpd/lighttpd.conf находим mod_userdir и раскоменчиваем его. В Debian открываем файл nano /etc/lighttpd/conf-enabled/10-userdir.conf userdir.path="" в конец дописываем userdir.basepath = "/home/ftp/" перезапускаем Web сервер /etc/init.d/lighttpd restart проверяем досутпность директории зайдя по ссылке http://localhost/~test Для остальных системы выполнить те же шаги только добавлять все данные в файл /etc/lighttpd/lighttpd.conf И что же мы в конце концов получаем? Получаем свой мини хостинг. Пользователь имеет доступ к файлам и получает персональную дерикторию в вебе. Можно просто хранить файлы можно сделать простой хостинг домашних страниц. Использованые материалы: http://www.opennet.ru http://forums.proftpd.org (C)Smit, easylinux.ru при перепечатке ссылка на данный блог обязательна :) Если у кого либюо есть дополнения или замечены ошибке буду рад выслушать :)

Размещено: 24.02.2008 20:53 Всего комментариев: 0
Автор: Smit Блог: Smit's blog
Тэги: lighttpd , mysql , proftpd , сервер

Комментарии:

Нет комментариев.

Пожалуйста войдите или зарегистрируйтесь чтобы оставлять комментарии.