ProFTPd
Как-то, после покупки сервера, я подумал, что же первым мне реализовать, WEB или FTP ? Принял своё решение в пользу второго. Далее настало более важное решение, что же выбрать в роли моего FTP сервера (ProFTPd или vsftpd). Выбрал [[https://ru.wikipedia.org/wiki/ProFTPd|ProFTPd]] из-за его гибких возможностей в настройке, несмотря на то, что он будет потяжелее чем vsftpd. \\
__Исторический факт__: ProFTPd, это "эволюционный потомок" старого [[http://www.opennet.ru/man.shtml?topic=ftpd&category=8&russian=1|ftpd]] с гораздо большим функционалом, чем свой предок. \\
**1.Установка:** \\
a) **apt-get install proftpd** \\
Во время установки, появился окно с выбором режима работы вашего ftp демона, выбираем режим standalone, т.е. самостоятельный демон, который работает отдельно от inetd. \\
{{ :proftpd.png?nolink |}}
После установки в директории //etc// появится основная директория с конфигурационными файлами ProFTPd (/etc/proftpd/), файл // /etc/ftpusers // (список пользователей, которым не разрешено подключаться к вашему ftp серверу) и стандартная chroot директория // /srv/ftp/ // \\
**2.Настройка: ** \\
a) Открываем конфигурационный файл //proftpd.conf// \\
**Include** /etc/proftpd/modules.conf <- подключаем все необходимые нам модули. \\
**UseIPv6** off <- отключаем IPv6. Даже если вы не используете протокол IPv6, будет лучше указать это в конфиге, чтобы proftpd не открывал дополнительные ipv6 сокеты. \\
**IdentLookups** off \\
**UseReverseDNS** off <- эти две опции необходимы для того, чтобы proftpd не преобразовывал адреса клиентов в доменное имя. Это это снизит время отведённое на авторизацию клиентов.\\
**ServerName** "MySuper-DuperFTP" <- развиваем фантазию и придумываем имя для нашего ftp сервера. \\
**ServerAdmin** spam@shit.com <- контактная информация. \\
**ServerType** standalone <- выбераем тип сервета (standaline/inetd). \\
**ServerIdent** on "BigSexy FTP" <- включаем идентификацию нашего ftp сервера. \\
{{ :identftp.png?nolink |}}
**DefaultRoot** /home/ftp/ <- устанавливаем chroot окружение для всех ftp пользователей. \\
**RootLogin** off <- Запрещаём подключение root пользователем.\\
**User** proftpd \\
**Group** nogroup <- указываем пользователя и группу от которой будет запущен наш ftp. \\
**Umask** 022 022 <- устанавливаем права для загружаемых файлов. \\
**MaxLoginAttempts** 3 <- количество попыток авторизации, перед тем как сервер разорвёт соединение.\\
**DeferWelcome** on <- отключаем пригласительное сообщение для тех пользователей, которые ещё не прошли аутентификацию. \\
**AccessDenyMsg** "Are you mad ?" <- Данное сообщение пользователь получит при не правильной авторизации.\\
{{ :access_deny.png?nolink |}}
**AccessGrantMsg** "Woop-Woop" <- А это при правильной авторизации. \\
{{ :access_apply.png?nolink |}}
**MultilineRFC2228** on <- поддержка многострочных сообщений. Данный протокол гарантирует доставку данных и аутентификацию соединений.\\
**DefaultServer** on <- включаем параметр //on// так как у нас нет других ftp серверов/вируальных хостов. \\
**ShowSymlinks** on <- Отображать симлинки.\\
**TimeoutNoTransfer** 7200 <- устанавливаем тайм аут для соединений без передачи данных.\\
**TimeoutStalled** 36000 <- тайм аут на сессию с передачей данных.\\
**TimeoutIdle** 36000 <- тайм аут на неактивную сессию.\\
**TimeoutSession** 36000 <- Общая длинна сессии.\\
**DisplayLogin** welcome.msg <- включаем отображение пригласительного сообщения. данный файл находится в директории // /srv/ftp/ // \\
**ListOptions** "-l" <- В данной опции указываем "тип отображения" содержимого директорий. Аналог команды **ls -l** \\
**DenyFilter** \*.*/ <- в целях безопасности запрёщаем регулярное выражение "*". В данный параметр можно вписать те, опции и команды, которые мы запрещаем. В данном случаем, мы обезопасим себя от тех ситуаций, когда пользователи захотят вывести собержимое свех диреторий на нашем ftp сервере, что очень неблагоприятно сказывается на нагрузке на сервер.\\
**Port** 23799 <- порт на котором будет работать proftpd.\\
**PassivePorts** 50010 50050 <- диапазон портов для пассивного режима.\\
**MaxInstances** 30 <- указываем максимальное количество child процессов. Параметр //none// отключает лимит.\\
**AllowOverwrite** on <- разрешаем перезапись загруженных файлов пользователем.\\
**AllowOverride** off <- отключаемпарсинг файлов //.ftpaccess// \\
**AllowStoreRestart** on <- разрешаем пользователям восстанавливать скачивание файлов.\\
**TransferLog** /var/log/proftpd/xferlog <- логи загрузок/скачиваний.\\
**SystemLog** /var/log/proftpd/proftpd.log <- системные логи.\\
**Include** /etc/proftpd/conf.d/ <- директория для дополнительных конфигурационных файлов.\\
**AuthUserFile** /etc/proftpd/ftpd.passwd <- список пользователей.\\
**AllowForeignAddress** off <- запрещаем пересылку файлов от нашего ftp к другому ftp серверу.\\
**AllowRetrieveRestart** on <- разрешаем пользователям восстанавливать сессии\\
''
\\
DelayEngine on \\
\\
'' \\
''
\\
ControlsEngine off \\
\\
'' \\
''
\\
AdminControlsEngine off \\
\\
'' \\
''
\\
IgnoreHidden on \\
\\
'' \\
''
\\
Deny all \\
\\
''
b)Открываем файл // /etc/proftpd/modules.conf// в убираем оттуда строчку //LoadModule mod_tls_memcache.c//.
Теперь нам нужно добавить пользователей для нашего ftp. Для этого используем команду **ftpasswd**: \\
**ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=user1 --shell=/bin/false --home=/home/ftp/user1 --uid=1023 --gid=65534** \\
И вводим пароль для нашего пользователя. Если пользователь забыл свой пароль, то мы можем его заменить используя коману: \\
**ftpasswd --passwd --name=user1 --change-password** \\
Для удаления пользователя: \\
**ftpasswd --passwd --delete-user --file=/etc/proftpd/ftpd.passwd --name=user1** \\
Перезагружаем proftpd, **/etc/init.d/proftpd restart** и проверяем, что служба запущена от пользователя proftpd (**ps aux | grep proftd && lsof -c proftpd**). \\
с) Немного про SFTP: //
Если вы хотите использовать безопасную передачу данных, то proftpd может использовать SFTP и FTPS. Для разворачивания sftp в конфиге //proftpd,conf// вам нужно указать модуль sftp.\\
''
\\
UseFtpUsers on \\
SFTPDisplayBanner "/etc/issue.net" \\
SFTPEngine on \\
SFTPLog /var/log/proftpd/sftp.log \\
Port 23799 \\
SFTPDHParamFile /etc/proftpd/dhparams.pem \\
SFTPAuthMethods password \\
SFTPMaxChannels 50 \\
SFTPCompression on \\
\\
'' \\
d) Полезные команды: \\
Для просмотра подключенных пользователей можно использовать команду **ftpwho**, для мониторинга процессов **ftptop** а для статистики **ftpstats**. \\
**proftpd -vv** <- вывод подробной информации о версии и поддерживаемых модулях.\\
**proftpd -l** <- вывод загруженных модулей.\\
**proftpd -t** <- синтаксическая проверка конфигурационного файла.\\
Вот собственно и всё. Так же стоит отметить, что proftpd так же поддерживает возможность работы с СУБД, LDAP и так же имеет возможность работы на кластере. Существует множество вариантов настройки proftpd сервиса. Так же есть отличный мануал с подробным описанием всевозможных настроек: http://www.proftpd.org/docs/directives/configuration_full.html