Вопрос или проблема
Я работаю с OpenSSH, загруженным с https://github.com/PowerShell/Win32-OpenSSH/releases.
Моя цель здесь — настроить ssh-сервер, который позволяет передавать файлы через sftp без доступа по ssh. Согласно официальной документации, предоставленной OpenSSH, это должно поддерживаться в Windows, начиная с версии 7.7, и ограничение должно быть установлено в файле sshd_config. Я пытался работать с этим файлом какое-то время, но не смог ограничить доступ только к подпапкам. Вот что я добавил в файл конфигурации:
Subsystem sftp sftp-server.exe
ForceCommand internal-sftp
ChrootDirectory c:\users\myusername
AllowTcpForwarding no
PermitTunnel no
GatewayPorts no
Может ли кто-нибудь сказать, почему это не работает? Или я не могу настроить доступ только для SFTP таким образом?
Другой вариант — отключить SSH соединение. Как этого добиться с помощью OpenSSH в Windows?
От Mika-n в PowerShell-OpenSSH GitHub:
Это работает с версией OpenSSH-Win64 8.1.x, но вам нужно установить следующие параметры sshd_config (по умолчанию в папке
%PROGRAMDATA%\SSH\
на платформе Windows):ForceCommand internal-sftp Subsystem sftp sftp-server.exe -d "D:\MyDataRoot\" ChrootDirectory D:\MyDataRoot PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no AllowUsers sftpuser
Рассмотрите возможность добавления строки подчиненной системы с -d
, чтобы установить папку, или добавьте -d
в вашу запись ForceCommand
.
Обратите внимание, что также следует убедиться, что у пользователей есть правильные разрешения файловой системы, чтобы удерживать их в папке.
Вот что сработало для меня:
# Принудительная функция SFTP, необходимая для параметра ChrootDirectory ниже
ForceCommand internal-sftp
Subsystem sftp sftp-server.exe -d c:\home\
# Укажите папку по умолчанию, которую пользователь видит после аутентификации SFTP. Без этого пользователи будут видеть C:\users\myuser\ как папку по умолчанию, что обычно нежелательно
Match User <domain>\myuser1
ChrootDirectory c:\home\test1\
Match User <domain>\myuser2
ChrootDirectory c:\home\test2\
# Отключить туннелирование, агент аутентификации, TCP и X11 пересылку.
# Ниже приведенные параметры рекомендуются как лучшая практика для предотвращения определенных обходов безопасности
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
GatewayPorts no
Ответ или решение
Для ограничения пользователей в OpenSSH на Windows Server исключительно SFTP-доступом, необходимо внести определенные настройки в конфигурационный файл sshd_config
. Основная цель здесь заключается в том, чтобы пользователи могли передавать файлы через SFTP, но не могли использовать полноценный SSH-доступ. Опишем подробный процесс, используя метод TEA (Theory, Example, Application).
Теория
OpenSSH предоставляет возможность ограничивать пользователей только SFTP-доступом через использование ForceCommand internal-sftp
в конфигурации. Это позволяет назначить сервер SFTP как обязательный командный процесс, отключая любые другие SSH-команды. Дополнительно, для ограничения прав доступа к каталогу используется параметр ChrootDirectory
, который задает корневую директорию для изолированного окружения пользователя.
Пример
Для этого служат настройки, приведенные ниже, где настраивается окружение так, чтобы пользователи имели доступ только к определенным подкаталогам:
# Обязательное использование только SFTP
ForceCommand internal-sftp
Subsystem sftp sftp-server.exe -d C:\home\
# Настройка директорий для пользователей
Match User DOMAIN\myuser1
ChrootDirectory C:\home\test1\
Match User DOMAIN\myuser2
ChrootDirectory C:\home\test2\
# Отключение ненужной функциональности для повышения безопасности
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
GatewayPorts no
Применение
-
Установка OpenSSH: Убедитесь, что OpenSSH установлен на вашем Windows Server. Вы можете скачать его с GitHub PowerShell Win32-OpenSSH.
-
Настройки конфигурации: Измените файл
sshd_config
, который по умолчанию находится в%PROGRAMDATA%\SSH\
. Откройте файл в текстовом редакторе с правами администратора и вставьте приведенные выше настройки. -
Определение ChrootDirectory: Задайте
ChrootDirectory
для каждого пользователя, указывая директорию, из которой они смогут получать доступ только к конкретным ресурсам. Убедитесь, что структура директорий и уровень прав доступа установлены правильно и безопасно. -
Перезапуск службы OpenSSH: После настройки конфигурации, перезапустите службу OpenSSH с помощью диспетчера служб Windows или с помощью командной строки (например,
net stop sshd
иnet start sshd
). -
Проверка прав: Убедитесь, что у пользователей настроены правильные файловые разрешения на директориях, чтобы предотвратить несанкционированный доступ.
Эти шаги помогут установить и настроить безопасный SFTP-доступ на вашем Windows Server с использованием OpenSSH, ограничив пользователей только возможностью передачи файлов и исключив любые другие способы взаимодействия через SSH.