Настройка ftp-сервера с помощью ProFTPD
Рассмотрим примерный конфигурационный файл настройки ProFTP, работающий в пассивном режиме на сервере под управлением FreeBSD. На момент написания статьи версия демона ftp была proftpd-1.3.3d, версия ОС – FreeBSD 8.0-RELEASE для архитектуры i386. Как создать анонимного пользователя ftp я уже описывал в этой статье. Установка ProFTPD не должна вызвать у вас затруднений. |
Сперва нам необходимо найти, где расположен порт во FreeBSD:
# whereis proftpd proftpd: /usr/ports/ftp/proftpd
Теперь переходим в каталог /usr/ports/ftp/proftpd и собираем порт ProFTPD с необходимыми нам опциями:
# cd /usr/ports/ftp/proftpd # make config
Обратите внимание, что опций гораздо больше, чем показано на рисунке!
Далее необходимо произвести собственно установку:
# make install clean
После установки не забываем внести изменения в /etc/rc.conf, чтобы разрешить запуск установленного демона ftp. Для этого вашим любимым редактором внесите в указанный файл стоку proftpd_enable=“YES”:
# nano -w /etc/rc.conf ... proftpd_enable="YES" ...
В каталоге /usr/local/etc в момент установки записался примерный файл конфигурации ProFTPD – proftpd.conf.sample. Скопируем его и изменим под наши нужды.
# cp /usr/local/etc/proftpd.conf.sample /usr/local/etc/proftpd.conf
Дополнительную информацию о настройке ProFTPD ищите на официальном сайте. Ниже приведен простейший файл конфигурации для работы с ftp локальных пользователей FreeBSD и организации доступа для анонимного пользователя.
Нижеприведенная настройка предполагает, что что у вас в системе уже создан анонимный пользователь ftp, а также присутствуют пользователь/группа nobody/nogroup.
# nano -w /usr/local/etc/proftpd.conf # Описываем свой сервер ServerName "FTP-server" # Это отдельно стоящий сервер (режим работы - автономный) ServerType standalone # Указываем, на каком IP-адресе будет работать ftp DefaultAddress 192.168.0.10 # Сервер будет работать только на указанном IP-адресе SocketBindTight on # Выключаем приветствие, выдаваемое клиенту после соединения ServerIdent off # Имя файла, где хранится информация о текущих сессиях ScoreboardFile /var/run/proftpd/proftpd.scoreboard # Указываем стандартный порт для работы Port 21 # Интервал портов для работы в пассивном режиме (min max) PassivePorts 50000 50100 # Не использовать протокол IPv6 (лучше собрать порт без оной) UseIPv6 off # Umask для создаваемых файлов и директорий Umask 022 # Максимальное число одновременно запускаемых процессов в режиме standalone MaxInstances 30 # Ограничение максимальной длины команды (число символов) CommandBufferSize 512 # Общее максимальное число соединений и выводимое предупреждение при достижении этого числа MaxClients 10 "Too many connections" # Максимальное число соединений с одного хоста и предупреждение при достижении этого числа MaxClientsPerHost 3 "%m client are already connected from your host" # Максимальное число попыток ввода пароля и предупреждение при достижении этого числа MaxLoginAttempts 3 "Too many of attempts to connected" # Выводимое сообщение при запрещении входа на ftp AccessDenyMsg "ATTENTION! All connections are loged" # Выводимое сообщение AccessGrantMsg "Now apload/download files" # Выводимое сообщение при отклонении соединения с ftp DisplayGoAway "Go Away!" # Уровень логирования SyslogLevel notice # Не проверять реверсные ответы DNS UseReverseDNS off # Отключаем использование протокола идентификации RFC1413 IdentLookups off # Файл лога передачи файлов TransferLog /var/log/proftpd-transfer.log # Файл общего системного лога ProFTPD SystemLog /var/log/proftpd-error.log # Файл лога записи/чтения файлов с ftp ExtendedLog /var/log/proftpd-extended.log read,write # Указываем пользователя/группу от имени которых будет запущен ProFTPD User nobody Group nogroup # Перенаправляем каждого ftp-пользователя в его домашнюю директорию DefaultRoot ~ # Разрешаем перезаписывать файлы AllowOverwrite on # Bar use of SITE CHMOD by default<Limit SITE_CHMOD>
DenyAll</Limit>
# Задержка простоя (в секундах) TimeoutIdle 3600 # Задержка ожидания авторизации (в секундах) TimeoutLogin 3600 # Задержка после авторизации, если не начал прием/передачу файлов (в секундах) TimeoutNoTransfer 3600 # Задержка во время пересылки файла (в секундах) TimeoutStalled 3600 # Максимальная длительность сессии (в секундах) TimeoutSession 3600 # Не использовать PAM-аутентификацию AuthPAM off # Описываем работу ProFTPD при анонимном доступе, указав каталог /home/ftp<Anonymous /home/ftp>
# Имя/группа для анонимного пользователя User ftp Group nogroup # Указываем анонимных пользователей (uid) UserAlias anonymous ftp # Даем доступ только пользователям, упомянутым в директиве UserAlias AuthAliasOnly on # Не проверять валидность shell у анонимного пользователя RequireValidShell off # Не спрашивать пароль у анонимных пользователей AnonRequirePassword off # Указываем максимальное число анонимных пользователей и сообщение при достижении этого числа MaxClients 5 "Soory, max %m users - try again later" # Ограничения на вход для анонимных пользователей<Limit LOGIN>
# Пускаем всех AllowAll</Limit>
# Ограничение на запись для анонимных пользователей<Limit WRITE>
# Запрещаем всем DenyAll</Limit>
</Anonymous>
Теперь нам необходимо создать три файла для логов работы ProFTPD:
# touch /var/log/proftpd-error.log # touch /var/log/proftpd-extended.log # touch /var/log/proftpd-transfer.log
И, собственно, запустить установленный и настроенный ProFTPD:
# /usr/local/etc/rc.d/proftpd start
Проверить работу демона ProFTPD можно командой:
# netstat -tan | grep LIST | grep 21 tcp4 0 0 192.168.0.10.21 *.* LISTEN
Следует еще упомянуть несколько полезных команд для мониторинга работы ProFTPD:
- ftpwho – показывает текущую информацию о процессе для каждого сеанса FTP
- ftpcount – показывает текущее число соединений для каждой proftpd конфигурации сервера
- ftptop – отображает рабочее состояние на proftpd соединениях сервера
Напоследок напоминаю, что если на вашем сервере установлен файервол, то вам необходимо дать разрешения на доступ к вашему сконфигурированному ftp-серверу. Покажу это на примере pf:
# less /etc/pf.conf ext_if="em0" ext_addr="12.34.56.78" int_if="bge0" int_addr="192.168.0.10" localnet="{192.168.0.0/16}" set skip on lo0 set block-policy drop scrub in all block all block in quick from urpf-failed pass in on $int_if from $localnet to $int_addr pass out on $int_if from $int_addr to $localnet # Разрешаем на внешнем сетевом интерфейсе доступ от всех к внешнему ip-адресу по портам 21, 25 и 80 pass in on $ext_if proto tcp from any to $ext_addr port {21,25,80} # Разрешаем исходящий трафик на внешнем сетевом интерфейсе от внешнего ip-адреса ко всем pass out on $ext_if proto {tcp,udp,icmp} from $ext_addr to any # Разрешаем трафик с логированием на внешнем сетевом интерфейсе по протоколу tcp от всех к портам # 50000 - 50100, которые мы указали для работы proftpd в пассивном режиме pass in log quick on $ext_if inet proto tcp from any to $ext_if port 50000 >< 50100 pass quick on lo0 all
Вот и все, удачи!
Жаль что в Fedore 20 нет поддержки пакета ProFTPD с графическим конфигуратором было-бы намного проще :( :(
Максим, здравствуйте! Спасибо за толковое, осмысленное и грамотное описание.
Сталкивались ли Вы с надобностью дать одному неанонимному пользователю-клиенту FTP доступ к нескольким лишь каталогам из множества? Как бы Вы решали это требование?
Спасибо заранее!