Чем плох vsftpd? Он не поддерживает конвертирование кодировок на лету. Это значит, что если юзер загружает файлы с русскими именами, то у себя на сервере вы получите файлы с крюкозябрами.
Поэтому, я пересел на аналог — ProFTPd.
apt-get install proftpd
Code 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.c
Code 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/nologin
Code language: PowerShell (powershell)
Перезагружаем FTP и тестим:
systemctl restart proftpd
Теперь установим TLS-шифрование. В файле <strong>/etc/proftpd/proftpd.conf</strong> нужно раскомментить строчку:
Include /etc/proftpd/tls.conf
Code 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 proftpd
Code language: PowerShell (powershell)