FTP-Сервер proftpd

ProFTPd — FTP-сервер для Linux и UNIX-подобных операционных систем.

ProFTPd использует лишь один конфигурационный файл «proftpd.conf», который располагается по умолчанию в:

  • Linux — «/etc/proftpd/proftpd.conf»
  • FreeBSD — «/usr/local/etc/proftpd.conf»

Сервер может быть настроен для работы нескольких виртуальных хостов, также поддерживает chroot. Может быть запущен в виде отдельного сервера (демона) или в составе суперсервера inetd. Также поддерживает IPv6.

Расширения: поддерживает модули, добавляющие SSL/TLS шифрование[1], аутентификацию через LDAP[2], работу с SQL[3], туннелирование соединений через SSH[4].

Работает со следующими операционными системами: AIX, BSD/OS, Cygwin, FreeBSD[5], HP-UX, IRIX, zSeries, Linux[5] (включая Linux для IBM S/390), Mac OS X, NetBSD, OpenBSD,Solaris, Maemo. «Родная» поддержка Microsoft Windows отсутствует[6].

Также имеется графический фронтенд для ProFTPd под названием gProFTPd.

Устанавливаем пакет proftpd:

sudo aptitude install proftpd

Отвечаем на появившийся вопрос о способе запуска: «самостоятельно». Открываем файл /etc/shells:

sudo nano /etc/shells

Добавляем в него строку:

/bin/false

Создаем в /HOME каталоге папку FTP-shared(Не обязательно в корне /HOME и не обязательно такое имя папки, это просто пример):

sudo nano /home/FTP-shared

Теперь создаем пользователя с именем userftp(ну или что поинтересней):

sudo useradd userftp -p pass -d /home/FTP-shared -s /bin/false

Вместо «pass» – ввести свое слово или фразу в качестве пароля(не вводите только цифры, работать не будет). 

Корневой пользователь может поменять пароль любого другого пользователя, указав его имя как параметр программы passwd. Нужно лишь дважды ввести новый парбль.

# passwd test 

В папке FTP-shared создаем две вложенные папки(называем как хотим):

sudo mkdir /home/FTP-shared/public sudo mkdir /home/FTP-shared/upload

Присвоим права созданным папкам:

sudo chmod 755 /home/FTP-shared

sudo chmod 755 /home/FTP-shared/public

sudo chmod 777 /home/FTP-shared/upload

FTP-shared и public – только чтение. upload – запись. Переименовываем имеющийся конфигурационный файл proftpd.conf и создаем новый:

sudo mv /etc/proftpd/proftpd.conf /etc/proftpd/proftpd.conf.old

sudo nano /etc/proftpd/proftpd.conf

Добавляем в него: proftpd Если Вы создавали структуру папок, имя пользоватля и т.д не как в статье, то редактируйте данный файл под себя. После произведенных действий фтп-сервер будет иметь следующие параметры доступа:

user (пользователь): test

password (пароль): pass (тот, что присвоен для userftp)

Можно создать несколько пользователей, но все они должны быть прописаны в файле proftpd.conf. Если нужно сделать анонимный доступ, следует закомментировать обе секции для test и раскомментировать секцию для Anonymous. Сервер запущен, но с параметрами по умолчанию, перезагружаем его:

sudo /etc/init.d/proftpd restart

Что бы узнать, кто подключен к фтп-серверу в данный момент используется команда ftptop (клавиша t меняет отображение, q – выход). Полезные советы: Если нужно подключить какую-либо папку к фтп-серверу (например, проверить работу только что созданного фтп-сервера) без редактирования конфига пригодится команда:

sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/public

или с доступом на запись:

sudo mount -o bind /здесь/путь/папки/что/я/хочу/расшарить/ /home/FTP-shared/upload

Таким образом можно в срочном порядке временно подключить папку или диск и потом отмонтировать командой:

sudo umount /home/FTP-shared/public sudo umount /home/FTP-shared/upload

Для постоянного доступа к нужным папкам подключаем их посредством fstab. Бэкап файла fstab:

sudo cp /etc/fstab /etc/fstab.old

Открываем файл /etc/fstab:

sudo nano /etc/fstab

и добавляем нужные пути:

