?

Log in

Установка ProFTPD 1.3.0rc3 с поддержкой MySQL - Tutorial.Ru

> Свежие записи
> Архив
> Друзья
> Личная информация
> Tutorial.Ru

Март 16, 2006


Поделиться Next Entry
nmind
05:34 pm - Установка ProFTPD 1.3.0rc3 с поддержкой MySQL
Туториал: Установка ProFTPD 1.3.0rc3 с поддержкой MySQL

Автор: nmind . konstantin kalachev / http://tutorial.ru

Дата последней модификации: 2006.03.16

Используемые файлы:
- proftpd-1.3.0rc3.tar.gz

Дополнительные файлы:
- proftpd.conf
- ftp_manager.phpz

Полезные ресурсы:
- http://www.proftpd.org/
- http://www.lastditcheffort.org/~aah/proftpd/mod_sql/

Устанавливалось на:
Gentoo Linux 2.6.9-22.EL + MySQL 4.1.15-max

Ссылка на оригинал:
http://www.tutorial.ru/index.php/tutorial/11/

- Введение

ProFTPD на данный момент является одним из самых популярных ftp-серверов. Помимо простоты установки его можно настроить абсолютно для любых нужд. А благодаря встроенным модулям его можно приспособить под совсем нетривиальные задачи.

В этом туториале рассказывается как установить proftpd с его модулем mod_sql_mysql. При таком варианте установки proftpd будет обращаться к базе в mysql для того чтобы аутентифицировать пользователя.


У этого подхода есть свои плюсы и минусы. Основным плюсом является удобство управления пользовательскими параметрами. А основным минусом то, что ваш ftp полностью зависит от здоровья базы. Если mysql будет перенагружен или просто упадет, то пользователи не смогут залогиниться.

Еще одним плюсом подобного метода является отсутствие системных пользователей. Для того, чтобы завести ftp-пользователя вам не нужно будет создавать еще один системный аккаунт. А uid и gid ftp-пользователя будут задаваться в базе. Поэтому, когда возникнет необходимость сделать доступной папку "/www/mydomain.ru" для системного пользователя "vasya", достаточно будет узнать uid и gid системного пользователя vasya (id vasya) , после чего вписать эту информацию в mysql базу для нужного ftp-пользователя и изменить права на каталог /www/mydomain.ru (chown -R uid:gid /www/mydomain.ru).

Красным цветом обозначены параметры, которые очень желательно заменить на свои в целях безопасности или эстетики .)

- Установка

Добавляем пользователя proftpd под которым будет работать proftpd-демон


freebsd> pw groupadd proftpd freebsd> pw useradd proftpd -g proftpd -d /usr/local/proftpd -s /nonexistent linux> groupadd proftpd linux> adduser -g proftpd -M -d /usr/local/proftpd proftpd


Делаем папки, в которых будут храниться дистрибутив и исходники


mkdir /usr/local/distr mkdir /usr/local/src


Качаем и разархивируем ProFTPD


cd /usr/local/distr wget ftp://ftp.proftpd.org/distrib/source/proftpd-1.3.0rc3.tar.gz tar -zxvf proftpd-1.3.0rc3.tar.gz -C /usr/local/src/


Переходим в каталог с исходниками


cd /usr/local/src/proftpd-1.3.0rc3/


Начинаем компиляцию
Параметры configure скрипта будут работать для mysql установленного в папку /usr/local/mysql . proftpd должен увидеть каталоги include и lib в которых лежат библиотеки mysql.


install_user=proftpd install_group=proftpd ./configure \ --prefix=/usr/local/proftpd \ --mandir=/usr/local \ --with-modules=mod_sql:mod_sql_mysql \ --with-includes=/usr/local/mysql/include \ --with-libraries=/usr/local/mysql/lib make make install


- Конфигурация

