Настройка защищённого SFTP-сервера на Ubuntu 2026: безопасный доступ к файлам | AdminWiki
Timeweb Cloud — сервера, Kubernetes, S3, Terraform. Лучшие цены IaaS.
Попробовать

Настройка защищённого SFTP-сервера на Ubuntu 2026: безопасный доступ к файлам

07 апреля 2026 6 мин. чтения

Это пошаговое руководство по развёртыванию безопасного SFTP-сервера на Ubuntu 2026 с использованием OpenSSH. Вы получите готовую к применению конфигурацию, которая гарантирует изоляцию пользователей в chroot-окружении, отключает интерактивную оболочку и делает обязательной аутентификацию по SSH-ключам. Все команды и настройки проверены на актуальной версии системы и решают ключевые задачи безопасности для DevOps-инженеров и системных администраторов.

Подготовка Ubuntu 2026 к установке SFTP-сервера

Перед началом настройки убедитесь, что ваша система Ubuntu 2026 обновлена и имеет актуальные пакеты безопасности. Это критически важно для предотвращения уязвимостей, связанных с устаревшим ПО. Все дальнейшие шаги разработаны специально для Ubuntu 2026 и учитывают особенности её пакетной базы и системных служб.

Проверка и установка OpenSSH Server

OpenSSH — стандартный, наиболее безопасный и поддерживаемый инструмент для организации SFTP-доступа в Linux-системах. Его демон (sshd) обрабатывает SSH-соединения и автоматически запускает SFTP-подсессии при соответствующей настройке.

Проверьте, установлен ли сервер OpenSSH:

apt list --installed | grep openssh-server

Если пакет не установлен или требует обновления, выполните:

sudo apt update
sudo apt install openssh-server

После установки проверьте статус службы:

sudo systemctl status ssh

Служба должна быть активна (active) и включена (enabled). Работа с актуальными пакетами OpenSSH — базовое требование безопасности, поскольку новые версии закрывают обнаруженные уязвимости.

Создание изолированной среды (chroot) для SFTP-пользователя

Концепция chroot (change root) в контексте OpenSSH позволяет ограничить пользователя определённым каталогом файловой системы, предотвращая доступ к служебным директориям сервера. Это фундаментальный механизм безопасности для SFTP.

Создание системного пользователя и структуры каталогов

Создайте пользователя без интерактивной оболочки и с домашним каталогом в изолированном месте:

sudo adduser --system --group --shell /usr/sbin/nologin --home /var/sftp/user1 user1

Ключевые параметры:

  • --system — создаёт системного пользователя без стандартной домашней директории в /home
  • --shell /usr/sbin/nologin — отключает возможность входа в интерактивную оболочку
  • --home /var/sftp/user1 — задаёт корень chroot-окружения

Теперь создайте обязательную структуру каталогов:

sudo mkdir -p /var/sftp/user1/.ssh
sudo mkdir -p /var/sftp/user1/uploads

Настройка прав доступа файловой системы

Правильные права доступа — основа безопасности chroot. Принцип минимальных привилегий требует, чтобы пользователь мог писать только в предназначенный для этого каталог, но не мог изменять структуру своего chroot-окружения.

Установите права:

sudo chown root:root /var/sftp/user1
sudo chmod 755 /var/sftp/user1
sudo chown user1:user1 /var/sftp/user1/uploads

Структура с правами:

/var/sftp/user1/               # Владелец: root:root, права: 755 (пользователь не может записывать)
├── .ssh/                     # Для authorized_keys
└── uploads/                  # Владелец: user1:user1, пользователь может записывать

Проверьте правильность настройки:

ls -la /var/sftp/user1/

Конфигурация OpenSSH для безопасного SFTP-доступа

Основная настройка происходит в файле /etc/ssh/sshd_config. Перед редактированием создайте резервную копию:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.backup

Блок Match: ограничение доступа только протоколом SFTP

В конец файла sshd_config добавьте блок для целевых пользователей или группы. Это позволяет применять специальные настройки только к SFTP-пользователям, не затрагивая обычные SSH-подключения администраторов.

Match Group sftpusers
    ChrootDirectory /var/sftp/%u
    ForceCommand internal-sftp
    AllowTcpForwarding no
    PermitTunnel no
    AllowAgentForwarding no
    X11Forwarding no

Ключевые директивы:

  • ChrootDirectory /var/sftp/%u — активирует chroot для пользователя
  • ForceCommand internal-sftp — принудительно запускает встроенный SFTP-сервер, отключая интерактивную оболочку
  • Использование internal-sftp вместо внешнего sftp-server критически важно для совместимости с chroot

Если вы не создавали группу, можно использовать Match User user1 для конкретного пользователя.

Отключение неиспользуемых функций SSH для повышения безопасности

Внутри блока Match отключаются функции SSH, не нужные для SFTP, что уменьшает поверхность атаки:

  • AllowTcpForwarding no — запрещает туннелирование TCP-портов
  • PermitTunnel no — отключает создание сетевых туннелей
  • AllowAgentForwarding no — запрещает пересылку SSH-агента
  • X11Forwarding no — отключает пересылку X11-сессий

