Настройка FTP в Ubuntu

Чем плох vsftpd? Он не поддерживает конвертирование кодировок на лету. Это значит, что если юзер загружает файлы с русскими именами, то у себя на сервере вы получите файлы с крюкозябрами.

Поэтому, я пересел на аналог — ProFTPd.

apt-get install proftpdCode language: PowerShell (powershell)

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

Мы будем использовать виртуальных пользователей для FTP, вместо реальных пользователей системы. Создаём новый конфиг: /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.cCode language: PowerShell (powershell)

Создаём виртуального пользователя, который будет ссылаться на реального. Id реального пользователя (например aworker или www-data) нужно передать в параметрах —uid и —gid.

ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=gc_sliva --uid=1000 --gid=1000 --home=/home/area37.ru/html/gc_sliva --shell=/usr/sbin/nologinCode language: PowerShell (powershell)

Перезагружаем FTP и тестим:

systemctl restart proftpd

Теперь установим TLS-шифрование. В файле <strong>/etc/proftpd/proftpd.conf</strong> нужно раскомментить строчку:

Include /etc/proftpd/tls.confCode language: PowerShell (powershell)

Открываем /etc/proftpd/tls.conf, содержимое:

#
# Proftpd sample configuration for FTPS connections.
#
# Note that FTPS impose some limitations in NAT traversing.
# See http://www.castaglia.org/proftpd/doc/contrib/ProFTPD-mini-HOWTO-TLS.html
# for more information.
#
<IfModule mod_tls.c>
TLSEngine                               on
TLSLog                                  /var/log/proftpd/tls.log
TLSProtocol                             SSLv23
#
# Server SSL certificate. You can generate a self-signed certificate using 
# a command like:
#
# openssl req -x509 -newkey rsa:1024 
#          -keyout /etc/ssl/private/proftpd.key -out /etc/ssl/certs/proftpd.crt 
#          -nodes -days 365
#
# The proftpd.key file must be readable by root only. The other file can be
# readable by anyone.
#
# chmod 0600 /etc/ssl/private/proftpd.key 
# chmod 0640 /etc/ssl/private/proftpd.key
# 
TLSRSACertificateFile                   /etc/ssl/certs/proftpd.crt
TLSRSACertificateKeyFile                /etc/ssl/private/proftpd.key
#
# CA the server trusts...
#TLSCACertificateFile            /etc/ssl/certs/CA.pem
# ...or avoid CA cert and be verbose
#TLSOptions                      NoCertRequest EnableDiags
# ... or the same with relaxed session use for some clients (e.g. FireFtp)
TLSOptions                      NoCertRequest EnableDiags NoSessionReuseRequired
#
#
# Per default drop connection if client tries to start a renegotiate
# This is a fix for CVE-2009-3555 but could break some clients.
#
#TLSOptions                             AllowClientRenegotiations
#
# Authenticate clients that want to use FTP over TLS?
#
TLSVerifyClient                         off
#
# Are clients required to use FTP over TLS when talking to this server?
#
TLSRequired                             on
#
# Allow SSL/TLS renegotiations when the client requests them, but
# do not force the renegotations.  Some clients do not support
# SSL/TLS renegotiations; when mod_tls forces a renegotiation, these
# clients will close the data connection, or there will be a timeout
# on an idle data connection.
#
#TLSRenegotiate                          required off
</IfModule>Code language: PowerShell (powershell)

Генерируем сертификат:

openssl req -x509 -nodes -newkey rsa:1024 -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.dmosk.local/CN=ftp"Code language: PowerShell (powershell)

Перезагружаем FTP:

systemctl restart proftpdCode language: PowerShell (powershell)