Как настроить SFTP на VPS сервере?

calendar_month 25 марта 2025 schedule 9 мин. чтения visibility 199 просмотров
person
Valebyte Team
Как настроить SFTP на VPS сервере?

Как настроить SFTP на VPS сервере?

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

Почему SFTP, а не старый добрый FTP?

A secure lock icon with a server rack keyhole, symbolizing SFTP security for VPS. Для опытного сисадмина вопрос "почему 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-потребностей.

Начать с облака →

Share this post:

support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.