- Что такое SFTP и как он работает
- Отличие SFTP от FTP и FTPS
- SFTP – это отдельный сервер?
- Роль SSH в работе SFTP
- Как установить SFTP-сервер
- Рекомендации по безопасности
В этой статье мы подробно разберем, как настроить SFTP-сервер на Linux, используя стандартный SSH-демон.
Что такое SFTP и как он работает
SFTP (SSH File Transfer Protocol) – это протокол для безопасной передачи файлов, который работает поверх SSH. В отличие от классического FTP, он изначально использует шифрование и не передает данные в открытом виде. Благодаря этому SFTP подходит для работы в недоверенных сетях и считается стандартным решением для защищенного файлового обмена на Linux-серверах.
Принцип работы SFTP:
- клиент устанавливает SSH-соединение с сервером;
- после успешной аутентификации запускается SFTP-подсистема;
- все команды управления файлами и сами данные передаются в зашифрованном виде внутри одного соединения.
SFTP поддерживает не только загрузку и скачивание файлов, но и операции с файловой системой: создание и удаление каталогов, переименование файлов, изменение прав доступа и просмотр содержимого директорий. При этом используется один сетевой порт (по умолчанию 22), что упрощает настройку firewall и снижает количество потенциальных точек атаки.
Отличие SFTP от FTP и FTPS
FTP (File Transfer Protocol) – классический протокол передачи файлов без встроенного шифрования. Логины, пароли и передаваемые данные отправляются в открытом виде, что делает FTP уязвимым к перехвату трафика. Кроме того, FTP использует несколько портов и отдельные соединения для управления и передачи данных, из-за чего его сложнее настраивать в сетях с firewall и NAT.
FTPS (FTP over SSL/TLS) – это расширение FTP, в котором безопасность добавляется за счет SSL/TLS. Передача данных и учетных данных шифруется, однако сама логика работы FTP сохраняется. FTPS по-прежнему требует настройки сертификатов и часто использует несколько портов, что усложняет администрирование и отладку сетевых проблем.
SFTP (SSH File Transfer Protocol) – отдельный протокол, не связанный с FTP на уровне реализации. Он работает поверх SSH, использует одно соединение и один порт, а шифрование включено по умолчанию. Аутентификация и контроль доступа полностью опираются на механизмы SSH, что делает SFTP более предсказуемым и удобным в управлении на Linux-серверах.
Ключевые отличия можно свести к нескольким пунктам:
- безопасность: FTP не шифрует данные, FTPS и SFTP используют шифрование, но SFTP делает это без дополнительной настройки;
- архитектура: FTP и FTPS используют отдельные каналы для управления и данных, SFTP работает в рамках одного SSH-соединения;
- администрирование: SFTP проще интегрируется в существующую SSH-инфраструктуру и требует меньше сетевых настроек;
- контроль доступа: SFTP позволяет гибко ограничивать действия пользователей на уровне файловой системы и сессии.
По этой причине в современных Linux-системах SFTP чаще всего выбирают как базовый и универсальный способ безопасной передачи файлов.
SFTP – это отдельный сервер?
SFTP — это не отдельный сервер, а встроенная подсистема SSH. Она работает внутри существующего SSH-сервера и не требует установки дополнительных программ. На большинстве Linux-систем, где уже включён SSH, поддержка SFTP доступна по умолчанию. Достаточно правильно настроить пользователей и права — и вы можете сразу использовать безопасный файловый обмен.
Технически SFTP реализуется через специальный модуль (подсистему), который вызывается после успешной аутентификации пользователя по SSH. В конфигурации SSH-сервера указывается, какая программа отвечает за SFTP-сессии, и именно она обрабатывает команды передачи файлов и операции с каталогами.
Из этого следуют важные практические моменты:
- SFTP использует тот же порт, что и SSH (по умолчанию 22);
- управление доступом, аутентификацией и шифрованием полностью зависит от настроек SSH;
- остановка SSH-сервера автоматически делает недоступным и SFTP.
Вы можете настроить SFTP так, чтобы пользователи работали только с файлами, но не имели доступа к оболочке. С помощью директив вроде ForceCommand internal-sftp и ChrootDirectory в конфигурации SSH легко ограничить их действия: запретить вход в систему и привязать к нужной папке. Все это делается в рамках стандартного SSH-сервера — отдельный сервис запускать не нужно, а безопасность при этом значительно повышается.
Роль SSH в работе SFTP
Работа SFTP начинается с установления SSH-соединения между клиентом и сервером. На этом этапе выполняется аутентификация пользователя: по паролю, по SSH-ключу или с использованием обоих способов. После успешной проверки прав доступа SSH запускает SFTP-подсистему, которая отвечает за файловые операции.
Через SSH SFTP получает следующие возможности:
- шифрование всего трафика, включая команды управления и содержимое файлов;
- проверку подлинности сервера и клиента, что защищает от подмены и атак типа «человек посередине»;
- централизованное управление доступом пользователей и их правами;
- использование одного сетевого порта и одного соединения для всей сессии.
Благодаря SSH администратор может гибко настраивать поведение SFTP. Например, отключить интерактивную оболочку, разрешив только файловый доступ, задать ограничения на команды или изолировать пользователей в отдельных каталогах. Все эти возможности реализуются стандартными средствами SSH и не требуют отдельной инфраструктуры для SFTP.
Фактически SSH выступает фундаментом SFTP: без запущенного и корректно настроенного SSH-сервера работа SFTP невозможна.
Как установить SFTP-сервер
Чтобы выполнить эти шаги, вам понадобятся права sudo. SFTP достаточно прост в установке, однако перед началом настройки необходимо установить OpenSSH на стороне сервера и SSH-пакет на стороне клиента. Чаще всего для этих задач используют виртуальный сервер, так как он позволяет гибко управлять доступом и ресурсами.
Для установки OpenSSH на сервере используйте команду, соответствующую вашему дистрибутиву:
sudo yum -y install openssh-server openssh-clients # CentOS/RHEL
Также SSH должен быть установлен на компьютере, с которого будет выполняться подключение к SFTP-серверу. Для Ubuntu и Debian это можно сделать так:
После установки всех необходимых компонентов система готова к дальнейшей настройке SFTP.
Шаг 1. Подготовка пользователей и каталогов для SFTP
Для безопасной работы SFTP рекомендуется заранее создать отдельную группу и пользователей, которые будут использовать только файловый доступ, без возможности входа в систему по SSH.
Сначала создайте группу для SFTP-пользователей:
Затем добавьте нового пользователя и включите его в созданную группу:
sudo passwd sftpuser1
Параметр -g указывает основную группу пользователя.
Далее подготовьте каталог, который будет использоваться как корневой для SFTP-доступа. Предположим, что общий каталог – /data, а для каждого пользователя создается отдельная директория с возможностью загрузки файлов только в подкаталог upload:
Назначьте владельцев и права доступа:
sudo chown -R sftpuser1:sftpusers /srv/sftp/sftpuser1/uploads
Каталог /data/USERNAME должен принадлежать пользователю root – это обязательное условие для корректной работы SFTP с изоляцией пользователей.
Шаг 2. Настройка SSH-сервера для работы с SFTP
На этом этапе нужно настроить SSH-сервер так, чтобы пользователи из SFTP-группы не получали доступ к командной оболочке и автоматически попадали в SFTP с изоляцией в своем каталоге.
Откройте конфигурационный файл SSH-сервера:
В конце файла добавьте следующий блок:
ChrootDirectory /srv/sftp/%u
ForceCommand internal-sftp
Что делают эти параметры:
- Match Group sftpusers – правило применяется только к пользователям из указанной группы;
- ChrootDirectory /srv/sftp/%u – задает корневой каталог для пользователя и изолирует его от остальной файловой системы;
- %u – автоматически подставляет имя текущего пользователя;
- ForceCommand internal-sftp – запрещает интерактивный вход по SSH и запускает только SFTP.
При такой настройке пользователь сможет подключаться к серверу исключительно по SFTP и будет видеть только содержимое своего каталога.
После внесения изменений сохраните файл и переходите к следующему шагу.
Шаг 3. Применение настроек и проверка работы SFTP
Изменения в настройках SSH не применяются сразу – нужно перезапустить службу SSH. Для этого перезапустите службу SSH:
Если служба перезапустилась без ошибок, значит конфигурация синтаксически корректна и сервер готов к работе.
Теперь можно проверить подключение к SFTP. С клиентского компьютера выполните подключение, указав имя пользователя и адрес сервера:
При успешной аутентификации пользователь сразу попадет в свой корневой каталог и не получит доступ к командной оболочке. Проверьте, что:
- просмотр каталогов работает корректно;
- загрузка файлов возможна только в каталог uploads;
- переход выше корневого каталога невозможен.
Если подключение не удается, сначала проверьте владельца и права доступа к каталогу из ChrootDirectory, входит ли пользователь в нужную группу и нет ли ошибок в файле /etc/ssh/sshd_config.
На этом базовая настройка SFTP завершена. При необходимости можно дополнительно усилить безопасность, например, отключить парольную аутентификацию или разрешить доступ только по SSH-ключам.
Рекомендации по безопасности
Даже при базовой настройке SFTP уже обеспечивает высокий уровень защиты, однако для серверной среды рекомендуется дополнительно усилить конфигурацию.
- Ограничьте доступ только SFTP. Для пользователей без доступа к оболочке настройте ForceCommand internal-sftp – так они не смогут выполнять команды, даже войдя на сервер.
- Используйте SSH-ключи вместо паролей. Аутентификация по ключам значительно безопаснее паролей. Для SFTP-пользователей можно запретить вход по паролю и оставить только авторизацию по ключу.
- Отключите вход под root. Запретите вход под root в SSH – это повышает безопасность. Администрировать сервер лучше через обычного пользователя с правами sudo.
- Минимизируйте права пользователей. Разрешайте запись только в те каталоги, где это действительно необходимо. Корневой каталог SFTP должен принадлежать root и быть недоступным для записи пользователями.
- Ограничьте доступ по IP-адресам. Если подключения идут с известных адресов, разрешите их в firewall или настройках SSH – это снизит риск взлома и атак перебора.
- Следите за логами. Они помогут вовремя заметить попытки взлома или проблемы с настройкой доступа.
- Держите систему и SSH в актуальном состоянии. Регулярно устанавливайте актуальные версии. Производители часто выпускают обновления безопасности, которые устраняют известные уязвимости. Даже при правильной настройке старая версия ПО может быть скомпрометирована, поэтому своевременные обновления – важная часть защиты.
Заключение
SFTP – удобный и надежный способ организовать безопасную передачу файлов на Linux-сервере без установки дополнительных сервисов. За счет работы поверх SSH он легко встраивается в существующую инфраструктуру и позволяет сразу использовать шифрование и проверенные механизмы аутентификации.