Как установить ProFTPd в Debian 6.0.1

ProFTPd

ProFTPd — FTP-сервер для Linux и UNIX-подобных операционных систем. ProFTPd использует лишь один конфигурационный файл «proftpd.conf», который располагается по умолчанию в:
Linux — «/etc/proftpd/proftpd.conf»
FreeBSD — «/usr/local/etc/proftpd.conf»

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

Сервер поддерживает модули добавляющие SSL/TLS шифрование, аутентификацию через LDAP, работу с SQL, туннелирование соединений через SSH. «Родная» поддержка Microsoft Windows отсутствует. Имеет графический фронтенд gProFTPd.

По материалам Wikipedia — свободная энциклопедия.

Установка ProFTPd сервер на Debian

Убедитесь, что ProFTPd есть в ваших репозиториях:

  1. aptitude search proftpd

Установить как всегда просто:

  1. sudo aptitude install proftpd

Настройка ProFTPd сервера в Debian

Запуск сервера и остановка только «грубым» методом:

  1. sudo /etc/init.d/proftpd restart

Как вы уже знаете вся настройка сервера проходит через один файл:

  1. sudo nano /etc/proftpd/proftpd.conf

Теперь нужно определиться с тем, как мы хотим использовать наш сервер.

Структура сервера

В моем случае:
1) Анонимный доступ на сервер –>
Т.е. любой пользователь введя IP-адрес или доменный адрес попадает в специально созданное окружение (анонимный отсек на сервере) где он имеет определенную структуру папок. Все окружение имеет атрибут READ (только чтение и ничего больше), и только одна папка uploads/ имеет атрибут STOR, т.е. она доступна для записи в нее файлов, при этом удаление файлов запрещено, так же как и их перемещение или переименование.

2) Авторизированный вход на сервер –>
Любой пользователь который имеет аккаунт на сервер может ввести логин/пароль и попасть в свое личное окружение, которое доступно только ему одному, в данном окружение он имеет те же права, что и на сервере, т.е. в своем окружении пользователь хозяин.

3) Необходимые ограничения –>
- Все пользователи «заперты» внутри своего окружения и не могут пройти в каталог выше.
- На загрузку файлов для всех пользователей, включая ananymous стоит жесткое ограничение, файл размером не более 1GB.
- Максимальный размер директории каждого пользователя контролируется сервером (например каждому пользователю выделяется квота 10GB) установленный space-лимит пользователь превысить не может.
- Максимальное количество соединений с ProFTPd-сервером указывается в конфигурационном файле, в моем случае это 10 пользователей одновременно максимум, любое последующие соединение будет сбрасываться с выводом ошибки указывающей, что лимит соединений превышен.
- Вход на сервер от имени учетной записи root запрещен в целях безопасности.
- Протокол IPv6 отключен.
- Максимальное количество child processes ограничено 30-ью в целях безопасности.
- В целях контроля ведутся логи

Реализация

