пятница, 27 сентября 2013 г.

Настройка анонимного FTP-сервера Proftpd

Для чего нужен анонимный FTP? Ну например для того, чтобы поделиться своими файлами с другими людьми без регистрации на сервере.

В этой заметке я опишу, как я настраивал анонимный FTP сервер Proftpd.
Цель у меня была такая, у меня есть много электронной литературы, я хочу ей поделиться с людьми. Для этих целей я придумал использовать FTP. Еще учел возможность того, чтобы люди могли не только скачивать литературу, но и добавлять свою. Дальше все описано как это сделать.
Установка:
# aptitude install proftpd
Во время установки появится окно выбора режима работы сервера, выбираем standalone, т.к. не используем inetd (если что, это можно поменять позже).

После установки создается пользователь ftp.

Так выглядит дефолтный конфиг (я убрал комментарии):
# cat /etc/proftpd/proftpd.conf
Include /etc/proftpd/modules.conf

UseIPv6 on
IdentLookups off

ServerName "Debian"
ServerType standalone

DeferWelcome off

MultilineRFC2228 on
DefaultServer on
ShowSymlinks on

TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200

DisplayLogin                    welcome.msg
DisplayChdir               .message true
ListOptions                 "-l"

DenyFilter \*.*/

Port 21

<IfModule mod_dynmasq.c>
</IfModule>

MaxInstances 30

User proftpd
Group nogroup

Umask 022  022

AllowOverwrite on

TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>

<IfModule mod_ratio.c>
Ratios off
</IfModule>

<IfModule mod_delay.c>
DelayEngine on
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>

Include /etc/proftpd/conf.d/

Вся настройка сервера состоит в правке этого конфига, этим мы и займемся.
Далее следует содержимое работающего конфига с комментариями:
# cat /etc/proftpd/proftpd.conf 
Include /etc/proftpd/modules.conf

# Выключаем ipv6
UseIPv6 off

IdentLookups off

# Имя сервера, тип и адрес администратора
ServerName "Мой FTP сервер"
ServerType standalone
ServerAdmin [email protected]

DeferWelcome off

# Запрет логина руту
RootLogin off

MultilineRFC2228 on
DefaultServer on
ShowSymlinks on

# Отключить определение имени хоста по ip, (ускоряем доступ)
UseReverseDNS off

TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200

DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions             "-l"

DenyFilter \*.*/

# Удалять недогруженные файлы
DeleteAbortedStores on

RequireValidShell off
Port 21

# Максимальное количество процессов
MaxInstances 10

# Юзер и группа, от которой запускается сервер
User nobody
Group nogroup

# Права на создаваемые файлы и каталоги
Umask 022  022

# Разрешаем перезаписывать файлы
AllowOverwrite on

# Пути к логам
TransferLog /var/log/proftpd/xferlog
SystemLog   /var/log/proftpd/proftpd.log

# Ограничение размера загружаемого и скачиваемого файлов
MaxStoreFileSize 100 Mb
MaxRetrieveFileSize 100 Mb

<IfModule mod_quotatab.c>
QuotaEngine off
</IfModule>

<IfModule mod_ratio.c>
Ratios off
</IfModule>

<IfModule mod_delay.c>
DelayEngine on
</IfModule>

<IfModule mod_ctrls.c>
ControlsEngine        off
ControlsMaxClients    2
ControlsLog           /var/log/proftpd/controls.log
ControlsInterval      5
ControlsSocket        /var/run/proftpd/proftpd.sock
</IfModule>

<IfModule mod_ctrls_admin.c>
AdminControlsEngine off
</IfModule>

# Непосредственная настройка анонимного FTP сервера
 <Anonymous /raid/ftp>
   User ftp
   Group nogroup
   # Алиас на anonymous
   UserAlias anonymous ftp

   DirFakeUser on ftp
   DirFakeGroup on ftp

   RequireValidShell off

   # Максимальное количество анонимов
   MaxClients 10

   DisplayLogin welcome.msg
   DisplayChdir .message

   # Запрет закачки файлов в окружении анонима
   <Directory *>
     <Limit WRITE>
       DenyAll
     </Limit>
   </Directory>

   # Настройка каталога, в которую аноним может закачивать файлы
   # но не удалять их
   <Directory "Сюда можете залить свои книги"/*>
      Umask 022  022
        <Limit STOR MKD>
               AllowAll
        </Limit>
    </Directory>

 </Anonymous>

Include /etc/proftpd/conf.d/

Создадим каталоги, в которых будут наши файлы:
# mkdir /raid/ftp
# mkdir /raid/ftp/"Сюда можете залить свои книги"

Назначим владельца юзера ftp:
# chown -R ftp:nogroup /raid/ftp/

Перезапустим сервис:
# /etc/init.d/proftpd restart

Проверка:
1. Пробуем скачать файл (все должно работать нормально):


2. Пробуем залить файл в корень (у нас ничего не выйдет, ведь так задумано):

3. Пробуем залить файл в "Сюда можете залить свои книги" (тут уже можно заливать файлы, мы так настроили, но удалять их нельзя):

4. Пробуем залогиниться под рутом (мы запретили логин под рутом):

6. Логинимся под разрешенным пользователем (amet13) (мы окажемся в домашнем каталоге пользователя:

Все работает, быстро, надежно, просто.
В скором времени на фтпшнике будет лежать очень много книг.

В качестве ftp-клиента рекомендую использовать FileZilla, безусловно лучший FTP-клиент.

[ссылки]:
http://www.dc.volia.com/articles-notes/215-proftpd
http://www.adm-blog.ru/view/ustanovka_i_nastrojka_proftpd_na_debian.html
http://www.proftpd.org/docs/configs/anonymous.conf
http://www.proftpd.org/docs/directives/linked/
http://pclinuxos.su/index.php/server/ftp-server/137-nastrojka-ftp-servera-ispolzuem-proftpd

6 комментариев:

Анонимный комментирует...

Норм статья, очень понятно и читабельно оформлено, приятно было настраивать.

Анонимный комментирует...

Использовал ваш конфиг, поменял только путь на /srv/ftp вместо /raid/ftp

gateway:~ # telnet localhost 21
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 ProFTPD 1.3.4d Server ( FTP ) [127.0.0.1]
CWD
530 Please login with USER and PASS


Почему просит логин и пароль для чтения каталога?

Amet Umerov комментирует...

# ftp localhost
Connected to localhost.localdomain.
220 ProFTPD 1.3.4a Server (Amet13's FTP) [127.0.0.1]
Name (localhost:root): anonymous
331 Анонимное подключение, укажите ваш e-mail адрес в качестве пароля
Password: [email protected]
230 Анонимное подключение, ограничения применены
Remote system type is UNIX.
Using binary mode to transfer files.

Анонимный комментирует...

Разобрался - надо было пассивный режим отключить в клиенте. Спасибо за статью.
У вас правда опечатку нашёл:
в команде "# chown -R ftp.nogroup /raid/ftp/" между ftp и nogroup должно быть двоеточие вместо точки.

Amet Umerov комментирует...

Спасибо. Исправлено.

Анонимный комментирует...

Спасибо а то замучался pure-ftpd настраивать, снёс к чёрту и поставил Pro и теже грабли логин пароль спрашивает - пока у вас не увидел

DirFakeUser on ftp
DirFakeGroup on ftp