Hetzner - DokuWiki

PureFTPd/ru
(Die Seite wurde neu angelegt: „{{Languages|PureFTPd}} == Pureftpd с mysql и поддержкой TLS == === Изменения === *11.02.2010 Дополнения к Debian Lenny *23.07.2…“)
 
K
 
Zeile 20: Zeile 20:
 
=== Отзывы ===
 
=== Отзывы ===
  
Отзывы о документе приветствуются, конечно. Просто отправьте email автору.
+
Отзывы о документе приветствуются. Просто отправьте email автору.
  
== Вступление / Абстрактно ==
+
== Введение ==
  
 
Почти каждому оператору сервера (по крайней мере, у которого есть клиенты) нужен или желателен FTP сервер.<br/>Передача данных по FTP обычно не шифруется и даже пароли передаются незашифрованными. Чтобы обойти эту потенциальную уязвимость, можно использовать FTP сервер, который шифрует хотя бы канал для передачи паролей.
 
Почти каждому оператору сервера (по крайней мере, у которого есть клиенты) нужен или желателен FTP сервер.<br/>Передача данных по FTP обычно не шифруется и даже пароли передаются незашифрованными. Чтобы обойти эту потенциальную уязвимость, можно использовать FTP сервер, который шифрует хотя бы канал для передачи паролей.
  
