Hetzner - DokuWiki

PureFTPd/ru

Inhaltsverzeichnis

Pureftpd с mysql и поддержкой TLS

Изменения

  • 11.02.2010 Дополнения к Debian Lenny
  • 23.07.2008 Поправки к установке Etch, учитывающие умолчания Debian

Автор: Jan Scholten

devnull [at] rootsvr [dot] de

Авторские права и лицензия

Some Rights Reserved.gif

Данный контент защищён лицензией Creative Commons License.

Отзывы

Отзывы о документе приветствуются. Просто отправьте email автору.

Введение

Почти каждому оператору сервера (по крайней мере, у которого есть клиенты) нужен или желателен FTP сервер.
Передача данных по FTP обычно не шифруется и даже пароли передаются незашифрованными. Чтобы обойти эту потенциальную уязвимость, можно использовать FTP сервер, который шифрует хотя бы канал для передачи паролей.

В данном «Howto» я бы хотел рассказать об установке Pure-FTPd Pure-FTPd. Настолько, насколько это возможно, я держу в фокусе пакеты Debian, которые, на мой взгляд, предлагают гибкие индивидуальные параметры.

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

Я пользуюсь конфигурацией suExec + FastCGI, что означает, каждый домен управляется одним пользователем.

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

Установка

Устанавливаем пакет «pure-ftpd-mysql». Настройка происходит с помощью индивидуальных файлов в /etc/pure-ftpd/conf. Название каждого файла отражает параметр, настройки которого он представляет. В содержимом файла представлены необходимые значения.

cerberus# apt-get install pure-ftpd-mysql

Создадим следующие файлы в /etc/pure-ftpd/conf:

cd /etc/pure-ftpd/conf
echo yes > ChrootEveryone
echo yes > CreateHomeDir
echo 50 > MaxClientsNumber
echo 5  > MaxClientsPerIP
echo 95 > MaxDiskUsage
echo 1 > TLS
echo 117 007 > Umask
echo no > UnixAuthentication
echo no > PAMAuthentication

умолчания в Debian (не требуют изменений):

echo clf:/var/log/pure-ftpd/transfer.log > AltLog
echo 1000 > MinUID
echo /etc/pure-ftpd/db/mysql.conf > MySQLConfigFile
echo yes > NoAnonymous
echo /etc/pure-ftpd/pureftpd.pdb > PureDB

