Как настроить SFTP на VPS сервере?
Настроить SFTP на вашем VPS сервере – это ключевой шаг к безопасному и эффективному управлению файлами, который мы сейчас подробно разберем. В отличие от небезопасного FTP, SFTP использует шифрование протокола SSH, обеспечивая конфиденциальность и целостность ваших данных при их передаче между локальной машиной и сервером. Этот гайд предназначен для системных администраторов и разработчиков, которые хотят не просто запустить SFTP, но и сделать это правильно, с учетом безопасности, используя изоляцию пользователей через chroot-окружение.
Почему SFTP, а не старый добрый FTP?

Для опытного сисадмина вопрос "почему SFTP?" звучит почти риторически, но давайте все же освежим в памяти основные аргументы, чтобы быть на одной волне. Мы все помним те времена, когда FTP был стандартом де-факто, но в современном мире, где безопасность данных стоит на первом месте, его недостатки становятся критическими.
-
Безопасность прежде всего
Главное отличие и преимущество SFTP – это использование протокола Secure Shell (SSH) для передачи данных. Это означает, что весь трафик, включая логины, пароли и сами файлы, шифруется. В отличие от этого, классический FTP передает все в открытом виде, что делает его крайне уязвимым для перехвата данных (сниффинга).
-
Единый порт
SFTP работает через тот же порт, что и SSH (по умолчанию 22). Это упрощает настройку брандмауэра и уменьшает количество открытых портов на сервере. FTP, в свою очередь, требует открытия нескольких портов (21 для команд и динамические порты для передачи данных в активном или пассивном режиме), что усложняет конфигурацию и увеличивает поверхность атаки.
-
Функциональность
SFTP не просто передает файлы; он предлагает полный набор функций файловой системы: создание и удаление директорий, переименование файлов, изменение атрибутов, создание символических ссылок и многое другое. Все это – через защищенный канал.
-
Отсутствие необходимости в отдельных демонах
SFTP является частью OpenSSH, что означает, что вам не нужно устанавливать и настраивать отдельный FTP-сервер (вроде Pure-FTPd или vsftpd). Если у вас уже работает SSH, у вас есть и SFTP.
Подготовка: Что нам понадобится?
Прежде чем мы перейдем к командам, убедимся, что у нас есть все необходимое для успешной настройки:
- Виртуальный частный сервер (VPS) от Valebyte с установленной операционной системой на базе Linux (например, Ubuntu, Debian, CentOS).
- Доступ к серверу по SSH с правами суперпользователя (
root) или пользователя с возможностью использования sudo.
- Базовые знания работы с командной строкой Linux. Мы будем много работать с терминалом.
- SFTP-клиент на вашей локальной машине (например, FileZilla, WinSCP, Cyberduck или встроенный
sftp в терминале).
Нужен надежный VPS для вашего SFTP-сервера?
Наши VPS-планы идеально подходят для безопасного хранения и передачи ваших данных. Выберите оптимальный вариант для стабильной работы SFTP. — from €4.49/mo.
Выбрать VPS-план →
Шаг 1: Убеждаемся, что OpenSSH установлен (и работает!)
Как мы уже упоминали, SFTP — это часть SSH. Поэтому первое, что нужно сделать, это убедиться, что OpenSSH сервер установлен и корректно работает на вашем VPS.
Для начала, всегда хорошая практика – обновить пакеты в вашей системе:
sudo apt update && sudo apt upgrade -y
Если вы используете дистрибутив на базе Red Hat (CentOS, Fedora), команды будут немного отличаться:
sudo yum update -y # или dnf update -y
Теперь проверим, установлен ли OpenSSH-сервер. На Debian/Ubuntu:
sudo apt install openssh-server -y
На CentOS/RHEL:
sudo yum install openssh-server -y # или dnf install openssh-server -y
После установки или обновления, убедимся, что служба SSH запущена и включена в автозагрузку:
sudo systemctl start sshd
sudo systemctl enable sshd
sudo systemctl status sshd
Вывод последней команды должен показать, что служба
sshd активна (
active (running)).
Важное замечание по брандмауэру: Если вы используете брандмауэр (например, UFW на Ubuntu или firewalld на CentOS), убедитесь, что порт SSH (по умолчанию 22) открыт. В противном случае вы не сможете подключиться к серверу.
Для UFW (Ubuntu):
sudo ufw allow ssh
sudo ufw enable # если не включен
Для firewalld (CentOS):
sudo firewall-cmd --permanent --add-service=ssh
sudo firewall-cmd --reload
Шаг 2: Создаем выделенного SFTP-пользователя и группу
Принцип наименьших привилегий – краеугольный камень безопасности. Мы не хотим, чтобы SFTP-пользователь имел полный доступ к оболочке (shell) или мог свободно перемещаться по всей файловой системе. Поэтому мы создадим специальную группу и пользователя, который будет иметь доступ только к SFTP и будет изолирован в своем домашнем каталоге (chroot).
Сначала создадим группу для наших SFTP-пользователей. Это удобно, если у вас будет несколько таких пользователей:
sudo addgroup sftpusers
Теперь создадим нового пользователя. Важно: мы создадим его без доступа к интерактивной оболочке (
--shell /bin/false) и добавим его в только что созданную группу
sftpusers (
--ingroup sftpusers). Замените
sftpuser на желаемое имя пользователя.
sudo adduser --shell /bin/false --ingroup sftpusers sftpuser
Система попросит вас задать пароль для нового пользователя. Выберите надежный пароль. Остальные поля можно оставить пустыми, нажав Enter.
sudo passwd sftpuser
Совет сисадмина: Назначение /bin/false в качестве оболочки гарантирует, что пользователь не сможет получить доступ к командной строке SSH, что является важной мерой безопасности для SFTP-пользователей.
Шаг 3: Настраиваем SFTP-доступ с Chroot (изоляция пользователя)
Это самый важный шаг, где мы настраиваем SSH-сервер так, чтобы наш SFTP-пользователь был изолирован внутри определенного каталога (chroot). Это означает, что пользователь не сможет "выбраться" за пределы своего назначенного каталога, что значительно повышает безопасность.
Откройте конфигурационный файл SSH-сервера для редактирования:
sudo nano /etc/ssh/sshd_config
Найдите строку, которая начинается с
Subsystem sftp. Обычно она выглядит так:
Subsystem sftp /usr/lib/openssh/sftp-server
Закомментируйте ее (добавив
# в начале) или измените на:
Subsystem sftp internal-sftp
Пояснение: internal-sftp – это встроенная реализация SFTP-сервера в OpenSSH, которая позволяет более гибко настраивать ограничения, в том числе и chroot.
Теперь прокрутите файл до конца и добавьте следующий блок. Замените
sftpuser на имя вашего пользователя.
Match User sftpuser
ChrootDirectory /var/www/sftpusers/%u
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
PermitTunnel no
AgentForwarding no
Что означает этот блок:
Match User sftpuser: Эти правила применяются только к пользователю sftpuser. Если у вас несколько пользователей, вы можете использовать Match Group sftpusers для применения правил ко всей группе.
ChrootDirectory /var/www/sftpusers/%u: Это корневой каталог, в который будет "заперт" пользователь. %u – это переменная, которая автоматически заменяется именем пользователя (в нашем случае sftpuser). Таким образом, каждый пользователь будет chroot-нут в свой собственный подкаталог.
ForceCommand internal-sftp: Принудительно запускает внутренний SFTP-сервер при подключении этого пользователя, предотвращая доступ к обычной оболочке.
AllowTCPForwarding no, X11Forwarding no, PermitTunnel no, AgentForwarding no: Отключают различные функции SSH, которые не нужны для SFTP и могут быть использованы для обхода ограничений безопасности. Это дополнительные меры предосторожности.
Сохраните изменения в файле (Ctrl+O, Enter, Ctrl+X для nano).
Права доступа к ChrootDirectory – это критично!
Это самый частый источник ошибок при настройке SFTP с chroot. OpenSSH очень строго относится к правам доступа на каталог, который используется как
ChrootDirectory и все его родительские каталоги.
Правило: Каталог, указанный в ChrootDirectory (и все его родительские каталоги до корневого), должен принадлежать root:root и иметь права 755 (или более строгие, но не более широкие).
Создадим структуру каталогов для нашего пользователя:
sudo mkdir -p /var/www/sftpusers/sftpuser
Теперь установим правильные права и владельца для каталога
sftpuser:
sudo chown root:root /var/www/sftpusers/sftpuser
sudo chmod 755 /var/www/sftpusers/sftpuser
Внутри этого каталога (который теперь является "корнем" для нашего SFTP-пользователя) мы создадим подкаталог, куда пользователь сможет записывать файлы. Этот подкаталог должен принадлежать SFTP-попользователю и его группе:
sudo mkdir /var/www/sftpusers/sftpuser/data
sudo chown sftpuser:sftpusers /var/www/sftpusers/sftpuser/data
sudo chmod 775 /var/www/sftpusers/sftpuser/data
Теперь пользователь
sftpuser сможет читать из
/var/www/sftpusers/sftpuser и записывать в
/var/www/sftpusers/sftpuser/data.
После всех изменений в конфигурации и правах, перезапустите службу SSH, чтобы применить их:
sudo systemctl restart sshd
Если вы получите ошибку при перезапуске, проверьте логи SSH (
sudo journalctl -u sshd или
sudo cat /var/log/auth.log) на предмет ошибок в
sshd_config или проблем с правами.
Шаг 4: Тестируем SFTP-подключение
Пришло время проверить нашу настройку. Используйте ваш любимый SFTP-клиент. Мы покажем примеры для FileZilla (популярный графический клиент) и терминала.
Подключение через FileZilla (или WinSCP, Cyberduck)
Откройте FileZilla и заполните следующие поля:
- Хост: IP-адрес вашего VPS сервера.
- Имя пользователя:
sftpuser (или то имя, которое вы создали).
- Пароль: Пароль, который вы установили для
sftpuser.
- Порт: 22 (если вы не меняли стандартный порт SSH).
Нажмите "Быстрое соединение". Если все настроено правильно, вы должны будете подключиться и увидеть только содержимое каталога
/data внутри своего chroot-окружения. Вы сможете загружать и скачивать файлы только в этот каталог.
Подключение через командную строку (Linux/macOS)
Вы можете также использовать встроенный клиент
sftp в терминале:
sftp sftpuser@your_vps_ip
Система запросит пароль для пользователя
sftpuser. После успешного входа вы увидите приглашение
sftp>.
Вы можете использовать команды SFTP:
ls: Просмотр содержимого текущего каталога.
cd data: Перейти в каталог data.
put local_file.txt: Загрузить файл с локальной машины на сервер.
get remote_file.txt: Скачать файл с сервера на локальную машину.
pwd: Показать текущий каталог на сервере.
lpwd: Показать текущий каталог на локальной машине.
exit: Выйти из SFTP-сессии.
Попробуйте загрузить тестовый файл в каталог
data и скачать его обратно, чтобы убедиться в полной функциональности.
Продвинутые сценарии
Настройка, которую мы только что выполнили, является базовой и самой безопасной. Однако в реальных условиях могут потребоваться более сложные конфигурации.
Несколько SFTP-пользователей с разными Chroot
Если вам нужно несколько SFTP-пользователей, каждый из которых изолирован в своем собственном каталоге, вы можете использовать
Match Group:
Match Group sftpusers
ChrootDirectory /var/www/sftpusers/%u
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
PermitTunnel no
AgentForwarding no
В этом случае, для каждого пользователя, входящего в группу
sftpusers, будет создан chroot в
/var/www/sftpusers/имя_пользователя. Не забудьте для каждого нового пользователя создать соответствующий каталог и установить правильные права, как это было сделано для
sftpuser.
Доступ к нескольким каталогам (с осторожностью!)
Иногда SFTP-пользователю нужен доступ к каталогам за пределами его chroot, например, к директории веб-сайта
/var/www/html. Это усложняет безопасность.
Один из способов – использовать
bind mounts. Это позволяет "смонтировать" существующий каталог в подкаталог внутри chroot-окружения пользователя, не нарушая правил chroot.
Например, чтобы дать
sftpuser доступ к
/var/www/html через каталог
web_root внутри его chroot:
sudo mkdir /var/www/sftpusers/sftpuser/web_root
sudo mount --bind /var/www/html /var/www/sftpusers/sftpuser/web_root
Чтобы mount сохранялся после перезагрузки, добавьте запись в
/etc/fstab:
/var/www/html /var/www/sftpusers/sftpuser/web_root none bind 0 0
Внимание: Использование bind mounts дает пользователю доступ к реальным системным каталогам. Убедитесь, что права доступа на /var/www/html настроены так, чтобы SFTP-пользователь мог выполнять только те действия, которые ему разрешены (например, только чтение или запись только в определенные подкаталоги).
SFTP без пароля (SSH-ключи)
Для повышения безопасности и удобства, особенно для автоматизированных процессов или для продвинутых пользователей, рекомендуется использовать SSH-ключи вместо паролей.
1. Генерируете пару ключей на локальной машине (если еще нет):
ssh-keygen -t rsa -b 4096
2. Копируете публичный ключ на сервер для SFTP-пользователя:
ssh-copy-id sftpuser@your_vps_ip
3. Теперь вы можете подключаться к SFTP без ввода пароля.
Выводы
Мы успешно настроили безопасный SFTP-доступ на вашем VPS сервере, используя встроенные возможности OpenSSH и изоляцию пользователей через chroot. Этот подход обеспечивает высокий уровень безопасности, предотвращая несанкционированный доступ к другим частям вашей файловой системы и защищая передаваемые данные с помощью шифрования SSH.
Помните, что безопасность – это непрерывный процесс. Регулярно обновляйте вашу систему, используйте надежные пароли или SSH-ключи, и всегда придерживайтесь принципа наименьших привилегий. Если вы ищете надежный и производительный
VPS хостинг, который станет отличной основой для ваших проектов, обратите внимание на предложения Valebyte. Мы предоставляем мощные серверы, на которых вы с легкостью сможете реализовать все описанные в этой статье настройки. Удачи в управлении вашими серверами!
Масштабируйте ваш SFTP с облачными инстансами
Требуется больше гибкости и мощности? Наши облачные инстансы предлагают масштабируемость для ваших SFTP-потребностей.
Начать с облака →