Счетчик

Поисковый анализ сайта
яндекс.ћетрика
Cервер и сайт запущен 2011.02.01 на Debian

Всем доброго времени суток друзья, сегодня я Вам расскажу как поднят PureFTPd и MySQL вертуальные пользователи.

Это статья описывает как установить PureFTPd сервер, который использует виртуальных пользователей из базы данных MySQL вместо реальных пользователей системы. Это позволит иметь тысячи пользователей ftp на одной машине. Пароли будут записаны в виде зашифрованных MD5 строк в базе данных. 

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

Установка MySQL и phpMyAdmin
Эти статьи есть уже по адресу mysql и phpmyadmin

Установка PureFTPd с поддержкой MySQL
Для Debian доступен сконфигурированный пакет pure-ftpd-mysql. Установить его можно так:

apt-get install pure-ftpd-mysql libmysqlclient15-dev


Затем создаем ftp группу (ftpgroup) и пользователя (ftpuser), на которых будут ссылаться все наши виртуальные пользователи. Замените group- и userid 2001 на номер, который свободен в вашей системе:

groupadd -g 2001 ftpgroup
useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser



Создание базы данных MySQL для PureFTPd
Сейчас мы создадим базу данных, которую назовем pureftpd и MySQL пользователя pureftpd, которого демон PureFTPd будет использовать для подключения к базе данных pureftpd.
В phpmyadmin 

CREATE DATABASE pureftpd;
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'pass';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;


Замените строку ftpdpass на пароль, который вы хотите использовать для пользователя pureftpd. Затем создадим таблицу, которая будет нам нужна:

