Сервер: SFTP, FTPS и FTP: что выбрать и как настроить

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 через интернет лучше не включать.

up: Просмотров: 2.2k
Материал помог? Оценка помогает находить устаревшие и спорные решения.

Комментарии

0

Нашли ошибку или хотите дополнить материал?

Комментариев пока нет.Можно первым дополнить материал или сообщить об ошибке.
Telegram