SFTP, FTPS и FTP решают одну задачу — передают файлы между клиентом и сервером, но используют разные протоколы и заметно отличаются по безопасности и сложности настройки.
Для доступа разработчика или администратора к современному Linux-серверу обычно следует выбирать SFTP. Он работает через SSH, использует одно соединение и не требует установки отдельного FTP-сервера.
FTPS нужен преимущественно для совместимости с внешними системами, которые поддерживают FTP с TLS, но не умеют работать по SFTP. Обычный FTP передаёт логин, пароль и данные без шифрования, поэтому через интернет его использовать не следует.
Короткий выбор протокола
- SFTP: основной вариант для администрирования серверов, загрузки файлов сайта, резервных копий и автоматизации.
- FTPS: подходит для старых интеграций, оборудования и корпоративных систем, которым требуется именно FTP поверх TLS.
- FTP: допустим только внутри изолированной доверенной сети либо для публичной анонимной раздачи некритичных файлов.
Чем отличаются SFTP, FTPS и FTP
SFTP
SFTP расшифровывается как SSH File Transfer Protocol. Это часть OpenSSH, а не расширение обычного FTP.
- Работает через SSH, обычно на порту
22. - Шифрует авторизацию, команды и файлы.
- Поддерживает вход по паролю и SSH-ключу.
- Обычно использует одно сетевое соединение.
- Поддерживается WinSCP, FileZilla, OpenSSH и большинством серверных инструментов.
SFTP лучше всего подходит для разработчиков, администраторов и автоматизированной передачи файлов между серверами.
FTPS
FTPS — это обычный FTP, защищённый TLS. Его не следует путать с SFTP: протоколы несовместимы и требуют разных серверных служб.
- Использует TLS-сертификат.
- Шифрует авторизацию и передачу файлов.
- В явном режиме обычно подключается к порту
21и затем включает TLS. - Для пассивного режима требует дополнительный диапазон портов.
- Сложнее работает через NAT, прокси и строгий firewall.
FTPS имеет смысл использовать, если клиентская программа или внешняя система не поддерживает SFTP.
FTP
Обычный FTP передаёт логин, пароль и файлы без шифрования. Перехватив сетевой трафик, атакующий может получить учётные данные и содержимое файлов.
FTP не подходит для доступа к production-серверу через интернет. Если старое устройство поддерживает только FTP, его следует разместить в изолированной сети и ограничить доступ firewall.
Рекомендуемый вариант: SFTP через OpenSSH
Пример рассчитан на AlmaLinux и другие RHEL-совместимые системы с systemd. Команды выполняются с правами root или через sudo.
Установка и запуск OpenSSH
dnf install -y openssh-server systemctl enable --now sshd systemctl status sshd --no-pager
Если используется стандартный порт SSH 22, разрешаем сервис в firewalld:
firewall-cmd --permanent --add-service=ssh firewall-cmd --reload
Если SSH работает на нестандартном порту, открывайте именно его, например:
firewall-cmd --permanent --add-port=228/tcp firewall-cmd --reload
Не закрывайте текущую SSH-сессию, пока не проверите подключение в новом окне терминала.
Создание изолированного SFTP-пользователя
Создадим отдельную группу и пользователя без доступа к командной оболочке:
groupadd --system sftpusers useradd \ --no-create-home \ --home-dir /upload \ --shell /sbin/nologin \ --gid sftpusers \ sftp_user passwd sftp_user
Создаём корневой каталог изоляции и отдельную директорию, доступную для записи:
install -d \ -o root \ -g root \ -m 0755 \ /var/sftp/sftp_user install -d \ -o sftp_user \ -g sftpusers \ -m 0750 \ /var/sftp/sftp_user/upload
Каталог, указанный в ChrootDirectory, должен принадлежать root и не должен быть доступен пользователю для записи. Поэтому загрузка файлов разрешается только во вложенную директорию /upload.
Настройка sshd
На современных версиях AlmaLinux можно создать отдельный конфигурационный файл:
grep -n "^[[:space:]]*Include" /etc/ssh/sshd_config mcedit /etc/ssh/sshd_config.d/90-sftp.conf
Добавляем:
Match Group sftpusers ChrootDirectory /var/sftp/%u ForceCommand internal-sftp -d /upload AllowTcpForwarding no X11Forwarding no PermitTunnel no PermitTTY no
Если основной файл /etc/ssh/sshd_config не подключает каталог sshd_config.d, этот блок нужно добавить в конец основного файла.
Проверяем синтаксис перед применением:
sshd -t
Если команда не вывела ошибок, перечитываем конфигурацию:
systemctl reload sshd
Подключение к SFTP
Через терминал:
sftp sftp_user@server.example.com
Для нестандартного порта:
sftp -P 228 sftp_user@server.example.com
Настройки WinSCP:
- протокол:
SFTP; - сервер: домен или IP-адрес;
- порт:
22либо настроенный SSH-порт; - имя пользователя:
sftp_user; - начальный каталог:
/upload.
Аутентификация SFTP по SSH-ключу
Для автоматизации и постоянного административного доступа SSH-ключ предпочтительнее пароля.
На клиентском компьютере создаём ключ:
ssh-keygen -t ed25519 -a 64
Для пользователей в chroot удобно хранить публичные ключи в отдельном системном каталоге:
install -d -o root -g root -m 0755 /etc/ssh/authorized_keys install \ -o root \ -g root \ -m 0600 \ /dev/null \ /etc/ssh/authorized_keys/sftp_user mcedit /etc/ssh/authorized_keys/sftp_user
В файл добавляется одна строка с публичным ключом, например начинающаяся с ssh-ed25519.
В глобальной части конфигурации sshd, до блока Match, указываем:
AuthorizedKeysFile .ssh/authorized_keys /etc/ssh/authorized_keys/%u
После изменения снова проверяем конфигурацию:
sshd -t && systemctl reload sshd
Отключать парольную авторизацию следует только после успешной проверки входа по ключу.
Когда нужен FTPS
FTPS выбирают, когда внешняя программа, партнёрская система или оборудование требует FTP, но поддерживает защиту соединения через TLS.
Для FTPS потребуется:
- сервер
vsftpd; - действующий TLS-сертификат;
- порт
21; - диапазон портов для пассивного режима;
- отдельные пользователи или виртуальные учётные записи;
- настройка firewall и, при необходимости, NAT.
Установка vsftpd
dnf install -y vsftpd systemctl enable --now vsftpd systemctl status vsftpd --no-pager
Основные настройки FTPS
Редактируем файл:
mcedit /etc/vsftpd/vsftpd.conf
Минимальная конфигурация явного FTPS:
anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES allow_writeable_chroot=NO ssl_enable=YES force_local_logins_ssl=YES force_local_data_ssl=YES ssl_sslv2=NO ssl_sslv3=NO rsa_cert_file=/etc/pki/tls/certs/files.example.com.fullchain.pem rsa_private_key_file=/etc/pki/tls/private/files.example.com.key pasv_enable=YES pasv_min_port=40000 pasv_max_port=40100 xferlog_enable=YES
Пути к сертификату и закрытому ключу нужно заменить на реальные. Самоподписанный сертификат допустим для теста, но для production лучше использовать сертификат доверенного центра сертификации.
Для FTPS-пользователя корневой домашний каталог также лучше оставить недоступным для записи, а загрузку разрешить во вложенную директорию:
chown root:root /srv/ftps/ftps_user chmod 0755 /srv/ftps/ftps_user install -d \ -o ftps_user \ -g ftps_user \ -m 0750 \ /srv/ftps/ftps_user/upload
Открываем управляющий порт и пассивный диапазон:
firewall-cmd --permanent --add-service=ftp firewall-cmd --permanent --add-port=40000-40100/tcp firewall-cmd --reload
Перезапускаем сервер:
systemctl restart vsftpd journalctl -u vsftpd -n 50 --no-pager
Если сервер находится за NAT, дополнительно потребуется корректный внешний адрес для пассивного режима. Иначе клиент подключится к порту 21, но не сможет получить список файлов или начать передачу.
Проверка TLS
openssl s_client \ -connect files.example.com:21 \ -starttls ftp \ -servername files.example.com
В клиенте нужно выбрать режим FTP с явным TLS, а не SFTP и не обычный FTP.
Когда обычный FTP всё ещё допустим
FTP без TLS можно рассматривать только в ограниченных сценариях:
- изолированная локальная сеть без доступа извне;
- тестовый стенд с некритичными данными;
- анонимная публичная раздача файлов без авторизации;
- старое устройство, изолированное отдельным VLAN и firewall.
Для передачи файлов сайта, резервных копий, конфигурации, персональных данных и другой закрытой информации обычный FTP не подходит.
Краевые случаи
- SFTP подключается, но загрузка запрещена: проверьте владельца и права каталога
/upload. - sshd отказывается запускаться: выполните
sshd -tи проверьте положение блокаMatch. - ChrootDirectory отклонён: корневой каталог изоляции не должен принадлежать SFTP-пользователю или быть доступен ему для записи.
- FTPS показывает пустой каталог или зависает: обычно не открыт пассивный диапазон либо сервер за NAT возвращает неправильный адрес.
- FTPS-клиент отклоняет сертификат: проверьте доменное имя, цепочку сертификатов и срок действия.
- Доступ блокирует SELinux: изучите AVC-события и настройте контекст каталога; не отключайте SELinux ради устранения ошибки.
Посмотреть последние блокировки SELinux:
ausearch -m AVC -ts recent
Безопасность
- Используйте отдельную учётную запись для каждого человека или интеграции.
- Не передавайте пароль от
rootи не разрешайте входrootпо SFTP или FTPS. - Для SFTP по возможности применяйте SSH-ключи.
- Ограничивайте пользователя отдельным каталогом.
- Не изменяйте
/etc/passwdвручную — используйтеuseraddиusermod. - Не используйте
chmod -R 777и не выдавайте права записи на весь сайт без необходимости. - Ограничьте доступ по IP через firewall, если адреса клиентов известны.
- Следите за журналами
sshdиvsftpd. - Не отключайте SELinux ради упрощения настройки.
Производительность
Для обычной загрузки файлов сайта разница в скорости между SFTP и FTPS редко становится главным ограничением. Чаще производительность зависит от задержки сети, скорости диска и количества мелких файлов.
Если нужно регулярно синхронизировать крупные каталоги, лучше использовать rsync через SSH: он передаёт только изменившиеся данные и удобнее для автоматизации.
rsync -aHAX --delete \ -e "ssh -p 22" \ ./public/ \ deploy@server.example.com:/var/www/example/public/
Перед применением параметра --delete выполните тест с --dry-run.
Совместимость
- Команды рассчитаны на AlmaLinux 8/9 и другие современные RHEL-совместимые системы.
- На новых версиях расположение конфигурационных файлов и системные политики безопасности могут отличаться.
- SFTP поддерживается WinSCP, FileZilla, Cyberduck, OpenSSH и большинством IDE.
- Для FTPS клиент должен поддерживать явный FTP over TLS.
- SFTP и FTPS несовместимы: выбор одного протокола в клиенте нельзя заменить другим портом.
Проверка результата
Проверка SFTP:
sshd -t systemctl is-active sshd sftp sftp_user@server.example.com
После подключения:
pwd ls -la put test.txt ls -la
Пользователь должен видеть каталог /upload, иметь возможность записывать файлы внутри него и не иметь доступа к остальной файловой системе сервера.
Проверка FTPS:
systemctl is-active vsftpd openssl s_client \ -connect files.example.com:21 \ -starttls ftp \ -servername files.example.com
Альтернативы
- rsync через SSH: регулярная синхронизация каталогов и резервных копий.
- scp: простое копирование отдельных файлов через SSH.
- Объектное хранилище S3: передача больших файлов, резервные копии и временные ссылки.
- WebDAV: совместный доступ к файлам через HTTP.
- Git: доставка исходного кода и конфигурации с историей изменений.
Итог: для нового сервера выбирайте SFTP. FTPS настраивайте только при наличии конкретного требования совместимости. Обычный FTP через интернет лучше не включать.
Комментарии
0Нашли ошибку или хотите дополнить материал?