Это создаёт домашние директории, которые на самом деле ещё не существуют. Они ограничивают своего пользователя его директорией, разрешают 50 параллельных подключений, но не более 5 на IP-адрес, с минимальным значением gid в 1000 (по крайней мере с suExec Apache/fcgi, в противном случае нужно установить MinUID в значение 33 (стандарт для www-data аккаунта в Debian). Анонимная регистрация запрещена, также как и Unix авторизация, вместо этого авторизуются пользователи из базы данных. Параметр MaxDiskUsage предотвращает заполнение диска по FTP на более, чем 95%.

pureftpd-mysql

Мы редактируем данные для нашей базы данных в файле /etc/pure-ftpd/db/mysql.conf.

vi /etc/pure-ftpd/db/mysql.conf
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLSocket     /var/run/mysqld/mysqld.sock
MYSQLUser       pureftpd-user
MYSQLPassword   DasistunserPW!
MYSQLDatabase   pureftpd
MYSQLCrypt      crypt
MYSQLGetPW      SELECT Password FROM users WHERE User="\L"
MYSQLGetUID     SELECT Uid FROM users WHERE User="\L"
MYSQLGetGID     SELECT Gid FROM users WHERE User="\L"
MYSQLGetDir     SELECT Dir FROM users WHERE User="\L"
MySQLGetQTAFS   SELECT QuotaFiles FROM users WHERE User="\L"
MySQLGetQTASZ   SELECT QuotaSize FROM users WHERE User="\L"
MySQLGetBandwidthUL SELECT ULBandwidth FROM users WHERE User="\L"
MySQLGetBandwidthDL SELECT DLBandwidth FROM users WHERE User="\L"

Пользователи Mysql и структура таблицы

Создаём пользователя и базу данных в mysql сервере:

Создание пользователей Mysql

mysql -u root -p
CREATE DATABASE pureftpd;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
   ON pureftpd.* TO 'pureftpd-user'@'localhost'
   IDENTIFIED BY 'DasistunserPW!';
FLUSH PRIVILEGES;
quit;

Структура таблицы

USE pureftpd;
CREATE TABLE users (
User varchar(16) NOT NULL default ,
Password varchar(64) NOT NULL default ,
Uid int(11) NOT NULL default '-1',
Gid int(11) NOT NULL default '-1',
Dir varchar(128) NOT NULL default ,
QuotaFiles int(11) NOT NULL default '10000',
QuotaSize int(11) NOT NULL default '1000',
ULBandwidth int(11) NOT NULL default '500',
DLBandwidth int(11) NOT NULL default '500',
PRIMARY KEY  (User)
)
FLUSH PRIVILEGES;
quit;

Тест

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

mysql -u pureftpd-user -p pureftpd
DasistunserPW!
select * from users;

Безопасность

Затем, убедитесь, что файлы открыты для чтения только пользователю root, так как пароли баз данных находятся в этих файлах.

chmod 600 /etc/pure-ftpd/db/mysql.conf
chown root:root /etc/pure-ftpd/db/mysql.conf

Установка SSL сертификата для TLS

SSL сертификат должен находиться в /etc/ssl/private/pure-ftpd.pem, Если у вас уже есть сертификат для Apache, его можно просто скопировать и использовать. Если вы желаете самостоятельно его установить, то выполните следующее:

mkdir -p /etc/ssl/private/
openssl req -x509 -nodes -newkey rsa:1024 -keyout \
/etc/ssl/private/pure-ftpd.pem \
-out /etc/ssl/private/pure-ftpd.pem
chmod 600 /etc/ssl/private/*.pem

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

Редактирование с помощью phpmyadmin или с помощью собственного скрипта.

Зарегистрируйтесь в PhpMyAdmin как пользователь pureftpd, и добавьте новые строки в таблицу пользователей:

Username
Password('TheUserPassword')  (в выпадающем меню выберите «Encrypt»)
UID/GID     UID/GID  учётной записи. Для «простых« установок —33 (www-data). При использовании fastcgi/suexec или suPHP —  от пользователя домена.
dir         обычно /var/www/domain
Quotafiles  максимальное количество файлов
Quotasize   максимальный объём файлов в МБ
Bandwidth ограничение скорости в КБ/с

С помощью mysql в командной строке:

mysql -u pureftpd-user -p
use pureftpd;
insert into users (User, Password, UID, GID, dir, Quotafiles,  Quotasize) \
Values ('TestUsername', ENCRYPT('TestseinPW'), 33,33,'/var/www/testdomain.de',1000,1000);

Ввод пароля может быть выполнен с помощью my.cf с указанием базы данных. В этом случае данные передаются скриптом в mysql.

Помните, что это невозможно сделать от имени пользователя root!

Если пользователь MySQL имеет пользовательский или групповой идентификатор пользователя root (0), то Pure-FTPd не позволит ему зарегистрироваться.
Без такого превентивного ограничения, в случае взлома MySQL сервера, злоумышленник может легко взломать и FTP сервер.
Ограничения безопасности также служат предотвращению нежелательных последствий некорректного указания типа данных, передающихся с SQL запросами (например бинарные куски вместо простого текста).

Настройка клиентского ПО

Вам понадобится клиент с поддержкой TLS (например SmartFTP/FileZilla).

Лучше всего прочитать руководство по настройке FTP клиента и определить с каким TLS он совместим или просто определить это опытным путём. http://download.pureftpd.org/pub/pure-ftpd/doc/README.TLS

Дальнейшие комментарии

Если для шифрования пароля выбраны MD5 или mysql password, то это нужно настроить (в /etc/pure-ftpd-mysql/db/mysql.conf и для созданных пользователей, если необходимо, просто попробуйте «any», в надежде, что pureftpd найдёт правильный пароль).

Устранение неисправностей

Не работает или не установлен inetd. Поменяйте в файле /etc/default/pure-ftpd-common:

STANDALONE_OR_INETD=inetd

на

  STANDALONE_OR_INETD=standalone

Если после этого вы запустите /etc/init.d/pure-ftpd-mysql то он должен запуститься как демон и слушать на порту 21 (netstat -plaunt), если нет, то

less /var/log/syslog

Виртуальные пользователи

Если всё это используется с suexec/php, вам вряд ли понравится нижеследующее, так как очень важно иметь отдельных пользователей.

Нет необходимости назначать пользователям разные UID. Чтобы настроить виртуальных пользователей (должно работать, но не тестировалось), сделайте следующее:

adduser ftpuser
mkdir /var/ftp
chown ftpuser:ftpuser /var/ftp

UID/GID передаётся из /etc/passwd или /etc/group и с этими UID/GID создаются новые пользователи, а домашняя директория назначается в /var/ftp/user1 или /var/www/user2

При первой регистрации в системе создаются пользовательские директории и пользователи направляются в них (не тестировалось с запросом обратной связи). При необходимости можно установить «virtualchroot» в значение «yes» в файле /etc/default/pure-ftpd-common.



© 2018. Hetzner Online GmbH. Alle Rechte vorbehalten.