Как ограничить пользователей только SFTP в OpenSSH на Windows Server?

Вопрос или проблема

Я работаю с 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

Применение

  1. Установка OpenSSH: Убедитесь, что OpenSSH установлен на вашем Windows Server. Вы можете скачать его с GitHub PowerShell Win32-OpenSSH.

  2. Настройки конфигурации: Измените файл sshd_config, который по умолчанию находится в %PROGRAMDATA%\SSH\. Откройте файл в текстовом редакторе с правами администратора и вставьте приведенные выше настройки.

  3. Определение ChrootDirectory: Задайте ChrootDirectory для каждого пользователя, указывая директорию, из которой они смогут получать доступ только к конкретным ресурсам. Убедитесь, что структура директорий и уровень прав доступа установлены правильно и безопасно.

  4. Перезапуск службы OpenSSH: После настройки конфигурации, перезапустите службу OpenSSH с помощью диспетчера служб Windows или с помощью командной строки (например, net stop sshd и net start sshd).

  5. Проверка прав: Убедитесь, что у пользователей настроены правильные файловые разрешения на директориях, чтобы предотвратить несанкционированный доступ.

Эти шаги помогут установить и настроить безопасный SFTP-доступ на вашем Windows Server с использованием OpenSSH, ограничив пользователей только возможностью передачи файлов и исключив любые другие способы взаимодействия через SSH.

Оцените материал
Добавить комментарий

Капча загружается...