Ноя 03 2009

FTP сервер bftpd.

Большая часть FTP серверов под FreeBSD построена на vsftpd, proftpd, pure-ftpd или уж с использованием нативного, присутствующего в базовой системе ftp сервера. Тем не менее существует масса разнообразных проектов FTP серверов, большая часть из которых пусть не так обширна по возможностям, как выше перечисленные виды, но тем не менее они функциональны и обладают достаточной функциональностью для работы.
Один из таких серверов bftpd. Он присутствует в портах, оттуда его и поставим.

cd /usr/ports/ftp/bftpd/
make install clean

Установка проходит без дополнительных вопросов.
Можно приступать к настройке. Для этого, сначала скопируем пример файла конфигурации в его основное имя:

cd /usr/local/etc/
cp bftpd.conf.sample bftpd.conf

И можно приступать к редактированию. После правок, у меня файл принял такой вид:

global {
#Установив в этой опции yes, мы запретим соендинятся с
#сервером, например для профилактических работ
  DENY_LOGIN="no"
#Порт на котором мы принимаем соединения
  PORT="21"
#Порты для пассивного режима, с которых сервер инициирует
#передачу данных клиенту. Можно указать диапазон портов, 
#как в закомментированном примере или 0 - что бы использовался
#любой случайный порт больше 1024
  #PASSIVE_PORTS="10000,12000-12100,13000"
  PASSIVE_PORTS="0"
#Датапорт - разрешает активный режим и передачу данных 
#через 20-й порт
  DATAPORT20="no"
#Размер буфера передачи данных
  XFER_BUFSIZE="2048"
#Запрет на изменение размера буфера
  CHANGE_BUFSIZE="no"
#Задержки перед передачей данных нет
  XFER_DELAY="0"
#Показывать клиенту скрытые файлы, в UNIX системах
#Это файлы начинающиеся с точки. 
#В нашем случае не показывать их
  SHOW_HIDDEN_FILES="no"
#Запрещено показывать файлы, которые клиент 
#не может прочесть
  SHOW_NONREADABLE_FILES="no"
#Запрет протокола FXP, это когда один ftp сервер 
#может скачивать что то с другого ftp сервера и отдавать клиенту
  ALLOW_FXP="no"
#Время оидания на командном канале
  CONTROL_TIMEOUT="300"
#Время ожидания на канале передачи данных
  DATA_TIMEOUT="30"
#Ограничение на отношение переданных на сервер 
#файлов к скачанным
#Путем установки RATIO в 1/2, мы требуем залить 1 файл,
#что бы скачать 2 файла
  RATIO="none"
#Указываем chrotить клиентов. %h означает chrootить в 
#домашнем каталоге   
  ROOTDIR="%h"
#Выставляем маску создаваемых файлов
  UMASK="022"
#Пишем log файл
  LOGFILE="/var/log/bftpd.log"
#Строка приветствия, отдается клиентам
  HELLO_STRING="server at ready."
#Авторизовать клиентов используя PAM
  AUTH="PAM"
#Не делать преобразования ip адресов клиентов в 
  RESOLVE_CLIENT_IP="no"
#Выводить владельцев файлов и их группы в символьном виде
#При  RESOLVE_UIDS="no" будут выводится цифры
  RESOLVE_UIDS="yes"
#Вносить информацию о сессиях в wtmp
  LOG_WTMP="yes"
#Принимать соендинения на всех адресах, имеющихся
#на сервере. Можно указать только один или перечислить 
#несколько адресов, на которых будет принимать соендинения
#bftpd 
  BIND_TO_ADDR="any"
#Путь к файлу с запрещенными логинами
  PATH_FTPUSERS="/etc/ftpusers"
#Не будем требовать наличие shell у клиента
  AUTH_ETCSHELLS="no"
#Запретим выполнять команду DELE(удалять файлы)
  ALLOWCOMMAND_DELE="no"
#Разрешим STOR(скачивать файлы)
  ALLOWCOMMAND_STOR="yes"
#Запретим SITE(Команды контроля и управления сервером)
  ALLOWCOMMAND_SITE="no"
#Прятать файлы, владельцы которых входят в группы.
#Мы ничего прятать не будем, но можем
  HIDE_GROUP=""
#Сообщение выводимое в ответ на команду quit
  QUIT_MSG="See you later..."
#Глобальное ограничение числа пользователей. 0 - безлимит
  USERLIMIT_GLOBAL="0"
#Максимальное число подключений с одним логином
  USERLIMIT_SINGLEUSER="0"
#Максимальное число подключений с одного хоста
  USERLIMIT_HOST="0"
#Сжимать gzipом на лету заливаемые файлы, у нас отключено,
#уж очень грузит процессор
  GZ_UPLOAD="no"
#Сжимать скачиваемые файлы
  GZ_DOWNLOAD="no"
}
#Запретим анонимусов
user anonymous {
  DENY_LOGIN="ANONYMOUS not allowed."
}
#Под rootом тоже нечего соединятся
user root {
  DENY_LOGIN="Root login not allowed."
}

Теперь остается сделать стартовый скрипт. Видимо мантейнер порта, считает, что inetd всем достаточно. Я так не думаю.
Я использую такой скрипт:

#!/bin/sh
case "$1" in
    'start')
        echo "Starting bftpd Server"
        /usr/local/sbin/bftpd -d
    ;;
    'stop')
        echo "Stopping bftpd Server"
        killall bftpd
    ;;
    'restart')
      /usr/local/etc/rc.d/bftpd.sh stop
      sleep 1
      /usr/local/etc/rc.d/bftpd.sh start
      ;;
    *)
        echo "usage: $0 {start|stop|restart}"
esac

Скрип нужно разместить в /usr/local/etc/rc.d/ я назвал его bftpd.sh. Его нужно сделать исполняемым:

chmod +x /usr/local/etc/rc.d/bftpd.sh

И можно запускать.

/usr/local/etc/rc.d/bftpd.sh start

В конфигурационном файле видно все его полезные фитчи. Он конечно намного скромнее proftpd и т. п., но как хорошая замена встроенному FTP серверу подойдет.

Добавить в закладки:

google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru

Украинская Баннерная Сеть