Поиск по сайту

telegram

Интересуешься IT и системным администрированием? Подпишись на наш канал, где мы делимся инсайдами, новостями и практическими советами! Прокачай свои навыки вместе с нами!

Как настроить безопасный SFTP-сервер на Windows с OpenSSH

SFTP (SSH File Transfer Protocol) — это защищённый протокол передачи файлов, работающий поверх SSH. Его ключевое преимущество перед FTP в том, что все данные, включая логины и пароли, передаются в зашифрованном виде. Поэтому SFTP является стандартом для безопасного обмена файлами в корпоративной среде.

На Windows можно использовать разные решения для SFTP, но самым гибким и надёжным остаётся OpenSSH. Он давно зарекомендовал себя в мире Linux и теперь официально поддерживается на Windows. OpenSSH легко управляется через PowerShell, запускается как системная служба и хорошо интегрируется с инфраструктурой..

Чтобы ограничить пользователей только их папками и не допустить просмотра системных директорий, мы используем ACL (Access Control List) — список правил NTFS, определяющий, какие действия (чтение, запись, удаление) разрешены конкретному пользователю или группе. Именно ACL обеспечивает настоящую изоляцию.

Онлайн-курс: Планирование и установка Exchange Server 2016 с нуля до запуска в Production.

Курс охватывает все ключевые аспекты управления почтовым сервером: от установки и настройки до обеспечения безопасности и автоматизации. Курс подходит как для начинающих, так и для опытных администраторов.

Шаг 1 — Подготовка и проверка окружения

Перед установкой и настройкой SFTP-сервера на базе OpenSSH важно убедиться, что порт 22 свободен, служба sshd не установлена ранее, и система подготовлена к созданию корневой директории и пользовательской группы.

Все действия выполняются от имени администратора в PowerShell.

1.1 Проверим наличие установленной службы OpenSSH-сервера

Выполните следующую команду:


Get-Service sshd -ErrorAction SilentlyContinue | Format-List Name, Status, StartType

Если в ответе ничего не выводится — значит служба sshd отсутствует, и OpenSSH-сервер не установлен.

1.2 Проверим, не занят ли порт 22


Get-NetTCPConnection -State Listen -LocalPort 22 -ErrorAction SilentlyContinue

Если команда не вернёт результата — порт 22 свободен, и можно будет использовать его для SFTP.

1.3 Создаём корневую директорию для файлового обмена


New-Item -ItemType Directory -Path 'D:\SFTP' -Force | Out-Null

Если диск D: отсутствует на сервере, укажите другой путь, например C:\SFTP.

В результате будет создана папка, в которой будут располагаться пользовательские директории для SFTP-доступа.

1.4 Создаём локальную группу для SFTP-пользователей


New-LocalGroup -Name 'sftpusers' -Description 'Пользователи SFTP сервера' -ErrorAction SilentlyContinue

После выполнения вы получите вывод:


Name      Description
----      -----------
sftpusers Пользователи SFTP сервера

Группа sftpusers будет создана в списке локальных пользователей и групп. Её можно будет использовать для ограничения доступа только к нужным пользователям.

Шаг 2 — Установка Win32-OpenSSH

Теперь установим сам OpenSSH-сервер, который будет обеспечивать работу SFTP. Мы используем официальную сборку Win32-OpenSSH, размещённую на GitHub.

2.1 Скачивание OpenSSH-сервера

Скачайте архив с последней версией 64-битного OpenSSH-сервера по ссылке c GitHub.com

2.2 Подготовка временной папки

Создайте временную директорию на диске C::


New-Item -ItemType Directory -Path 'C:\Temp' -Force | Out-Null

Поместите скачанный архив OpenSSH-Win64.zip в эту папку.

2.3 Распаковка и установка

Далее выполните команды в PowerShell:


# Указываем пути
$zip  = 'C:\Temp\OpenSSH-Win64.zip'            # путь к скачанному архиву
$dest = 'C:\Program Files\OpenSSH'             # куда будем распаковывать

# Создаём целевую папку (если её ещё нет)
New-Item -ItemType Directory -Path $dest -Force | Out-Null

# Распаковываем архив
Expand-Archive -Path $zip -DestinationPath $dest -Force

2.4 Корректировка структуры (если распаковалось во вложенную папку)

Иногда содержимое архива попадает в подкаталог (например, OpenSSH-Win64\OpenSSH-Win64). В этом случае переместим файлы на нужный уровень:


