RSS Feed

PureFTPd + MySQL в Debian

0

Февраль 1, 2012 by admin

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

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

В статье используется Debian Etch (Debian 4.0). У вас уже должна быть установлена базовая система Debian Etch, как это описано в первых шести главах этого учебника.

Эта статья является практической и не содержит теоретических отступлений.

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

Предварительные комментарии

В этой статье я использую имя хоста server1.example.com и IP адресом 192.168.0.100. Эти настройки у вас могут быть другими, поэтому вам надо будет заменить их на соответствующие.

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

Всё можно установить одной командой:

apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2

Создайте пароль для MySQL пользователя root (замените yourrootsqlpassword на пароль, который хотите использовать):

mysqladmin -u root password yourrootsqlpassword

Затем с помощью следующей команды проверьте какой адрес слушает MySQL.

netstat -tap | grep mysql

Если вывод выглядит примерно так:

tcp        0      0 localhost.localdo:mysql *:*                    LISTEN    2713/mysqld

то это означает, что MySQL слушает только localhost.localdomain, и вы можете безопасно использовать пароль, установленный ранее. Но если вывод выглядит так:

tcp        0      0 *:mysql *:*                     LISTEN     2713/mysqld

то вам нужно установить пароль MySQL для вашего имени хоста, иначе любой сможет получить доступ к базе данных и изменить данные:

mysqladmin -h server1.example.com -u root password yourrootsqlpassword

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

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

apt-get install pure-ftpd-mysql

Затем создаем 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.

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 на пароль, который вы хотите использовать для пользователя pureftpd. Затем создадим таблицу, которая будет нам нужна:

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;

Как вы возможно заметили, командой quit; мы завершаем работу с MySQL.

Кстати, (я предполагаю, что имя вашего ftp сервера server1.example.com) вы можете получить доступ используя phpMyAdmin по адресу http://server1.example.com/phpmyadmin/ (вы также можете использовать IP адрес вместо server1.example.com) и войти как пользователь 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

vi /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:

vi /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:

vi /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

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

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

mysql -u root -p

USE pureftpd;

Теперь создадим пользователя exampleuser со статусом 1 (что означает, что его ftp аккаунт — активный), пароль secret (который будет сохранен в заштфрованном виде, используя MySQL функцию MD5), UID и GID 2001 (используйте userid и groupid пользователя/группы, которых вы создали в конце 2 части!), домашний каталог /home/www.example.com, лимит входяшей/исходящей пропускной способности 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.example.com’, ’100′, ’100′, », ’*', ’50′, ’0′);

quit;

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

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

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

ls -l /home

вы должны увидеть, что директория /home/www.example.com (домашний каталог пользователя 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.example.com

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

Для большинства людей легче всего использовать графическую оболочку для MySQL; однако так же можете использовать phpMyAdmin (в этом примере по адресуhttp://server1.example.com/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 — не ограничено.

Анонимный 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.

Ссылки

 

 

 


0 comment »

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>