Виртуальный хостинг с PureFTPd и MySQL на Ubuntu 10.10

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

UbuntuЭта документация описывает, как установить PureFTPd сервере, который использует виртуальных пользователей из базы данных MySQL вместо реальных пользователей системы. Это гораздо более удобно, быстрее и позволяет иметь тысячи FTP пользователей на одной машине. В дополнение к этому, в этой установке я продемонстрирую использование квот и пределы полосы пропускания прием / отдача. Пароль будет хранится в зашифрованном виде строкой MD5 в базе данных.

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

Этот учебник основан на Ubuntu 10.10. Вы уже должны были создать основу системы Ubuntu server 10.10, как описано в первых восьми главах материала: идеальный сервер ISPConfig 2 на Ubuntu server 10.10.

Этот материал предназначен в качестве практического руководства, она не охватывает теоретические основы. Так как они рассматриваются во многих других документах Интернета. Это не единственный способ создания такой системы. Есть много способов достижения этой цели, но это, как один из них.

Предварительные замечания

В данной статье я использую имя хоста ubuntu с IP-адреса 192.168.1.118. Эти параметры могут отличаться в Вашем случае, поэтому Вам придется заменить их в случае необходимости.

Убедитесь, что вы вошли в систему как суперпользователь (root):

  • sudo su

Данная команда используется для того что бы стать администратором так как, мы должны выполнить все шаги из этого учебника, как root пользователь.

Установка MySQL и PhpMyAdmin

Все это может быть установлено одной командой:

  • aptitude install mysql-server mysql-client phpmyadmin apache2

Вам будут предложено ответить на следующие вопросы:

Новый пароль для MySQL "root" пользователя: - root пароль на SQL
Повторите пароль для MySQL "корень" Пользователь: - root пароль на SQL
Веб-сервер для перенастройки автоматически: - apache2
Настройка базы данных для PhpMyAdmin с dbconfig-common? - нет

Установка PureFTPd с поддержкой MySQL

Для Ubuntu 10.10 имеется пакет уже предварительно настроенный pure-ftpd-mysql. Установить это так:

  • aptitude install pure-ftpd-mysql

Затем мы создаем FTP группы ( ftpgroup ) и пользователей ( ftpuser ), что бы все наши виртуальные пользователи будут сопоставлены. Заменить группы и идентификаторы с числом 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 базы данных:

  • mysql -u root -p
  • CREATE DATABASE pureftpd;
  • GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'ftpdpass';
  • GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost.localdomain' IDENTIFIED BY 'ftpdpass';
  • FLUSH PRIVILEGES;

Заменим строку ftpdpass ни любой пароль, который Вы хотите использовать для пользователя MySQL PureFTPd . Тем не менее в оболочке MySQL, мы создаем базу данных таблицы нужную нам (да, есть только одна таблица!):

  • USE 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;
  • quit;

Между прочем, (предпологая, что имя хоста Вашей системы / сервера FTP является ubuntu ) Вы можете получить доступ к PhpMyAdmin перейдя по ссылке в интернет обозревателе персонального компьютера по ссылке http://ubuntu/phpmyadmin/ (вы можете также использовать IP адрес вместо ubuntu ) в браузер и войдите в систему как пользователь PureFTPd . Тогда вы сможете посмотреть на базу данных http://IP/phpmyadmin/. Позже вы сможете использовать 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 с реальным паролем для пользователя MySQL PureFTPd в строке MYSQLPassword! Пожалуйста, обратите внимание, что мы используем метод md5 MYSQLCrypt, который означает, что мы будет хранить пользователей и пароли в базе данных как строки MD5, которая является гораздо более безопасным, чем при использовании обычного текстового пароля!

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

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

Это позволит сделать PureFTPd изолированной для каждого виртуального пользователя в его домашнем каталоге, чтобы он нельзя было просматривать каталоги и файлы, находящиеся вне его каталога. Также создадим файл /etc/pure-ftpd/conf/CreateHomeDir что опять-таки просто содержит строку yes:

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

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

Наконец создаем файл /etc/pure-ftpd/conf/DontResolve что опять-таки просто содержит строки yes:

  • echo "yes" > /etc/pure-ftpd/conf/DontResolve

Это позволит PureFTPd не искать имена хостов, которые могут значительно ускорить процесс соединения и сократить использование пропускной способности.

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

  • /etc/init.d/pure-ftpd-mysql restart

Проверка MySQL

Для проверки перейдем в интернет обозревателе персонального компьютера по ссылке http://ubuntu/phpmyadmin/ (вы можете также использовать IP адрес вместо ubuntu ) в браузер и войдите в систему как пользователь PureFTPd . Тогда вы сможете посмотреть на базу данных http://IP/phpmyadmin/.

Проверка настроек MySQL для PureFTPd

Позже вы сможете использовать PhpMyAdmin для администрирования вашего PureFTPd сервера.

Проверка настроек MySQL для PureFTPd


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

Для заполнения базы данных Вы можете использовать оболочку MySQL:

  • mysql -u root -p
  • USE pureftpd;

