Чим SFTP відрізняється від звичайного FTP і vsftpd
SFTP (SSH File Transfer Protocol) — це передавання файлів поверх звичайного SSH-з'єднання на порту 22. Окремий сервер для нього не потрібен: коли SSH вже працює — див. статтю про перше підключення до VDS по SSH — SFTP вже доступний. Увесь трафік, включно з логіном і паролем, шифрується автоматично.
vsftpd — це окремий сервер класичного FTP, який за замовчуванням передає дані й паролі у відкритому вигляді. Щоб отримати шифрування, vsftpd налаштовують явно на FTPS (FTP поверх TLS) — це інший протокол, зі своїми портами й особливостями пасивного режиму. Без жорсткої прив'язки до старих FTP-клієнтів для нових проєктів простіше й безпечніше одразу застосовувати SFTP.
SFTP через SSH: користувач без shell-доступу
Для передавання файлів не обов'язково давати користувачу повноцінний доступ до командного рядка. Створіть окремого користувача з оболонкою, обмеженою тільки SFTP:
useradd -m -s /usr/sbin/nologin sftpuser
passwd sftpuser
Оболонка nologin забороняє вхід по SSH у звичайному сенсі, але не заважає SFTP-підсистемі, бо вона обробляється окремо від командної оболонки на рівні конфігурації sshd.
Обмеження користувача власною папкою (chroot)
Щоб користувач не міг вийти за межі своєї директорії і побачити решту файлової системи, налаштуйте chroot у /etc/ssh/sshd_config:
Match User sftpuser
ChrootDirectory /home/sftpuser
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
Для роботи chroot директорія /home/sftpuser і всі батьківські папки до неї повинні належати root і не мати права запису для групи та інших:
chown root:root /home/sftpuser
chmod 755 /home/sftpuser
mkdir /home/sftpuser/upload
chown sftpuser:sftpuser /home/sftpuser/upload
Після правки конфігурації перевірте синтаксис і перезапустіть SSH:
sshd -t
systemctl restart sshd
Детальніше про безпечне налаштування самого sshd — у статті про SSH Hardening.
Встановлення і налаштування vsftpd з TLS
Коли класичний FTP усе ж таки потрібен — скажімо, для legacy-клієнта — встановлюйте vsftpd і одразу вмикайте шифрування:
apt install vsftpd -y
У файлі /etc/vsftpd.conf увімкніть TLS і заборонте анонімний доступ:
anonymous_enable=NO
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
force_local_data_ssl=YES
force_local_logins_ssl=YES
Без останніх двох параметрів сервер дозволить підключення і без шифрування, що зводить нанівець увесь сенс сертифіката.
Firewall і пасивний режим FTP
FTP застосовує два з'єднання: керівне на порту 21 і окреме для передавання даних. У пасивному режимі порт для даних обирається з діапазону, який слід явно відкрити у файрволі. Задайте діапазон у конфігу:
pasv_min_port=40000
pasv_max_port=40100
І відкрийте порти 21 і 40000-40100 — як налаштувати правила файрволу на VDS, описано у статті про налаштування UFW. Для SFTP окремих портів відкривати не треба — застосовується той самий порт 22, що і для SSH.
Що обрати: SFTP чи vsftpd
Підсумковий чек-лист:
- Для нового проєкту без прив'язки до старих FTP-клієнтів застосовуйте SFTP — менше портів, вбудоване шифрування, один сервіс замість двох.
- Для SFTP-користувачів завжди налаштовуйте chroot, щоб обмежити доступ їхньою власною папкою.
- Якщо потрібен саме vsftpd — обов'язково вмикайте
ssl_enableі забороняйте анонімний вхід. - Для vsftpd відкрийте порт 21 і діапазон пасивних портів у файрволі, для SFTP достатньо порту 22.
- Періодично перевіряйте список користувачів із SFTP/FTP-доступом і видаляйте неактуальних.