Итак, у нас задача установить и настроить ProFTPD сервер на Debian Linux, допустим, для того, чтобы получать доступ к сайтам расположенным на нашем сервере в каталоге /home. Сайты расположены каждый в своей директории, и настроены виртуальные хосты.
Для установки наберём следующую команду:
apt-get install proftpd
Система загрузит нужные для установки модули с сервера debian и приступит к установке. Во время установки в систему будет добавлен пользователь ftp и создана его домашняя директория /home/var.
Если Вас не устраивает лишняя директория в /home, Вы можете поступить как я, и переместить его домашнюю директорию, например, в /var/ftp. Делается это командами:
# меняем домашнюю директорию пользователя ftp на /var/ftp
usermod –d /var/ftp ftp
# копируем файл welcome.msg в нужную директорию
cp /home/var/welcome.msg /var/ftp
# удаляем папку из /home и файл
rm /home/ftp/welcome.msg rmdir /home/ftp
Ненужную директорию спрятали, теперь переходим непосредственно к конфигурированию и настройке ProFTPD сервера.
Открывает для редактирования файл /etc/proftpd/proftpd.conf в помощью любого текстового редактора, например, nano:
nano /etc/proftpd/proftpd.conf
Далее я привожу пример файл proftpd.conf с подробными пояснениями:
# # /etc/proftpd/proftpd.conf -- This is a basic ProFTPD configuration file. # To really apply changes reload proftpd after modifications. # # Includes DSO modules Include /etc/proftpd/modules.conf UseIPv6 on # включаем использование IP version 6 ServerName "FTP" # имя ftp сервера что угодно ServerType standalone # если часто юзают фтп то выбираем то что стоит DeferWelcome off RootLogin off # запрещаем подключать от пользователя root # определять имя хоста клиента по IP адресу (желательно отключать для ускорения доступа) UseReverseDNS off # использование протокола ident (RFC 1413) для идентификации подслединившегося клиента; # рекомендуется отключить, все равно этот протокол никто больше не использует; # область действия - основной сервер, Global, VirtualHost IdentLookups off MultilineRFC2228 on DefaultServer on ShowSymlinks on TimeoutNoTransfer 600 TimeoutStalled 600 TimeoutIdle 1200 DisplayLogin welcome.msg DisplayChdir .message true ListOptions "-l" DenyFilter *.*/ # Автоматическое удаление недогруженного файла. DeleteAbortedStores on # директория на которую устанавливается сервер # (сейчас указана home директория подлюченного пользователя) DefaultRoot ~ # авторизовывать клиента только если он имеет основной shell из списка /etc/shells; # область действия - основной сервер, Global, VirtualHost, Anonymous (ВАЖНО!!!) RequireValidShell off # Порт сервера Port 21 # PassivePorts 49152 65534 # диапазон для пассивного режима ftp # If your host was NATted, this option is useful in order to # allow passive tranfers to work. You have to use your public # address and opening the passive ports used on your firewall as well. # MasqueradeAddress 1.2.3.4 # DynMasqRefresh 28800 # максимальное число одновременно запускаемых процессов в режиме standalone MaxInstances 30 # Пользователь и группа от которого работает сервер User proftpd Group nogroup # права с которыми будут создаваться файлы и папки Umask 022 022 # разрешить перезаписывать существующие файлы, # область действия - server config, VirtualHost, Anonymous, Directory, Global, .ftpaccess AllowOverwrite on # держать ли открытыми файлы /etc/passwd и /etc/group во время работы proftpd, включая chroot # PersistentPasswd off # This is required to use both PAM-based authentication and local passwords # AuthOrder mod_auth_pam.c* mod_auth_unix.c # UseSendFile off # обрабатывать ли сайт ftpusers в котором перечислены пользователи, # которым нужно запретить доступ по ftp UseFtpUsers on TransferLog /var/log/proftpd/xferlog SystemLog /var/log/proftpd/proftpd.log QuotaEngine off Ratios off # Delay engine reduces impact of the so-called Timing Attack described in # http://security.lss.hr/index.php?page=details&ID=LSS-2004-10-02 # It is on by default. DelayEngine on ControlsEngine off ControlsMaxClients 2 ControlsLog /var/log/proftpd/controls.log ControlsInterval 5 ControlsSocket /var/run/proftpd/proftpd.sock AdminControlsEngine off # # Подключение файлов конфигурации для авторизиции по разным протоколам # #Include /etc/proftpd/ldap.conf #Include /etc/proftpd/sql.conf # # Используется для FTPS соединений # #Include /etc/proftpd/tls.conf # Базовая конфигурация и директории для анонимных пользователей # # User ftp # Group nogroup # # We want clients to be able to login with "anonymous" as well as "ftp" # UserAlias anonymous ftp # # Cosmetic changes, all files belongs to ftp user # DirFakeUser on ftp # DirFakeGroup on ftp # # RequireValidShell off # # # Limit the maximum number of anonymous logins # MaxClients 10 # # # We want 'welcome.msg' displayed at login, and '.message' displayed # # in each newly chdired directory. # DisplayLogin welcome.msg # DisplayChdir .message # # # Limit WRITE everywhere in the anonymous chroot # # # DenyAll # # # # # Uncomment this if you're brave. # # # # # Umask 022 is a good standard umask to prevent new files and dirs # # # (second parm) from being group and world writable. # # Umask 022 022 # # # # DenyAll # # # # # # AllowAll # # # # # #
Подробнее хотел бы пояснить следующих несколько директив: RootLogin, UseFtpUsers, DefaultRoot и RequireValidShell.RootLogin – включает/отключает доступ по ftp пользователю root. Рекомендую отключить эту директиву и не использовать доступ от root в целях безопасности, так как по ftp передаются не зашифрованный пароль.
UseFtpUsers – обрабатывать ли файл ftpusers. В данном файле находится имена пользователей, которым запрещён доступ по ftp. Включаем его на всякий случай.
DefaultRoot – директория для доступа. Устанавливаем его в «~», то есть при заходе по ftp, пользователь будет попадать в свой домашний каталог и не сможет подняться выше него.
RequireValidShell – разрешить/запретить авторизовывать клиента только если он имеет основной shell из списка /etc/shells. Лично я, споткнулся именно на этой директиве. Дальше Вы поймёте почему.:)
Итак, остался последний шаг, а именно добавления своего ftp пользователя в систему. К примеру, мы хотим подключаться по ftp от пользователя “alexey” с паролем “56s4a27e”. Добавляем его в систему. Сразу запрещаем доступ это пользователя к системе через shell и указываем домашнюю директорию /home. Делается это следующей командой:
useradd –home /home –shell /bin/false –group nogroup alexey
Когда пользователь добавлен, перезагружаем proftpd сервер, командой:
/etc/init.d/proftpd restart
Если перезагрузка сервера прошла успешно, продолжаем дальше. Если же нет, ищем ошибки в файле конфигурации proftpd.conf. Пробуем подключится через любой ftp менеджер, например, через Total Commander используя имя пользователя “alexey” с паролем “56s4a27e”.