Инструменты пользователя

Инструменты сайта


linux:proftp

ProFTPd

FTP

Соединение осуществляется по двум каналам, передача команд и передача данных, данные могут передаваться в двух режимах:
Активный режим - клиент начинает слушать у себя определенный порт и просит сервер подключится по нему
Пассивный режим - клиент сам подключается к серверу по порту из его диапазона
В обоих случаях нужно настраивать файер на входящие соединения, в первом на клиенте, во втором на сервере

Установка

# apt install proftpd
# systemctl enable proftpd

Базовая конфигурация

Основной конфигурационный файл /etc/proftpd/proftpd.conf

UseIPv6 off
PassivePorts 3000 3020
DefaultRoot ~ # Ограничить пользователей только домашней папкой
 
# Ограничение входа
<Limit LOGIN>
 AllowUser user1,user2
 DenyAll
</Limit>
 
# Определение клиента, для корректности работы через NAT 
<IfModule mod_ifsession.c>
 <class internal>
  From 192.168.0.0/21[24]
 </class>
 <IfClass !internal>
  MasqueradeAddress public-ip
 </IfClass>
</IfModule>

Изначально работает в UTF8, русские символы в ней поддерживаются, если создать их в другой кодировке то с utf естественно правильно не отобразятся, сменить у сервера кодировку:

#LangDefault ru_RU.UTF8
#LangPath /usr/share/locale
#LangEngine on
#UseEncoding UTF-8 WINDOWS-1251

Виртуальный пользователь

Создаем виртуального пользователя:

# ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=username --uid=33 --gid=33 --home=/../folder-ftp --shell=/usr/sbin/nologin

Uid и Gid можно указывать любые, существующие или нет, в примере указан как у системного пользователя www-data. Так же, можно нескольким пользователям задавать одинаковые id.

Создаем дополнительный конфиг /etc/proftpd/conf.d/virtual_file.conf:

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

Возможно имеет смысл создать отдельного пользователя, с минимальными правами, что бы использовать его ID-шники, а не www-data.

Настройка доступа

После создания виртуальных пользователей, выбранную папку можно задать им домашней, и включить директиву DefaultRoot, что бы ограничить их только этой папкой, так же, доступ должен соответствовать на уровне ФС.
Далее, создаем отдельный конфиг для директорий /etc/proftpd/conf.d/example.conf

<Directory /../folder-ftp>
  <Limit WRITE>
    Order deny,allow
    AllowUser username
  </Limit>
</Directory>

Список активных модулей, находится в файле: /etc/proftpd/modules.conf

  • mod_delay.c - разработан что бы усложнить определенный тип утечки информации, «временная атака»
  • mod_ctrls.c - реализует серверную часть сокета Unix, для связи с запущенным proftpd-демоном
  • mod_quotatab.c - для использования квот
  • mod_ratio.c - позволяет установить ограничения на скорость
  • mod_ifsession - позволяет применять конфигурации к определенным сеансам, разграничивать их

Шифрование TLS

В основном файле конфигурации раскомментируем строку Include /etc/proftpd/tls.conf.
Идем в этот файл и убираем комментарий со следующих строк:

TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                             SSLv23
...
TLSRSACertificateFile                   /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile                /etc/ssl/private/proftpd.key
...
TLSOptions                              NoCertRequest EnableDiags NoSessionReuseRequired
...
TLSVerifyClient                         off
...
TLSRequired                             on

Затем, генерируем сертификат:

# openssl req -x509 -nodes -newkey rsa:2048 -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt -subj "/C=RU/ST=SPb/L=SPb/O=Global Security/OU=IT Department/CN=ftp.hostname.local/CN=ftp"
linux/proftp.txt · Последнее изменение: 2023/05/01 05:07 — admin