CREATE TABLE ftpd (
User varchar(16) NOT NULL default '',
status enum('0','1') NOT NULL default '0',
Password varchar(64) NOT NULL default '',
Uid varchar(11) NOT NULL default '-1',
Gid varchar(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default '',
ULBandwidth smallint(5) NOT NULL default '0',
DLBandwidth smallint(5) NOT NULL default '0',
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default '*',
QuotaSize smallint(5) NOT NULL default '0',
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;


Кстати, (я предполагаю, что имя вашего ftp сервера server1.soft-komi.ru) вы можете получить доступ используя phpMyAdmin по адресу http://server1.soft-komi.ru/phpmyadmin/ (вы также можете использовать IP адрес вместо server1.soft-komi.ru) и войти как пользователь pureftpd. После этого вы можете посмотреть на базу данных. Позже вы сможете использовать phpMyAdmin для администрирования вашего PureFTPd сервера.

Конфигурация PureFTPd
Отредактируйте /etc/pure-ftpd/db/mysql.conf. Это делается примерно так:

cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
cat /dev/null > /etc/pure-ftpd/db/mysql.conf
nano /etc/pure-ftpd/db/mysql.conf



MYSQLSocket      /var/run/mysqld/mysqld.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   ftpdpass
MYSQLDatabase   pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() - md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")



Убедитесь, что заменили ftpdpass настоящим паролем пользователя pureftpd в строке MYSQLPassword!! Убедитесь, что используете md5 как MYSQLCrypt метод, что означает, что мы запоминаем пароли пользователей как MD5 строки, что гораздо безопаснее использования обычного текста! 

Затем создайте файл /etc/pure-ftpd/conf/ChrootEveryone, содержащий строчку yes:

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone


Это заставит PureFTPd делать chroot для каждого пользователя в его домашний каталог и он не сможет простматривать файлы и папке вне домашнего каталога. 

Также создайте файл /etc/pure-ftpd/conf/CreateHomeDir, также содержащий строку yes:

echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir



Это заставит PureFTPd создавать домашний каталог пользователя если его не существует. 

Теперь нам надо сконфигурировать PureFTPd как самостоятельный демон (пока он конторолируется inetd). Чтобы это сделать, мы откроем /etc/default/pure-ftpd-common и изменим значение параметра STANDALONE_OR_INETD на standalone:

nano /etc/default/pure-ftpd-common



# Configuration for pure-ftpd
# (this file is sourced by /bin/sh, edit accordingly)
# STANDALONE_OR_INETD
# valid values are "standalone" and "inetd".
# Any change here overrides the setting in debconf.
STANDALONE_OR_INETD=standalone
# VIRTUALCHROOT:
# whether to use binary with virtualchroot support
# valid values are "true" or "false"
# Any change here overrides the setting in debconf.
VIRTUALCHROOT=false
# UPLOADSCRIPT: if this is set and the daemon is run in standalone mode,
# pure-uploadscript will also be run to spawn the program given below
# for handling uploads. see /usr/share/doc/pure-ftpd/README.gz or
# pure-uploadscript(8)
# example: UPLOADSCRIPT=/usr/local/sbin/uploadhandler.pl
UPLOADSCRIPT=
# if set, pure-uploadscript will spawn $UPLOADSCRIPT running as the
# given uid and gid
UPLOADUID=
UPLOADGID=



Затем изменим /etc/inetd.conf, замментировав строку ftp: (Если таково надо сделать)

nano /etc/inetd.conf

....
#ftp     stream  tcp     nowait  root    /usr/sbin/tcpd /usr/sbin/pure-ftpd-wrapper
....



После этого перезапустим Inetd и PureFTPd:

/etc/init.d/openbsd-inetd restart
/etc/init.d/pure-ftpd-mysql restart



Заполнение базы данных и тесты

Для заполнения базы данных вы можете использовать phpmyadmin:
Теперь создадим пользователя test1 со статусом 1 (что означает, что его ftp аккаунт - активный), пароль secret (который будет сохранен в заштфрованном виде, используя MySQL функцию MD5), UID и GID 2001 (используйте userid и groupid пользователя/группы, которых вы создали в конце 2 части!), домашний каталог /home/www.soft-komi.ru, лимит входяшей/исходящей пропускной способности 100 KБ/с (килобайт в секунду), и квоту в 50 MБ:

INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('exampleuser', '1', MD5('secret'), '2001', '2001', '/home/www.soft-komi.ru', '100', '100', '', '*', '50', '0');



Теперь откройте FTP клиент на своей рабочей станцие (что-нибудь вроде WS_FTP или SmartFTP если у вас Windows или gFTP в Linux) и попробуйте подключиться. В качестве имени используйте server1.soft-komi.ru (или соответствующий IP адрес), имя пользователя exampleuser и пароль secret. 

Если вам удалось подключиться - поздравляю! Если нет, то что-то пошло не так. 
Теперь, если вы выполните

ls -l /home


вы должны увидеть, что директория /home/www.soft-komi.ru (домашний каталог пользователя exampleuser) была автоматически создана, и принадлежит ftpuser и ftpgroup (Пользователь/группа, которых мы создали в конце 2 части):

server1:/etc/default# ls -l /home
total 8
drwxr-xr-x 2 administrator administrator 4096 2007-04-23 14:25 administrator
drwxr-xr-x 2 ftpuser       ftpgroup      4096 2007-04-23 17:26 www.soft-komi.ru



Администрирование базы данных 

Для большинства людей легче всего использовать графическую оболочку для MySQL; однако так же можете использовать phpMyAdmin (в этом примере по адресу http://server1.sysadmin-komi.ru/phpmyadmin/) для администрирования базы данных pureftpd. 
Когда вы хотите создать нового пользователя, вам надо создать запись в таблице ftpd. Далее будут описаны все строки этой таблицы:
Таблица ftpd:

User: Имя виртуального пользователя PureFTPd. 
status: 0 или 1. 0 означает, что аккаунт отключен и пользователь не может подключится. 
Password: Пароль виртуального пользователя. 
UID: userid пользователя, который был создан во 2 части. 
GID: groupid пользователя, который был создан во 2 части. 
Dir: Домашний каталог виртуального пользователя PureFTPd. 
ULBandwidth: Скорость закачки для вирткального пользователя и КБ/с. 0 - не ограничена. 
DLBandwidth: Скорость скачки для вирткального пользователя и КБ/с. 0 - не ограничена. 
comment: Комментарии. Поле можно оставить пустым. 
ipaccess: IP адрес, с которого подключаться с данным аккаунтом. 
QuotaSize: Квота в МБ. 
QuotaFiles: Количество файлов, которое можно сохранять.0 - не ограничено.



Вот и все, теперь можно гибко и просто управлять своим сервером. Будут вопросы спрашивайте! :D

Добавить комментарий


Защитный код
Обновить