Это старая версия документа!


СТАТЬЯ ЕЩЁ НЕ ЗАКОНЧЕНА !!!

Дата написания: май 2018 г.
Автор: Graf

FTP Сервер на базе PureFTPd


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

Перед установкой и настройкой сервера, открываем файл /etc/shells и проверяем в нем наличие строки /bin/false, если ее нет — дописываем. Устанавливаем pure-ftpd через sbopkg предварительно изменив SlackBuild добавив в блок configure:

--with-language=russian \
--with-tls \
--with-rfc2640

Или изменив соответствующие переменные выше блока configure.
Далее, во всех статьях советуют создать отдельную группу и пользователя от имени которого будут работать виртуальные пользователи.

# groupadd ftpgroup
# useradd -g ftpgroup -d /dev/null -s /bin/false ftpuser

Но, у меня стоит задача дать доступ лишь веб-программистам которые могли бы заливать файлы по ftp.
И тут возникает одна оказия. После заливки файлов на веб-ресурс , владельцем их становится ftpuser:ftpgroup, а надо apache:apache. Поэтому ничего создавать я не буду, так-как apache у нас, в основном, бесправный вот пусть он и будет для виртуальных пользователей ftp «папой и мамой». :)
Если ftp-сервер создается для других целей, то целесообразно создать отдельную группу и пользователя (команда выше), а в моих примерах поменять их соответственно.
Так как сам ftp не безопасен, надо его хоть как-то защитить. Для этого создадим сертификат:

# mkdir -p /etc/ssl/private/
# openssl req -x509 -nodes -days 7300 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem
...
-----
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:MO
Locality Name (eg, city) []:Moscow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyOrg
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:mydom-ftp.ru  <- DNS имя на которое будем заходить по ftp
Email Address []:admin@mydom.ru

# chmod 600 /etc/ssl/private/pure-ftpd.pem

Создали.
Теперь настроим сам сервер. Для этого переименуем существующий файл /etc/pure-ftpd/pure-ftpd.conf и создадим новый со следующими параметрами:

ChrootEveryone              yes
BrokenClientsCompatibility  no
MaxClientsNumber            5
Daemonize                   yes
MaxClientsPerIP             3
VerboseLog                  no
DisplayDotFiles             no
AnonymousOnly               no
NoAnonymous                 yes
SyslogFacility              ftp
DontResolve                 yes
MaxIdleTime                 10
PureDB                      /etc/pure-ftpd/pureftpd.pdb
LimitRecursion              10000 8
AnonymousCanCreateDirs      no
MaxLoad                     4
TLS                         2
CertFile                    /etc/ssl/private/pure-ftpd.pem
FileSystemCharset           UTF-8
AltLog                      w3c:/var/log/pureftpd.log
PassivePortRange            50000 50100

Пояснения к параметрам и возможные значения указаны в таблице ниже.

Если сервер (допустим -192.168.15.15) за NAT'ом, то необходимо пробросить TCP порты 20, 21 - для активного режима и диапазон TCP портов, например 50000:50100 - для пассивного:

$IPTABLES -t nat -A PREROUTING -d $INET_IP -p tcp -m multiport --port 20,21,50000:50100 -j DNAT --to-destination 192.168.15.15
$IPTABLES -I FORWARD 1 -i $INET_IFACE -o $LAN_IFACE -d 192.168.15.15 -p tcp -m multiport --port 20,21,50000:50100  -j ACCEPT

Если не за NAT'ом, то просто открыть их:

$IPTABLES -A INPUT -p tcp -m multiport --destination-port 20,21,50000:50100 -j ACCEPT

Если выбран неявный (Implicit) метод шифрования, то необходимо ещё открыть (пробросить) TCP порты 989 и 990.

Добавляем виртуального пользователя webadmin1 с домашней директорией /var/www/htdocs/site1, который буде работать от имени реального пользователя и группы apache:apache (ftpuser:ftpgroup)

# pure-pw useradd webadmin1 -u apache -g apache -d /var/www/htdocs/site1

