Это пошаговое руководство по развёртыванию безопасного 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— успешное отключение из-за ForceCommandPermission 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 и автоматическое обновление сертификатов.