После изменения конфигурации обязательно перезапустите службу:

sudo systemctl restart ssh

Настройка обязательной аутентификации по SSH-ключам

Аутентификация по паролю — основной вектор атак методом подбора. Полный переход на SSH-ключи устраняет эту угрозу. В нашем сравнении FTP vs FTPS vs SFTP в 2026 году мы подробно разбираем, почему SFTP с ключами стал стандартом безопасности.

Сгенерируйте ключевую пару Ed25519 на клиентской машине (она более безопасна и быстрее RSA):

ssh-keygen -t ed25519 -f ~/.ssh/sftp_user1_key -C "SFTP key for user1"

Скопируйте публичный ключ на сервер в chroot-окружение пользователя:

sudo cat ~/.ssh/sftp_user1_key.pub | sudo tee -a /var/sftp/user1/.ssh/authorized_keys

Генерация ключевой пары и настройка прав доступа

SSH-демон крайне чувствителен к правам доступа на файлы ключей. Неправильные права — самая частая причина ошибки «Permission denied (publickey)».

Установите корректные права на сервере:

sudo chmod 700 /var/sftp/user1/.ssh
sudo chmod 600 /var/sftp/user1/.ssh/authorized_keys
sudo chown -R user1:user1 /var/sftp/user1/.ssh

Теперь настройте sshd_config для отключения парольной аутентификации (в основной секции файла, вне блока Match):

PasswordAuthentication no
PubkeyAuthentication yes

Перезапустите SSH:

sudo systemctl restart ssh

Проверка работоспособности и диагностика проблем

После настройки выполните комплексную проверку. Это исключит скрытые ошибки и даст уверенность в безопасности конфигурации.

Анализ логов OpenSSH для поиска причин сбоев

Логи SSH содержат детальную информацию о попытках подключения и причинах их неудач. Для диагностики используйте:

journalctl -u ssh --since "5 minutes ago"

Типичные сообщения об ошибках и их решение:

  • fatal: bad ownership or modes for chroot directory — неправильные права на корень chroot (должен быть root:root, 755)
  • Received disconnect: 11: disconnected by user — успешное отключение из-за ForceCommand
  • Permission denied (publickey) — проверьте права 700 на .ssh и 600 на authorized_keys

Тестирование подключения и итоговая проверка безопасности

Проверьте, что интерактивная оболочка действительно недоступна:

ssh -i ~/.ssh/sftp_user1_key user1@ваш_сервер whoami

Команда должна завершиться с ошибкой или разрывом соединения, так как ForceCommand internal-sftp запрещает выполнение произвольных команд.

Протестируйте SFTP-подключение:

sftp -i ~/.ssh/sftp_user1_key user1@ваш_сервер

После подключения выполните в SFTP-клиенте:

ls /

Вы должны увидеть только структуру chroot (uploads, .ssh), а не корневую файловую систему сервера.

Расширенные сценарии и рекомендации

Базовая настройка решает задачу изолированного доступа для одного пользователя. В реальных рабочих средах часто требуется более сложная конфигурация.

Настройка SFTP для группы пользователей с общим доступом

Для предоставления доступа к общему каталогу нескольким пользователям создайте группу:

sudo addgroup sftp-shared

Создайте общий каталог с sticky bit для группы:

sudo mkdir -p /var/sftp/shared/uploads
sudo chown root:sftp-shared /var/sftp/shared
sudo chmod 2770 /var/sftp/shared/uploads

Права 2770 (setgid) гарантируют, что все файлы, созданные в каталоге, будут принадлежать группе sftp-shared.

Создайте пользователей с основной группой sftp-shared:

sudo adduser --system --group --shell /usr/sbin/nologin --home /var/sftp/shared --ingroup sftp-shared shared_user1

В sshd_config настройте блок для группы:

Match Group sftp-shared
    ChrootDirectory /var/sftp/shared
    ForceCommand internal-sftp
    # ... остальные ограничения

Для автоматизации передачи файлов в CI/CD-пайплайнах рекомендуем ознакомиться с нашей статьёй автоматизации передачи файлов по FTP, FTPS и SFTP, где представлены готовые скрипты для Bash, PowerShell и Python.

Графические клиенты FileZilla и WinSCP полностью совместимы с данной настройкой. При подключении укажите:

  • Протокол: SFTP
  • Хост: адрес вашего сервера
  • Порт: 22 (или другой, если вы меняли Port в sshd_config)
  • Логин: имя SFTP-пользователя
  • Метод аутентификации: Ключ — укажите путь к приватному ключу

Для мониторинга активности SFTP-пользователей используйте логи аудита:

sudo grep sftp /var/log/auth.log

Регулярно обновляйте систему и пакет OpenSSH для получения исправлений безопасности:

sudo apt update && sudo apt upgrade openssh-server

Если вам также требуется настроить шифрованное соединение для других протоколов, изучите руководство по настройке FTPS-сервера с Let's Encrypt, где подробно разбирается настройка TLS и автоматическое обновление сертификатов.

Поделиться:
Сохранить гайд? В закладки браузера