Если параметр CreateHomeDir в конфигурационном файле сервера не закомментирован и установлен в yes, то директория будет создана автоматически при первом входе данного пользователя через FTP-клиент. После выполнения команды будет предложено ввести пароль для виртуального пользователя.
После каждых изменений обновляем /etc/pure-ftpd/pureftpd.pdb (или используем ключ -m):

# pure-pw mkdb

Немного о параметрах и ключах команды pure-pw в специальном разделе статьи.
Теперь запустим сервер и проверим работу нашего FTP-сервера:

# /etc/rc.d/rc.pure-ftpd start

Для автоматического запуска, пропишем эту строчку в /etc/rc.d/rc.local
Проверим запустился ли наш сервер.

# ps aux | grep pure
root      5876  0.0  0.0  17460  4740 ?        Ss   09:29   0:00 /usr/sbin/pure-ftpd /etc/pure-ftpd/pure-ftpd.conf

Запустился. Идём настраивать клиентов и проверять работу нашего FTP-сервера.

Установка и настройка клиентов

В Slackware воспользуемся одной из утилит - curlftpfs, которая позволяет монтировать FTP-ресурс как обычный каталог. Установим её при помощи sboopkg.

# sbopkg -Bi curlftpfs

Пробуем подключиться к mydom-ftp.ru пользователем webadmin1 с паролем ppp111222 и примонтировать его домашний каталог в /mnt/ftp. При этом указываем, что соединение будет по ftps (ключ - ssl) и не нужно проверять сертификат (ключ - no_verify_peer), так как он у нас самоподписанный.

# mkdir -p /mnt/ftp
# curlftpfs mydom-ftp.ru /mnt/ftp/ -o ssl,no_verify_peer,user=webadmin1:ppp111222
# ls -al /mnt/ftp
...
...
index.html

Проверили, работает. Но способ указания логина и пароля непосредственно в строке запуска, покажет их как минимум в списке запущенных процессов:

# ps aux | grep curlftp

root   17164  0.0  0.0  25704  4080 ? Ssl  17:54   0:00 curlftpfs mydom-ftp.ru /mnt/ftp -o ssl,no_verify_peer,user=webadmin1:ppp111222

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

  • создадим файл ~/.netrc с содержимым
machine mydom-ftp.ru
login webadmin1
password ppp111222
  • ограничим его правами
$ chmod 600 ~/.netrc
  • создадим каталог монтирования и попробуем соединиться.
$ mkdir -p ~/ftp/site1
$ curlftpfs -o ssl,utf8,no_verify_peer ftp://mydom-ftp.ru/ ~/ftp/site1
$ ls -al ~/ftp/site1
...
...
index.html

Всё получилось и работает.
Чтобы отмонтировать ресурс введём в консоли:

$ fusermount -u ~/ftp/site1

Думаю, нет особой нужды расписывать настройку ftp-клиетнов, таких как FileZilla или WinSCP, для семейства OC Windows. Так как она и так интуитивно понятна.

Параметры и ключи pure-pw

Список некоторых параметров и ключей команды pure-pw

Просмотреть детальную информацию ПОЛЬЗОВАТЕЛЯ

# pure-pw show ПОЛЬЗОВАТЕЛЬ

Просмотр списка виртуальных пользователей

# pure-pw list

Следующие команды с ключом -m в конце, вносят изменения сразу в /etc/pure-ftpd/pureftpd.pdb без необходимости запуска pure-pw mkdb:

Добавить ПОЛЬЗОВАТЕЛЯ

# pure-pw useradd ПОЛЬЗОВАТЕЛЬ

Изменить пароль ПОЛЬЗОВАТЕЛЯ

# pure-pw passwd ПОЛЬЗОВАТЕЛЬ

Удалить ПОЛЬЗОВАТЕЛЯ

# pure-pw userdel ПОЛЬЗОВАТЕЛЬ

Изменить значения у ПОЛЬЗОВАТЕЛЯ

# pure-pw usermod ПОЛЬЗОВАТЕЛЬ

Ключ -z в useradd и usermod даёт возможность ограничить доступ в период времени, например разрешить доступ с 09:00 до 18:00:

-z 0900-1800

Подробнее о командах в pure-pw -h

Таблица параметров pure-ftpd.conf

Навигация
Печать/экспорт
QR Code
QR Code wiki:articles:pureftpd (generated for current page)