В зависимости от того что именно вам нужно от ftp-сервера зависит его дальнейшая настройка. Я приведу пример простого конфигурационного файла, который работает и описывает какое-то минимальное количество полезных параметров. Для того, чтобы детальнее изучить возможности сервера ProFTPD можно посмотреть в каталог sample-configurations (/usr/local/src/proftpd-1.3.0rc3/sample-configurations) где представлены конфиги любой сложности. А в каталоге doc (/usr/local/src/proftpd-1.3.0rc3/doc) можно найти полную документацию и FAQ.
Но если вам не нужно ничего особенного, то можно расслабиться и использывать уже готовый конфиг с tutorial.ru

В качестве директории для инсталляции мы выбрали /usr/local/proftpd . Поэтому теперь там нужно сделать конфигурационный файл для proftpd


cd /usr/local/proftpd/etc


Переименовываем уже существующий proftpd.conf


mv proftpd.conf original.proftpd.conf


Скачиваем готовый конфиг


wget http://tutorial.ru/files/proftpd/proftpd.conf


Это то, что находится в файле proftpd.conf


# sample configuration from http://tutorial.ru for proftpd with mod_sql ServerName "ProFTPD Ftp Server" ServerType standalone DefaultServer on DeferWelcome off Port 21 Umask 002 TimeoutLogin 120 TimeoutIdle 600 TimeoutNoTransfer 900 TimeoutStalled 3600 User proftpd Group proftpd MaxInstances 50 MaxClientsPerHost 5 AllowRetrieveRestart on AllowStoreRestart on AllowOverwrite on AllowOverride off RootLogin off IdentLookups off UseReverseDNS off DenyFilter \*.*/ TimesGMT off DefaultRoot ~ RLimitCPU 600 600 RLimitMemory 64M 64M RLimitOpenFiles 1024 1024 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" #SystemLog /usr/local/proftpd/var/proftpd.log #TransferLog /var/log/xferlog ExtendedLog /usr/local/proftpd/var/proftpd_access.log WRITE,READ write ExtendedLog /usr/local/proftpd/var/proftpd_auth.log AUTH auth #ExtendedLog /usr/local/proftpd/var/proftpd_paranoid.log ALL default <Global> SQLConnectInfo proftpd@localhost proftpd 584jd84 SQLAuthTypes Crypt SQLUserInfo users username password uid gid homedir NULL RequireValidShell off SQLGroupInfo groups groupname gid members SQLAuthenticate users* # SQLLogFile /usr/local/proftpd/var/proftpd_sql.log SQLNamedQuery getcount SELECT "count, username from users where username='%u'" SQLNamedQuery updatecount UPDATE "count=count+1 WHERE username='%u'" users SQLShowInfo PASS "230" "You've logged on %{getcount} times, %u" SQLLog PASS updatecount </Global> #<Anonymous /home/www/ftp> # User ftp # Group ftp # # UserAlias anonymous ftp # # RequireValidShell no # # MaxClients 10 # # # We want 'welcome.msg' displayed at login, and '.message' displayed # # in each newly chdired directory. # DisplayLogin welcome.msg # DisplayFirstChdir .message # # <Limit WRITE> # DenyAll # </Limit> # # <Directory *> # <Limit WRITE> # DenyAll # </Limit> # </Directory> # # <Directory incoming> # <Limit READ WRITE> # DenyAll # </Limit> # # <Limit STOR> # AllowAll # </Limit> # </Directory> #</Anonymous>


Некоторые директивы в этом конфиге закомментированы, потому что их не так часто используют. К примеру анонимный доступ по ftp или лог файлы. По умолчанию proftpd будет посылать в syslogd свой xferlog и в файле /var/log/xferlog будет появляться информация о соединениях и изменениях, совершаемых через proftpd. Иногда это бывает очень полезно, особенно когда кто-нибудь, узнав пароль от чужого ftp-аккаунта нахулиганит. Всегда можно посмотреть ip адрес с которого заходил негодяй и узнать какие именно действия он совершал.
Если же такого файла не создается можно раскомментировать строку TransferLog в конфиге.

Еще немного о самых интересных параметрах конфигурации.