$nested = Get-ChildItem -Directory $dest | Where-Object { Test-Path "$($_.FullName)\sshd.exe" }
if ($nested) {
    Move-Item -Path "$($nested.FullName)\*" -Destination $dest -Force
    Remove-Item $nested.FullName -Recurse -Force
}

2.5 Проверка наличия нужных файлов

Убедитесь, что в целевой папке присутствуют ключевые компоненты:


Get-ChildItem "$dest\sshd.exe","$dest\sftp-server.exe","$dest\Install-SSHD.ps1" -ErrorAction SilentlyContinue

Ожидаемый вывод:


Directory: C:\Program Files\OpenSSH

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        4/18/2025   2:17 PM         777240 sshd.exe
-a----        4/18/2025   2:17 PM         387088 sftp-server.exe
-a----        4/18/2025   2:17 PM          20635 Install-SSHD.ps1

Если все три файла присутствуют — OpenSSH успешно распакован и готов к установке службы.

Шаг 3 — Регистрация и запуск службы OpenSSH

3.1 Установка службы sshd и подготовка окружения

Перейдите в папку с установленным OpenSSH:


Set-Location 'C:\Program Files\OpenSSH'

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


Unblock-File .\Install-SSHD.ps1
.\Install-SSHD.ps1

Скрипт:

  • Установит службы sshd и ssh-agent
  • Создаст необходимые ключи и конфигурационные файлы
  • Настроит права доступа к каталогу moduli
  • Добавит путь OpenSSH в системную переменную PATH (для работы потребуется перезагрузка или повторный вход в систему)

Пример вывода:


[*] C:\Program Files\OpenSSH\moduli
Inheritance is removed from 'C:\Program Files\OpenSSH\moduli'.
...
sshd and ssh-agent services successfully installed
Updated Machine PATH to include OpenSSH directory

3.3 Разрешаем входящие подключения на порт 22

Создаём правило в брандмауэре Windows:


