ProFTPd
Как-то, после покупки сервера, я подумал, что же первым мне реализовать, WEB или FTP ? Принял своё решение в пользу второго. Далее настало более важное решение, что же выбрать в роли моего FTP сервера (ProFTPd или vsftpd). Выбрал ProFTPd из-за его гибких возможностей в настройке, несмотря на то, что он будет потяжелее чем vsftpd.
Исторический факт: ProFTPd, это «эволюционный потомок» старого ftpd с гораздо большим функционалом, чем свой предок.
1.Установка:
a) apt-get install proftpd
Во время установки, появился окно с выбором режима работы вашего ftp демона, выбираем режим standalone, т.е. самостоятельный демон, который работает отдельно от inetd.
После установки в директории 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 сервера.
DefaultRoot /home/ftp/ ← устанавливаем chroot окружение для всех ftp пользователей.
RootLogin off ← Запрещаём подключение root пользователем.
User proftpd
Group nogroup ← указываем пользователя и группу от которой будет запущен наш ftp.
Umask 022 022 ← устанавливаем права для загружаемых файлов.
MaxLoginAttempts 3 ← количество попыток авторизации, перед тем как сервер разорвёт соединение.
DeferWelcome on ← отключаем пригласительное сообщение для тех пользователей, которые ещё не прошли аутентификацию.
AccessDenyMsg «Are you mad ?» ← Данное сообщение пользователь получит при не правильной авторизации.
AccessGrantMsg «Woop-Woop» ← А это при правильной авторизации.
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 ← разрешаем пользователям восстанавливать сессии
<IfModule mod_delay.c>
DelayEngine on
</IfModule>
<IfModule mod_ctrls.c>
ControlsEngine off
</IfModule>
<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>
<Limit READ DIRS>
IgnoreHidden on
</Limit>
<Limit SITE_CHGRP SITE_CHMOD>
Deny all
</Limit>
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.
<IfModule mod_sftp.c>
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
</IfModule>
d) Полезные команды:
Для просмотра подключенных пользователей можно использовать команду ftpwho, для мониторинга процессов ftptop а для статистики ftpstats.
proftpd -vv ← вывод подробной информации о версии и поддерживаемых модулях.
proftpd -l ← вывод загруженных модулей.
proftpd -t ← синтаксическая проверка конфигурационного файла.
Вот собственно и всё. Так же стоит отметить, что proftpd так же поддерживает возможность работы с СУБД, LDAP и так же имеет возможность работы на кластере. Существует множество вариантов настройки proftpd сервиса. Так же есть отличный мануал с подробным описанием всевозможных настроек: http://www.proftpd.org/docs/directives/configuration_full.html