- ServerName - Тут вы можете написать свое собственное приветствие. Что-то типа "ftp server on mydomain.ru"
- MaxInstances - Максимальное количество соединений. Полезно против DoS атак ну и вообще чтобы как-нибудь ограничить разумное количество соединений к вашему серверу.
- MaxClientsPerHost - Максимальное количество соединений с одного хоста.
- AllowRetrieveRestart - Разрешить продолжать скачивать файл с какого-то определенного места.
- AllowStoreRestart - Разрешить закачивать файл с определенного места.
- DefaultRoot - Выставлена равной "~" . Это значит, что пользователь не сможет никуда выйти из своего домашнего каталога.
- AllowOverride - Запрещает использование файла .ftpaccess
- AllowOverwrite - Разрешить перезаписывание файлов.
- SQLConnectInfo - тут описываются все параметры для входа в mysql базу для proftpd. Я поставил пароль 584jd84. Очень советую поменять его на любой другой.
- SQLAuthTypes - Имеет значение "Crypt Plaintext". Crypt это функция ENCRYPT() в mysql . Раньше я использовал Backend и функцию password(), но в последних версиях mysql она изменилась и можно запутаться.
- RequireValidShell - Этот параметр говорит proftpd, что для аутентификации пользователю не нужно иметь shell-а
- SQLLogFile - Закомментирован. Он заставляет писать все, что делает модуль mod_sql в файл. Нужно это пожалуй только для отладки.

- Анонимный ftp-доступ

Для того, чтобы добавить анонимный вход по ftp нужно раскомментировать все поле <Anonymous /home/www/ftp> ... </Anonymous> , создать папку /home/www/ftp и выдать ей нужные права.
Анонимный вход будет работать под системным пользователем ftp. На всех unix\linux-подобных системах он существует с момента установки.

Создаем папку и выдаем ей права


mkdir -p /home/www/ftp/incoming chown -R ftp:ftp /home/www/ftp


- Создание SQL базы

Надеюсь, вы знаете root пароль от вашего mysql-сервера. Эти команды сделают базу proftpd и дадут пользователю proftpd к ней доступ по паролю 584jd84 . Конечно же пароль лучше поставить свой...

Скачиваем sql команды с tutorial.ru


cd /tmp wget http://tutorial.ru/files/proftpd/proftpd.mod_sql_mysql.sql


На этом этапе можно отредактировать файл proftpd.mod_sql_mysql.sql , исправив в нем пароль на свой: IDENTIFIED BY "...."


mysql -uroot -ppassword < /tmp/proftpd.mod_sql_mysql.sql rm -f /tmp/proftpd.mod_sql_mysql.sql


А это то, что находится в файле proftpd.mod_sql_mysql.sql


CREATE DATABASE proftpd; USE proftpd; CREATE TABLE `groups` ( `groupname` varchar(30) NOT NULL default '', `gid` int(11) NOT NULL default '0', `members` varchar(255) default NULL ) TYPE=MyISAM; CREATE TABLE `users` ( `username` varchar(30) NOT NULL default '', `password` varchar(30) NOT NULL default '', `uid` int(11) default NULL, `gid` int(11) default NULL, `homedir` varchar(255) default NULL, `shell` varchar(255) default NULL, `count` int(11) NOT NULL default '0', UNIQUE KEY `username` (`username`) ) TYPE=MyISAM; GRANT ALL ON proftpd.* TO proftpd@localhost IDENTIFIED BY "584jd84"; FLUSH PRIVILEGES;


Для проверки нового mysql-пользователя и базы можно сделать тестового ftp-пользователя в базе, а потом сразу удалить его.


mysql -uproftpd -p584jd84 proftpd mysql> INSERT INTO users SET username='testuser', password=ENCRYPT('testuser'), homedir='/none', uid=5010, gid=5010; mysql> SELECT * FROM users; mysql> DELETE FROM users WHERE username='testuser';


- Автозагрузка