Реализовать всё вышеописанное не сложно, хорошо зная значение директив. Вы можете ознакомиться с ними тут. Далее я приведу пример файла /etc/proftpd/proftpd.conf где я прокомментировал наиболее важные директивы на мой взгляд.

  1. # /etc/proftpd/proftpd.conf -- Это конфигурационный файл сервера
  2.  
  3. # Подключить DSO модули
  4. Include /etc/proftpd/modules.conf
  5.  
  6. # Отключить поддержку IPv6 протокола
  7. UseIPv6             off
  8.  
  9. # Эта опция необходима в тех случаях, когда вы хотите использовать протокол (RFC1413) для
  10. # идентификации пользователя который соединился с сервером
  11. # Если опция включена, сильные задержки при соединении вам обеспечены!
  12. IdentLookups            off
  13.  
  14. # Если вы НЕ хотите дать возможность нормальным пользователям присоединятся к серверу
  15. # вы можете отключить эту опцию или закоментировать
  16. <Limit LOGIN>
  17.   AllowALL
  18. </Limit>
  19.  
  20. ServerName          "DebianFTP"
  21.  
  22. # Типа сервера
  23. # Может быть запущен в виде отдельного сервера (standalone) или в составе суперсервера inetd.
  24. ServerType          standalone
  25. DeferWelcome            on
  26.  
  27. MultilineRFC2228        on
  28. DefaultServer           on
  29. ShowSymlinks            on
  30.  
  31. # опция указывает возможное время простоя соединения без выполнения каких либо действий
  32. # в секундах, по истечению указанного времени, сервер сбрасывает соединение
  33. TimeoutNoTransfer       300
  34. TimeoutStalled          300
  35. TimeoutIdle         2200
  36.  
  37. DisplayLogin                    fuck it !
  38. DisplayChdir                .message true
  39. ListOptions                 "-l"
  40.  
  41. DenyFilter          \*.*/
  42.  
  43. # Крайне важная опция! она "закрывает" каждого пользователя в его домашнем каталоге
  44. # и не дает подняться на уровень выше
  45. DefaultRoot         ~
  46.  
  47. # Users require a valid shell listed in /etc/shells to login.
  48. # Use this directive to release that constrain.
  49. # RequireValidShell     off
  50.  
  51. # Указать порт (стандарт это 21)
  52. Port                                21
  53. TimeoutLogin            20
  54.  
  55. # Важная опция! запрещаем root логин на сервер
  56. RootLogin           off
  57.  
  58. # In some cases you have to specify passive ports range to by-pass
  59. # firewall limitations. Ephemeral ports can be used for that, but
  60. # feel free to use a more narrow range.
  61. # PassivePorts                  49152 65534
  62.  
  63. # If your host was NATted, this option is useful in order to
  64. # allow passive tranfers to work. You have to use your public
  65. # address and opening the passive ports used on your firewall as well.
  66. # MasqueradeAddress     1.2.3.4
  67.  
  68. # This is useful for masquerading address with dynamic IPs:
  69. # refresh any configured MasqueradeAddress directives every 8 hours
  70. <IfModule mod_dynmasq.c>
  71. # DynMasqRefresh 28800
  72. </IfModule>
  73.  
  74. # Важная опция! ограничивает количество "подпроцессов" (child processes) которые
  75. # которые могут быть запущены главным процессом в режиме standalone сервер
  76. # предотвращает возможность DDoS атак на сервер
  77. # без этой диррективы, ваш FTP сервер может превратиться в  fork-бомбу
  78. MaxInstances            30
  79.  
  80. # Группа и юзер от которого запускается сервер
  81. # User              proftpd
  82. User                        nobody
  83. Group               nogroup
  84.  
  85. # права доступа которые присваиваются новым файлам и директориям, по умолчанию 022
  86. Umask               022  022
  87.  
  88. # Разрешить перезапись файлов
  89. AllowOverwrite          on
  90.  
  91. # Uncomment this if you are using NIS or LDAP via NSS to retrieve passwords:
  92. # PersistentPasswd      off
  93.  
  94. # This is required to use both PAM-based authentication and local passwords
  95. # AuthOrder         mod_auth_pam.c* mod_auth_unix.c
  96.  
  97. # Be warned: use of this directive impacts CPU average load!
  98. # Uncomment this if you like to see progress and transfer rate with ftpwho
  99. # in downloads. That is not needed for uploads rates.
  100. #
  101. # UseSendFile           off
  102.  
  103. # Количество попыток ввода пароль перед отсоединением
  104. MaxLoginAttempts        3
  105.  
  106. # Ограничить допустимый размер загружаемых файлов
  107. MaxStoreFileSize        1 Gb
  108.  
  109. # Ограничить допустимый размер скачиваемых файлов
  110. MaxRetrieveFileSize     1 Gb
  111.  
  112. # Логи
  113. TransferLog /var/log/proftpd/xferlog
  114. SystemLog   /var/log/proftpd/proftpd.log
  115.  
  116. <IfModule mod_quotatab.c>
  117. QuotaEngine off
  118. </IfModule>
  119.  
  120. <IfModule mod_ratio.c>
  121. Ratios off
  122. </IfModule>
  123.  
  124. # Delay engine reduces impact of the so-called Timing Attack described in
  125. # http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02
  126. # It is on by default.
  127. <IfModule mod_delay.c>
  128. DelayEngine on
  129. </IfModule>
  130.  
  131. <IfModule mod_ctrls.c>
  132. ControlsEngine        off
  133. ControlsMaxClients    2
  134. ControlsLog           /var/log/proftpd/controls.log
  135. ControlsInterval      5
  136. ControlsSocket        /var/run/proftpd/proftpd.sock
  137. </IfModule>
  138.  
  139. <IfModule mod_ctrls_admin.c>
  140. AdminControlsEngine off
  141. </IfModule>
  142.  
  143. #
  144. # Alternative authentication frameworks
  145. #
  146. #Include /etc/proftpd/ldap.conf
  147. #Include /etc/proftpd/sql.conf
  148.  
  149. #
  150. # This is used for FTPS connections
  151. #
  152. #Include /etc/proftpd/tls.conf
  153.  
  154. #
  155. # Useful to keep VirtualHost/VirtualRoot directives separated
  156. #
  157. #Include /etc/proftpd/virtuals.con
  158.  
  159. # ANONYMOUS
  160. # Конфигурация для анонимного пользователя
  161.  
  162. <Anonymous ~ftp>
  163.  
  164.   # Разрешить соединение, даже если оно запрещено выше
  165.   # т.е. данная директива работает только в рамках <Anonymous ~ftp>
  166.    <Limit LOGIN>
  167.      AllowALL
  168.    </Limit>
  169.  
  170.   # Запретить WRITE везде в анонимном окружении (chroot)
  171.   <Limit WRITE>
  172.     DenyAll
  173.   </Limit>
  174.  
  175. # Юзер и группа анонимуса
  176. User                ftp
  177. Group                            ftp
  178. # Group                 nogroup
  179.  
  180. # We want clients to be able to login with "anonymous" as well as "ftp"
  181. UserAlias           anonymous ftp
  182.  
  183. # Запретить перезапись файлов для анонимус окружения
  184. # даже если выше перезапись разрешалась
  185. AllowOverwrite off
  186.  
  187. # Cosmetic changes, all files belongs to ftp user
  188. DirFakeUser on ftp
  189. DirFakeGroup   on ftp
  190.  
  191. RequireValidShell       off
  192.  
  193. # Максимальное количество анонимус соединений
  194. # + message
  195. MaxClients          10 "Sorry, max %m users -- try again later"
  196.  
  197. # We want 'welcome.msg' displayed at login, and '.message' displayed
  198. # in each newly chdired directory.
  199. DisplayLogin            welcome.msg
  200. DisplayChdir               .message
  201.  
  202. # upload директория на сервере, которая разрешает складирование и хранение файлов
  203. # но не разрешает перезапись, удаление файлов или создания файлов в ней
  204.   <Directory uploads/*>
  205.    <Limit WRITE>
  206.     DenyAll
  207.    </Limit>
  208.  
  209.    <Limit STOR>
  210.     AllowALL
  211.    </Limit>
  212.   </Directory>
  213. </Anonymous>

Вы можете скачать этот файл proftpd.conf
Скачать pdf-файл со списком всех дирректив мжно тут

Как вы могли заметить, анонимный юзер, это на самом деле юзер в системе с именем ftp, его нужно создать:

  1. sudo adduser ftp

Закрыть ему shell:

  1. sudo nano /etc/passwd

запись должна выглядеть так (выделено синим цветом):
ftp:x:1001:1001:asd,asda,dsa,ads,asd:/home/ftp:/bin/false

Какие папки создавать, а какие нет – ваше дело. Я сделал так:
~/backup
~/dist
~/archives
~/docs
~/uploads — помним, что в эту папку пользователь может загружать файлы
Вы можете увидеть структуру папок на скриншотах ниже.

Это были настройки для анонимных пользователей, но выше я писал, что присоединится к серверу могут не только анонимы, но авторизированные пользователи, которые имеют аккаунты на сервере, это очень просто, вы создаете пользователя, назначаете ему логин и пароль, задаете домашний каталог и ставите необходимые ограничения:

  1. sudo adduser mark
  1. sudo adduser tom
  1. sudo adduser jack

Теперь любой из этих пользователей может присоединится к серверу введя свои логин/пароль, и попасть в свой домашний каталог, в котором он будет благополучно заперт, однако эти пользователи являются привилегированными, по этому они являются полными «хозяевами» своих окружений и только root может удалить их файлы или даже учетную запись.

После того как вы приведете конфигурационный файл к должному виду, создадите аноним-пользователя (дополнительных пользователей) и создадите структуру папок, перезапустите сервер:

  1. sudo /etc/init.d/proftpd restart

И наслаждайтесь результатом.

Вход на сервер с аутентификацией:

FTP with login

FTP with login

Вход на сервер для анонима:

FTP Ananymous

FTP Ananymous


Источник статьи