Теперь мы создадим пользователя exampleuser со статусом 1 (что означает его FTP счет активный), secret пароль (который будет храниться в зашифрованном виде с использованием MD5 функции в MySQL), UID и GID 2001 (используется идентификатор пользователя и GROUPID на пользователя / группы, созданной в конце второго шага), каталог /home/www.example.com , выгрузки и загрузки с пропускной способностью 100 КБ/сек. (Килобайт в секунду), и квота 50 Мб:

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

Теперь откройте ваш FTP-клиент программы на вашем рабочем месте (что-то вроде FileZilla, WS_FTP, SmartFTP или gFTP) и попытаться подключиться. Как вы используете имя хоста ubuntu (или IP-адрес из системы), имя пользователя является exampleuser и пароль secret.

Подключение FileZilla к PureFTPd серверу

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

Теперь, если вы выполните:

  • ls -l /home

Вы должны увидеть, что директория /home/www.example.com была автоматически создана, и она принадлежит ftpuser и ftpgroup (пользователя / группы мы создали в конце второго шага):

root@ubuntu:/home/llirikks# ls -l /home
итого 8
drwxr-xr-x 3 llirikks llirikks 4096 2011-01-24 20:48 llirikks
drwxr-xr-x 2 ftpuser  ftpgroup 4096 2011-01-24 21:22 www.example.com
root@ubuntu:/home/llirikks#

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

Для большинства людей легче, пользоваться графическим интерфейсом MySQL, поэтому Вы можете также использовать PhpMyAdmin (в данном примере под http://ubuntu/phpmyadmin/ или ) для администрирования базы данных PureFTPd.

Проверка настроек MySQL для PureFTPd

Всякий раз, когда Вы хотите создать нового пользователя, Вы должны создать запись в таблице FTPD. Здесь я объясню столбцы этой таблицы:

FTPD таблица

  • User : имя виртуального пользователя PureFTPd (например exampleuser ).
  • status : 0 или 1. 0 означает, что учетная запись отключена, пользователь не может Войти.
  • Password : пароль виртуального пользователя. Убедитесь, что вы используете в MySQL функция MD5, чтобы сохранить пароль зашифрован как строки MD5:
  • Uid : идентификатор пользователя FTP-пользователя, созданной в конце шага два (например, 2001 ).
  • Gid : GROUPID из FTP группы, созданной в конце шага два (например, 2001 ).
  • Dir : домашний каталог виртуального пользователя PureFTPd (например, / главная / www.example.com ). Если она не существует, он будет создан, когда новый пользователь регистрируется в первый раз через FTP. Виртуального пользователя будет тюрьму в этот домашний каталог, т. е. он не может получить доступ к другим директориям за пределами его домашний каталог.
  • ULBandwidth : Добавлено пропускную способность виртуального пользователя в КБ / сек. (Килобайт в секунду). 0 означает неограниченное.
  • DLBandwidth : Скачать пропускную способность виртуального пользователя в КБ / сек. (Килобайт в секунду). 0 означает неограниченное.
  • comment : Вы можете ввести любые комментарии здесь (например, для внутренней администрации) здесь. Обычно вы оставите это поле пустым.
  • ipaccess : введите IP-адреса здесь, которым разрешено подключаться к этой учетной записи FTP. * означает любой IP-адреса допускается, чтобы связаться.
  • QuotaSize : складские помещения в МБ (не КБ, как и в ULBandwidth и DLBandwidth !) виртуальный пользователь имеет право использовать на сервере FTP. 0 означает неограниченное.
  • QuotaFiles : количество файлов, виртуального пользователь может сохранить на сервере FTP. 0 означает неограниченное.

Пояснение строк таблицы PureFTPd

Аноним FTP

Если Вы хотите создать учетную запись анонимного FTP (внимание, любой пользователь FTP может войти без пароля), Вы можете сделать это следующим образом:

Сначала создайте пользователей FTP (с домашним каталогом /home/ftp ) и группу FTP :

  • groupadd ftp
  • useradd -s /bin/false -d /home/ftp -m -c "anonymous ftp" -g ftp ftp

Затем создайте файл /etc/pure-ftpd/conf/NoAnonymous, который содержит строку no :

  • echo "no" > /etc/pure-ftpd/conf/NoAnonymous

В этой конфигурации, PureFTPd позволит анонимных пользователей.

Перезагрузите PureFTPd:

  • /etc/init.d/pure-ftpd-mysql restart

Затем мы создаем каталог /home/ftp/incoming, который позволят анонимным пользователям загружать файлы. Мы дадим каталогу /home/ftp/incoming разрешения 311, так что пользователи могут загружать, но не видят или скачивают любые файлы в этом каталоге. /home/ftp каталог будет иметь права доступа 555 , который позволяет видеть и загружать файлы:

  • cd /home/ftp
  • mkdir incoming
  • chown ftp:nogroup incoming/
  • chmod 311 incoming/
  • cd ../
  • chmod 555 ftp/

Теперь анонимные пользователи могут Логин, и они могут скачивать файлы из /home/ftp , но закачки ограничены /home/ftp/incoming (и как только файл будет загружен в /home/ftp/incoming, он не может быть прочитан, для загрузки, администратор сервера должен переместить его в /home/ftp, чтобы сделать его доступным для других).