В данной «Howto» я бы хотел рассказать об установке Pure-FTPd [http://www.pureftpd.org/project/pure-ftpd Pure-FTPd]. Настолько, насколько это возможно, я держу в фокусе пакеты Debian, которые, на мой взгляд, предлагают гибкие индивидуальные параметры.
+
В данном «Howto» я бы хотел рассказать об установке Pure-FTPd [http://www.pureftpd.org/project/pure-ftpd Pure-FTPd]. Настолько, насколько это возможно, я держу в фокусе пакеты Debian, которые, на мой взгляд, предлагают гибкие индивидуальные параметры.
  
Для создания и удалению пользователей через веб-интерфейс, используется поддержка mysql, имеющая смысл в хостинг среде.  
+
Для создания и удалению пользователей через веб-интерфейс, используется поддержка mysql, имеющая смысл в хостинг среде.
  
 
Я пользуюсь конфигурацией suExec + FastCGI, что означает, каждый домен управляется одним пользователем.
 
Я пользуюсь конфигурацией suExec + FastCGI, что означает, каждый домен управляется одним пользователем.
  
Созданные пользователи в основном независимы от системных пользователей. Одна из идей по настройке виртуальных пользователей описана ниже.
+
Созданные пользователи в независимы от системных пользователей. Одна из идей по настройке виртуальных пользователей описана ниже.
  
 
== Установка ==
 
== Установка ==
Zeile 143: Zeile 143:
 
=== Добавление пользователей  ===
 
=== Добавление пользователей  ===
  
Редактирование с помощью phpmyadmin или с помощью собственного скрипта..
+
Редактирование с помощью phpmyadmin или с помощью собственного скрипта.
  
 
Зарегистрируйтесь в PhpMyAdmin как пользователь pureftpd, и добавьте новые строки в таблицу пользователей:
 
Зарегистрируйтесь в PhpMyAdmin как пользователь pureftpd, и добавьте новые строки в таблицу пользователей:
  
 
  Username
 
  Username
  Password('TheUserPassword')  (select "Encrypt" from the dropdown menu)
+
  Password('TheUserPassword')  (в выпадающем меню выберите «Encrypt»)
  UID/GID    from the account, for "simple" setups 33 (www-data), for fastcgi/suexec or suPHP, the domain user
+
  UID/GID    UID/GID  учётной записи. Для «простых« установок —33 (www-data). При использовании fastcgi/suexec или suPHP —  от пользователя домена.
  dir        in normal circumstances /var/www/domain)
+
  dir        обычно /var/www/domain
  Quotafiles  max number of files
+
  Quotafiles  максимальное количество файлов
  Quotasize  max size of all files in MB
+
  Quotasize  максимальный объём файлов в МБ
  Bandwidth UPload/DownLoad limit in kb/s
+
  Bandwidth ограничение скорости в КБ/с
  
 
С помощью mysql в командной строке:
 
С помощью mysql в командной строке:
Zeile 162: Zeile 162:
 
  Values ('TestUsername', ENCRYPT('TestseinPW'), 33,33,'/var/www/testdomain.de',1000,1000);
 
  Values ('TestUsername', ENCRYPT('TestseinPW'), 33,33,'/var/www/testdomain.de',1000,1000);
  
Ввод пароля может быть выполнен с помощью my.cf с указанием базы данных. В этом случае данные непосредственно передаются скриптом в mysql.
+
Ввод пароля может быть выполнен с помощью my.cf с указанием базы данных. В этом случае данные передаются скриптом в mysql.
  
 
Помните, что это невозможно сделать от имени пользователя root!
 
Помните, что это невозможно сделать от имени пользователя root!
  
 
  Если пользователь MySQL имеет пользовательский или групповой идентификатор пользователя root (0), то Pure-FTPd не позволит ему зарегистрироваться.
 
  Если пользователь MySQL имеет пользовательский или групповой идентификатор пользователя root (0), то Pure-FTPd не позволит ему зарегистрироваться.
  Без такого превинтивного ограничения, в случае взлома MySQL сервера, злоумышленник может легко взломать и FTP сервер.
+
  Без такого превентивного ограничения, в случае взлома MySQL сервера, злоумышленник может легко взломать и FTP сервер.
  Ограничения безопасности также служат предотвращению нежелательных последствий некорректного указания типа данных, передающихся с SQL запросами (напримр бинарные куски вместо простого текста).
+
  Ограничения безопасности также служат предотвращению нежелательных последствий некорректного указания типа данных, передающихся с SQL запросами (например бинарные куски вместо простого текста).
  
 
=== Настройка клиентского ПО ===
 
=== Настройка клиентского ПО ===
  
Теперь вам понадобится клиент с поддержкой TLS (например SmartFTP/FileZilla) и вы можете начинать.
+
Вам понадобится клиент с поддержкой TLS (например SmartFTP/FileZilla).
  
 
Лучше всего прочитать руководство по настройке FTP клиента и определить с каким TLS он совместим или просто определить это опытным путём. [http://download.pureftpd.org/pub/pure-ftpd/doc/README.TLS http://download.pureftpd.org/pub/pure-ftpd/doc/README.TLS]
 
Лучше всего прочитать руководство по настройке FTP клиента и определить с каким TLS он совместим или просто определить это опытным путём. [http://download.pureftpd.org/pub/pure-ftpd/doc/README.TLS http://download.pureftpd.org/pub/pure-ftpd/doc/README.TLS]
Zeile 178: Zeile 178:
 
==== Дальнейшие комментарии ====
 
==== Дальнейшие комментарии ====
  
Если для шифрования пароля выбраны MD5 или mysql password, то это нужно настроить (в /etc/pure-ftpd-mysql/db/mysql.conf и для созданных пользователей, если необхдимо, просто попробуйте «any», в надежде, что pureftpd найдёт правильный пароль ..)
+
Если для шифрования пароля выбраны MD5 или mysql password, то это нужно настроить (в /etc/pure-ftpd-mysql/db/mysql.conf и для созданных пользователей, если необходимо, просто попробуйте «any», в надежде, что pureftpd найдёт правильный пароль).
  
 
==== Устранение неисправностей ====
 
==== Устранение неисправностей ====
  
Суперсервер inetd не работает для меня и/или не установлен в минимальной версии Debian. Тогда поменяйте
+
Не работает или не установлен inetd. Поменяйте в файле /etc/default/pure-ftpd-common:
  
  /etc/default/pure-ftpd-common
 
 
  STANDALONE_OR_INETD=inetd
 
  STANDALONE_OR_INETD=inetd
  

Aktuelle Version vom 16. September 2014, 07:01 Uhr

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.



© 2020. Hetzner Online GmbH. Alle Rechte vorbehalten.