Предполагается, что вы сможете по этому туториалу установить proftpd на любой unix/linux-подобной операционной системе. Но в стандартной поставке proftpd есть стартовые скрипты только для linux и suse. Если интересно, лежат они в "contrib/dist/rpm".

Поэтому я сделал свой скрипт, который наверняка подойдет для любой системы и рассчитан на то, что вы поставили proftpd в /usr/local/proftpd


freebsd> cd /usr/local/etc/rc.d linux> cd /etc/init.d wget http://tutorial.ru/files/proftpd/proftpd.sh freebsd> chmod 100 /usr/local/etc/rc.d/proftpd.sh linux> chmod 100 /etc/init.d/proftpd.sh linux> ln -s /etc/init.d/proftpd.sh /etc/rc2.d/S98proftpd linux> ln -s /etc/init.d/proftpd.sh /etc/rc3.d/S98proftpd linux> ln -s /etc/init.d/proftpd.sh /etc/rc4.d/S98proftpd linux> ln -s /etc/init.d/proftpd.sh /etc/rc5.d/S98proftpd


Запускаем демона


linux> /etc/init.d/proftpd.sh start freebsd> /usr/local/etc/rc.d/proftpd.sh start ps aux | grep proftpd


В теории, все должно работать .)

- Добавление пользователя

Приведу пример добавления пользователя. Например, если нужно добавить ftp-пользователя со следующими параметрами

username: some
password: j9ek9
homedir: /www/some.ru
uid: 5012
gid: 5012


mysql -uproftpd -p584jd84 proftpd -e \ "INSERT INTO users SET username='some',password=ENCRYPT('j9ek9'),\ homedir='/www/some.ru',shell='/dev/null',uid='5012',gid='5012',count='0'" mkdir /www/some.ru chown 5012:5012 /www/some.ru


- Фтп менеджер

Для того, чтобы сэкономить себе и вам время на добавление и изменение пользователей руками я написал скрипт, который может добавлять, удалять, менять пароли и показывает информацию по ftp-аккаунтам.

Он написан на php и для его настройки нужно поменять буквально пять параметров. В нем много комментариев на русском для тех, кто захочет его изменить или просто разобраться что к чему.


mkdir /usr/local/tools cd /usr/local/tools wget http://www.tutorial.ru/files/proftpd/ftp_manager.phpz mv ftp_manager.phpz ftp_manager.php chmod 700 ftp_manager.php


Все параметры находятся в начале скрипта. Поменять нужно доступ к базе и имя ftp-хоста.
Вот часть кода, которая за них отвечает:
$mysql_host = 'localhost';
$mysql_database = 'proftpd';
$mysql_user = 'proftpd';
$mysql_password = '584jd84';
$ftp_host_name = '_ENTER_YOUR_FTP_HOST_NAME_HERE_';


Вот несколько примеров по его использованию.

Вывести список всех ftp-аккаунтов


./ftp_manager.php list


Добавить ftp-аккаунт c логином some.ru , паролем di48fd , который будет находится в директории /home/www/some.ru


./ftp_manager.php add some.ru di48fd /home/www/some.ru


Изменить пароль для ftp-аккаунта с логином some.ru на 3jf8sfd8


./ftp_manager.php passwd some.ru 3jf8sfd8


Вывести информацию по ftp-аккаунту с логином some.ru
Тут уже не будут выводится параметры password и ftp-link, потому что скрипт не знает пароля, он храниться в зашифрованном виде


./ftp_manager.php info some.ru


Удалить ftp-аккаунт с логином some.ru
Скрипт удалит информацию только из базы и предложит вам сделать "rm -rf /home/www/some.ru" руками в целях безопасности


./ftp_manager.php delete some.ru



-------------
(с) tutorial.ru / дядьки онлайн

(3 комментария | Оставить комментарий)

Comments:


From:pkijsteix
Date:Февраль 17, 2013 06:01 am
(Link)
real locals looking for hookups. Go Here dld.bz/chwZM

> Go to Top
LiveJournal.com