/здесь/путь/папки/что/я/хочу/расшарить /home/FTP-shared/public none bind 0 0

Теперь даже при рестарте компьютера информация будет доступна, если сервер за роутером то только в локальной сети. Что бы увидеть фтп-сервер из интернета нужно дать ему внешний ip-адрес. Для этого следует открыть нужный порт (в данном случае 21) для локального адреса (вида 192.168.xxx.xxx) на котором висит сервер, для доступа извне. Следующим шагом нужно дать внешнему динамическому IP-адресу постоянный адрес. Сделать это можно при помощи сервиса DynDNS.com(регистрируемся), создав при помощи его удобный и запоминающийся адрес (вида moi-server.homeip.net). Устанавливаем ddclient:

sudo apt-get install ddclient

Вводим регистрационные данные с DynDNS.com на вопросы пакета. Изменяем ServerName «server» в файле proftpd.conf на ServerName «moi-server.homeip.net». Перезагружаем фтп-сервер:

sudo /etc/init.d/proftpd restart

Какие порты надо открыть:

стандартные порты для FTP : 20 и 21

Плюс дополнительные порты прописываются в  /etc/proftpd/proftpd.conf.old при необходимости:

PassivePorts 60000 60001  (интервал портов, который можно использовать для соединений в пассивном режиме)

MasqueradeAddress ХХХ.ХХХ.ХХХ.ХХХ (Если вы работаете за NAT'ом, эта опция поможет способствовать пассивной передаче данных. Для этого укажите здесь ваш внешний адрес и откройте пассивные порты на файрволле.)

Ошибка при подключении по FTP: "Превышено время ожидания соединения, Не могу получить список каталогов!"

При соединении по ftp к нашему серверу возможно появление следующей ошибки:

Статус: Соединяюсь с 78.46.52.106:21...

Статус: Соединение установлено, ожидание приглашения...

Ответ: 220 FTP Server ready.

Команда: USER ***

Ответ: 331 Password required for ***

Команда: PASS ***

Ответ: 230 User *** logged in

Статус: Соединение установлено

Статус: Получение списка каталогов...

Команда: PWD

Ответ: 257 "/" is the current directory

Команда: TYPE I

Ответ: 200 Type set to I

Команда: PASV

Ответ: 227 Entering Passive Mode (78,46,52,106,171,50).

Команда: MLSD

Ошибка: Превышено время ожидания соединения

Ошибка: Не могу получить список каталогов!

Это означает, что фтп-клиент не может подключиться к серверу в пассивном режиме. Фаерволом на сервере перекрыты порты, которые не используются статически, а динамически выбираются. FTP-клиенты после соединения в пассивном режиме отправляют команду серверу для перехода работы на порты выше 1024 (все порты, что ниже - они зерезервированы, а остальные, за ненадобностью и в целях обеспечения безопасности у нас отключены), поэтому и возникают такие проблемы.

  Для решения данной проблемы необходимо подключаться в активном режиме. Как это сделать в двух наиболее популярных программах описано ниже.

Мини-руководство для пользователей FileZilla:

Вкладка меню Редактирование -> Настройки. Далее открывается окно, в котором слева выбираем вкладку FTP. Справа появлится группа настроек Режим передачи. По умолчанию стоит Пассивный (Рекомендуется). Здесь-то и нужно выбрать Активный режим. Далее нажимаем на кнопку ОК и успешно подключаемся.

Мини-руководство для пользователей Total Commander:

Вкладка меню Конфигурация -> Настройка. Далее открывается окно, в котором слева выбираем вкладку FTP. Справа появлится группа настроек, последним пунктом будет Использовать пассивный режим. По умолчанию стоит галочка, которую нужно снять. Далее нажимаем на кнопку ОК и успешно подключаемся.

  Для остальных ФТП-клиентов алгоритм приблизительно такой же. Иногда проблема не устраняется из-за настроек фаервола на Вашем компьютере или в Вашей сети - как правило пишется Port failed. Решается она перенастройкой фаервола. Также были случаи, когда даже при правильной настройке фтп-клиент не хотел работать. Ситуация разрешилась переустановкой программы.

This article was updated on август 19, 2024