New-NetFirewallRule -Name 'OpenSSH-Server' -DisplayName 'OpenSSH Server (TCP 22)' `
  -Direction Inbound -Action Allow -Protocol TCP -LocalPort 22 -Profile Any -ErrorAction SilentlyContinue

Пример вывода:


Name                  : OpenSSH-Server
DisplayName           : OpenSSH Server (TCP 22)
Enabled               : True
Direction             : Inbound
Action                : Allow
LocalPort             : 22
Protocol              : TCP
Profile               : Any
...

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

Проверим статус службы sshd:


Get-Service sshd | Format-List Name, Status, StartType

Ожидаемый результат:


Name      : sshd
Status    : Running
StartType : Automatic

Проверим, доступен ли порт 22 на localhost:


Test-NetConnection -ComputerName localhost -Port 22

Ожидаемый вывод:


ComputerName     : localhost
RemoteAddress    : ::1
RemotePort       : 22
TcpTestSucceeded : True

Если TcpTestSucceeded : True — служба sshd успешно запущена и доступна для подключений.

Шаг 4 — Настройка sshd_config (режим SFTP-only)

На этом шаге мы ограничим доступ к серверу только SFTP-функциональностью (без возможности интерактивного входа по SSH) для всех пользователей, входящих в группу sftpusers. Также укажем их домашнюю директорию в формате D:\SFTP\<имя_пользователя>.

4.1 Подготовка путей и проверка Subsystem sftp

Откройте PowerShell с правами администратора и выполните следующий блок:


# Путь к конфигурационному файлу sshd
$cfg = 'C:\ProgramData\ssh\sshd_config'

# Убедимся, что базовая папка для SFTP создана
New-Item -ItemType Directory -Path 'D:\SFTP' -Force | Out-Null

# Исправим строку Subsystem sftp, если она есть
$raw = Get-Content $cfg -Raw
$raw = $raw -replace '(?m)^\s*Subsystem\s+sftp\s+.*$', 'Subsystem   sftp   "C:/Program Files/OpenSSH/sftp-server.exe"'
Set-Content -Path $cfg -Value $raw -Encoding ASCII

Эти команды гарантируют, что OpenSSH будет использовать встроенный sftp-server.exe из установленной директории.

4.2 Добавление секции Match Group sftpusers

Добавим конфигурационный блок, ограничивающий возможности участников группы sftpusers::


$matchBlock = @'
# SFTP-only for sftpusers; home dir D:/SFTP/
Match Group sftpusers
    ForceCommand "C:/Program Files/OpenSSH/sftp-server.exe" -d "D:/SFTP/%u"
    AllowTcpForwarding no
    X11Forwarding no
    PermitTTY no
'@

if (-not (Select-String -Path $cfg -Pattern '^\s*Match\s+Group\s+sftpusers' -SimpleMatch -Quiet)) {
    Add-Content -Path $cfg -Value $matchBlock -Encoding ASCII
}

Что делает этот блок:

  • ForceCommand ограничивает выполнение только SFTP-сервера и задаёт пользовательскую домашнюю директорию.
  • Отключаются перенаправление TCP, X11 и терминальный доступ — это повышает безопасность.

4.3 Проверка синтаксиса конфигурации

Перед применением изменений проверим, что в файле sshd_config нет ошибок:


& 'C:\Program Files\OpenSSH\sshd.exe' -t -f $cfg

Если ошибок нет — команда ничего не вернёт (тишина = успех).

4.4 Перезапуск службы SSHD


Restart-Service sshd

Изменения вступят в силу после перезапуска службы.

4.5 Проверка вставленного блока Match

Проверим, что блок Match Group sftpusers действительно добавлен и отображается корректно:


Select-String -Path $cfg -Pattern 'Match Group sftpusers' -Context 0,5 | ForEach-Object { $_.Context.PostContext }

Ожидаемый вывод:


ForceCommand "C:/Program Files/OpenSSH/sftp-server.exe" -d "D:/SFTP/%u"
AllowTcpForwarding no
X11Forwarding no
PermitTTY no

Теперь пользователи из группы sftpusers будут иметь доступ только к SFTP и только в пределах своей изолированной директории.

Шаг 5 — Создание пользователя и настройка NTFS-прав

Теперь добавим локального пользователя, включим его в группу sftpusers, создадим персональную папку и правильно настроим NTFS-права. Это обеспечит изоляцию и безопасность каждого пользователя в рамках общей структуры D:\SFTP\<имя_пользователя>.

5.1 Убедимся, что группа sftpusers существует

Если ранее вы уже создавали группу — повторное выполнение команды не вызовет ошибок:


New-LocalGroup -Name 'sftpusers' -ErrorAction SilentlyContinue | Out-Null

5.2 Создание тестового пользователя

Введём имя и пароль для пользователя sftp-test1. В PowerShell:


$User = 'sftp-test1'
$Pwd  = Read-Host -AsSecureString 'Введите пароль для sftp-test1'
New-LocalUser -Name $User -Password $Pwd -PasswordNeverExpires:$true -AccountNeverExpires:$true -Description 'Тестовый пользователь для SFTP'

Ожидаемый вывод:


Name       Enabled Description
----       ------- -----------
sftp-test1 True    Тестовый пользователь для SFTP

5.3 Добавление пользователя в группу sftpusers


Add-LocalGroupMember -Group 'sftpusers' -Member $User

5.4 Настройка прав NTFS

SFTP будет работать только в случае строгой настройки прав:

Корневая папка D:\SFTP — доступ только у админов и SYSTEM


icacls 'D:\SFTP' /inheritance:r
icacls 'D:\SFTP' /grant:r "Administrators:(OI)(CI)F"
icacls 'D:\SFTP' /grant   "SYSTEM:(OI)(CI)F"

После каждой команды должно выводиться:


processed file: D:\SFTP
Successfully processed 1 files; Failed processing 0 files

Домашняя папка пользователя

Создаём домашнюю директорию и назначаем индивидуальные права:


$UserHome  = "D:\SFTP\$User"
$LocalAcct = "$env:COMPUTERNAME\$User"

# Создаём папку, если нет
New-Item -ItemType Directory -Path $UserHome -Force | Out-Null

# Настройка прав
icacls $UserHome /inheritance:r
icacls $UserHome /grant:r "Administrators:(OI)(CI)F"
icacls $UserHome /grant   "SYSTEM:(OI)(CI)F"
icacls $UserHome /grant   "$($LocalAcct):(OI)(CI)M"

После каждой команды — аналогичный вывод с подтверждением успешной обработки.

5.5 Проверка итоговых прав


icacls $UserHome

Пример вывода:


D:\SFTP\sftp-test1 BUILTIN\Administrators:(F)
                   WIN-SRV\sftp-test1:(OI)(CI)(M)
                   NT AUTHORITY\SYSTEM:(OI)(CI)(F)
                   BUILTIN\Administrators:(OI)(CI)(F)

Successfully processed 1 files; Failed processing 0 files

Благодаря настройке Match Group в sshd_config и ограничениям на уровне NTFS, пользователь sftp-test1 будет "заперт" в своей папке D:\SFTP\sftp-test1 и не сможет просматривать соседние каталоги.

Шаг 6 — Проверка подключения (консоль и WinSCP)

После настройки пользователя и прав доступа важно убедиться, что всё работает корректно: пользователь подключается только по SFTP, видит только свою папку и не может выйти за её пределы.

6.1 Тест через встроенный клиент sftp.exe

Запускаем тест из PowerShell от имени администратора:


& "C:\Program Files\OpenSSH\sftp.exe" sftp-test1@localhost

Введите пароль пользователя (например, Qwerty123). Если всё настроено верно, вы увидите:


Connected to localhost.
sftp>

Внутри консоли sftp выполните команды:


pwd
ls
mkdir test
ls
cd ..
ls
exit

Ожидаемое поведение:


pwd           → /D:/SFTP/sftp-test1
mkdir test    → создаёт папку test
cd .. / ls    → Ошибка: "Bad message" (что нормально, т.к. нет прав на D:\SFTP)

6.2 Тестирование через WinSCP

Теперь протестируем подключение через популярный GUI-клиент WinSCP.

  1. Запускаем WinSCP
  2. Протокол: SFTP
  3. IP-адрес: 192.168.0.20 (или ваш)
  4. Имя пользователя: sftp-test1
  5. Пароль: Qwerty123

6.3 Критическая проблема: выход за пределы домашней папки

Теперь попробуем с помощью WinSCP подняться вверх по структуре:

  1. Нажимаем стрелку "вверх" (перейти на уровень выше). И видим ошибку Bad message при попытке попасть в D:\SFTP.
  1. Нажимаем стрелку "вверх" ещё раз.
  1. И неожиданно — теперь видим содержимое всего диска D. Нажимаем "вверх" ещё раз.
  1. И попадаем в корень всей файловой системы, где мы можем переключиться на другие диски и получить доступ ко всем логическим томам сервера.

🔴 Это является серьёзной уязвимостью. Несмотря на настроенные права NTFS, WinSCP (и другие SFTP-клиенты) позволяют выйти за пределы домашней папки.

Шаг 7 — Блокировка доступа к корню диска D:\

При проверке через WinSCP мы увидели, что пользователь может "подняться" выше своей домашней папки и просматривать содержимое всего диска. Чтобы этого не допустить, необходимо жёстко ограничить права доступа к корню диска D:\.

7.1 Создание бэкапа ACL (рекомендовано!)

Перед изменением прав доступа снимем копию текущих ACL. Это позволит восстановить настройки в случае ошибки:


icacls D:\ /save D:\acl_backup_before_sftp_root.txt

Ожидаемый результат:


processed file: D:\
Successfully processed 1 files; Failed processing 0 files

Теперь у вас есть резервная копия прав (acl_backup_before_sftp_root.txt) в корне диска D:\.

7.2 Жёсткая настройка прав доступа

Удалим наследование и запретим доступ стандартным пользователям (Users, Authenticated Users, Everyone). Оставим полный доступ только у администраторов и SYSTEM:


icacls D:\ /inheritance:r
icacls D:\ /remove "Users" "Authenticated Users" "Everyone" 2>$null
icacls D:\ /grant:r "Administrators:(OI)(CI)F"
icacls D:\ /grant   "SYSTEM:(OI)(CI)F"

Эти команды:

  • Отключают наследование прав
  • Убирают лишние SID
  • Выдают полный доступ только администраторам и системным процессам

7.3 Проверка итоговых прав

Выполним:


icacls D:\

Ожидаемый вывод:


D:\ BUILTIN\Administrators:(OI)(CI)(F)
    NT AUTHORITY\SYSTEM:(OI)(CI)(F)
    CREATOR OWNER:(OI)(CI)(IO)(F)

Successfully processed 1 files; Failed processing 0 files

Теперь пользователь, даже если попытается выйти "вверх" через SFTP-клиент, упрётся в запрет на доступ к корню диска D:\ и не сможет просматривать другие папки или разделы.

Шаг 8 — Закрываем доступ к другим дискам (C:, E:, …)

Даже после настройки изоляции пользователя в папке D:\SFTP\username и блокировки корня D:\, остаётся риск, что участники группы sftpusers смогут подняться к другим разделам (например, C:\, E:\, F:\). Чтобы исключить доступ к ним, накладываем явный DENY для этой группы.

8.1 Запрет доступа к C:\

Выполним:


icacls 'C:\' /deny 'sftpusers:(RX)'

Эта настройка запрещает группе sftpusers чтение и просмотр содержимого (Read & eXecute) корня системного диска.

8.2 Проверка результата


icacls C:\

Ожидаемый вывод:


C:\ WIN-SRV\sftpusers:(DENY)(RX)
    NT AUTHORITY\SYSTEM:(OI)(CI)(F)
    BUILTIN\Administrators:(OI)(CI)(F)
    BUILTIN\Users:(OI)(CI)(RX)
    BUILTIN\Users:(CI)(AD)
    BUILTIN\Users:(CI)(IO)(WD)
    CREATOR OWNER:(OI)(CI)(IO)(F)

Successfully processed 1 files; Failed processing 0 files

Здесь мы видим, что для группы sftpusers явно прописан запрет (DENY)(RX).

8.3 Запрет для других дисков

Если на сервере есть дополнительные тома (например, E:\, F:\, G:\), выполняем аналогичные команды:


icacls 'E:\' /deny 'sftpusers:(RX)'
icacls 'F:\' /deny 'sftpusers:(RX)'
icacls 'G:\' /deny 'sftpusers:(RX)'

Таким образом мы гарантируем, что SFTP-пользователи будут изолированы строго в рамках своих папок на D:\SFTP.

Шаг 9 — Автоматизация: скрипт для добавления пользователей

Для упрощения администрирования можно использовать PowerShell-скрипт, который автоматически:

  • создаёт локального пользователя с описанием;
  • добавляет его в группу sftpusers;
  • настраивает домашнюю директорию D:\SFTP\username;
  • задаёт корректные ACL;
  • создаёт папку upload и файл README.txt;
  • исключает пользователя из групп Users и Пользователи для ограничения прав на C:\.

9.1 Cкачайте или создайте скрипт adduser.ps1

Cкачайте скрипт adduser.ps1 или создайте файл C:\scripts\adduser.ps1 и вставьте туда следующий код:


Set-ExecutionPolicy -Scope Process Bypass -Force

# C:\scripts\adduser.ps1
# Интерактив: локальная учётка → группа sftpusers → папка D:\SFTP\ → ACL → upload + README
$ErrorActionPreference = "Stop"
$Root = "D:\SFTP"

# 1) Корень и группа
if (-not (Test-Path $Root)) { New-Item -ItemType Directory -Path $Root -Force | Out-Null }
if (-not (Get-LocalGroup -Name 'sftpusers' -ErrorAction SilentlyContinue)) { New-LocalGroup -Name 'sftpusers' | Out-Null }

# 2) Ввод логина/описания/пароля (двойной ввод для подтверждения)
$UserName = Read-Host "Введите ЛОГИН нового SFTP-пользователя"
$Desc     = Read-Host "Введите ОПИСАНИЕ пользователя (например: Бухгалтер)"

function Read-Secret([string]$Prompt) { Read-Host -AsSecureString -Prompt $Prompt }
do {
  $Pwd1 = Read-Secret "Введите ПАРОЛЬ"
  $Pwd2 = Read-Secret "Повторите ПАРОЛЬ"

  $b1  = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($Pwd1)
  $p1  = [Runtime.InteropServices.Marshal]::PtrToStringUni($b1)
  [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($b1)

  $b2  = [Runtime.InteropServices.Marshal]::SecureStringToBSTR($Pwd2)
  $p2  = [Runtime.InteropServices.Marshal]::PtrToStringUni($b2)
  [Runtime.InteropServices.Marshal]::ZeroFreeBSTR($b2)

  if ($p1 -ne $p2) { Write-Host "Пароли не совпадают, попробуйте снова." -ForegroundColor Yellow }
} until ($p1 -eq $p2)

# 3) Создание/обновление локальной учётки с описанием
if (-not (Get-LocalUser -Name $UserName -ErrorAction SilentlyContinue)) {
  New-LocalUser -Name $UserName -Password $Pwd1 -PasswordNeverExpires:$true -AccountNeverExpires:$true -Description $Desc | Out-Null
} else {
  $adsi = [ADSI]"WinNT://$env:COMPUTERNAME/$UserName,user"
  $adsi.SetPassword($p1); $adsi.SetInfo()
  Set-LocalUser -Name $UserName -Description $Desc
}

# 4) Добавить в группу sftpusers (если ещё нет)
if (-not (Get-LocalGroupMember -Group 'sftpusers' -ErrorAction SilentlyContinue |
          Where-Object { $_.Name -ieq "$env:COMPUTERNAME\$UserName" })) {
  Add-LocalGroupMember -Group 'sftpusers' -Member $UserName
}

# (Опционально) убрать из локальных "Users/Пользователи", чтобы не было прав на C:\
foreach ($g in @('Users','Пользователи')) { try { Remove-LocalGroupMember -Group $g -Member $UserName -ErrorAction Stop } catch {} }

# 5) Домашняя папка и права
$UserHome = Join-Path $Root $UserName
New-Item -ItemType Directory -Path $UserHome -Force | Out-Null

# На корне — только Админы и SYSTEM
icacls $Root /inheritance:r | Out-Null
icacls $Root /grant:r "Administrators:(OI)(CI)F" | Out-Null
icacls $Root /grant   "SYSTEM:(OI)(CI)F"        | Out-Null

# На домашней — Админы, SYSTEM и сам пользователь (Modify)
$acct = "$env:COMPUTERNAME\$UserName"
icacls $UserHome /inheritance:r | Out-Null
icacls $UserHome /grant:r "Administrators:(OI)(CI)F" | Out-Null
icacls $UserHome /grant   "SYSTEM:(OI)(CI)F"        | Out-Null
icacls $UserHome /grant   ("{0}:(OI)(CI)M" -f $acct) | Out-Null

# 6) Скелет: папка upload + README (чтобы WinSCP не ругался на пустой каталог)
$Upload = Join-Path $UserHome 'upload'
if (-not (Test-Path $Upload)) { New-Item -ItemType Directory -Path $Upload -Force | Out-Null }
icacls $Upload /inheritance:r | Out-Null
icacls $Upload /grant:r "Administrators:(OI)(CI)F" | Out-Null
icacls $Upload /grant   "SYSTEM:(OI)(CI)F"        | Out-Null
icacls $Upload /grant   ("{0}:(OI)(CI)M" -f $acct) | Out-Null

$readme = Join-Path $UserHome 'README.txt'
if (-not (Test-Path $readme)) {
  Set-Content $readme -Encoding UTF8 -Value "Добро пожаловать! Загружайте файлы в папку 'upload'."
}

Write-Host "Готово: $UserName → $UserHome (локальная учётка $acct). Описание: $Desc" -ForegroundColor Green

9.2 Запуск скрипта

Выполните:


cd C:\scripts\
.\adduser.ps1

Пример диалога:


Введите ЛОГИН нового SFTP-пользователя: ivanov
Введите ОПИСАНИЕ пользователя (например: Бухгалтер): Юрист
Введите ПАРОЛЬ: *********
Повторите ПАРОЛЬ: *********
Готово: ivanov → D:\SFTP\ivanov (локальная учётка SFTP-01\ivanov). Описание: Юрист

9.3 Проверка в WinSCP

Теперь вы можете подключиться к серверу под пользователем ivanov:

  • Протокол: SFTP
  • Хост: IP-адрес сервера (например, 192.168.0.20)
  • Имя пользователя: ivanov
  • Пароль: тот, что вы указали при создании

Если всё настроено правильно:

  • после входа отобразится папка upload;
  • при попытке подняться выше — появится ошибка доступа;

Теперь вы можете за 10–15 секунд добавлять новых изолированных SFTP-пользователей без ручной настройки. Всё готово к промышленной эксплуатации.

Заключение

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

Теперь такая система готова к работе в корпоративной среде. Она позволяет быстро предоставлять доступ к файлам для сотрудников, подрядчиков или сторонних организаций, при этом не рискуя безопасностью всего сервера. Каждый пользователь получает доступ только к своей папке и не может просматривать другие разделы или системные каталоги. Благодаря скрипту добавление новых пользователей занимает всего несколько секунд и не требует ручных действий.

Такая архитектура легко масштабируется, а при необходимости может быть адаптирована под конкретные требования — например, интеграцию с Active Directory, централизованное логирование или расширенную отчётность. Главное — основа уже заложена: надёжная, изолированная и безопасная среда для передачи файлов через SFTP.

Вам понравилась эта статья? Тогда вам, скорее всего, будет интересна другая полезная статья Как настроить учетную запись службы для присоединения к домену.

Интересуешься IT и системным администрированием? Подпишись на SysAdminHub в Телеграмм или Макс, чтобы узнавать обо всем первым!

Комментарии (0)

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

Оставьте свой комментарий

0 Значки
Вложения (0 / 5)
Поделитесь своим местоположением