Поиск по сайту
Интересуешься 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 — Подготовка и проверка окружения
- Шаг 2 — Установка Win32-OpenSSH
- Шаг 3 — Регистрация и запуск службы OpenSSH
- Шаг 4 — Настройка sshd_config (режим SFTP-only)
- Шаг 5 — Создание пользователя и настройка NTFS-прав
- Шаг 6 — Проверка подключения (консоль и WinSCP)
- Шаг 7 — Лочим корень диска D:\
- Шаг 8 — Закрываем доступ к другим дискам (C:, E:, …)
- Шаг 9 — Автоматизация: скрипт для добавления пользователей
- Заключение
Шаг 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.
- Запускаем WinSCP
- Протокол: SFTP
- IP-адрес: 192.168.0.20 (или ваш)
- Имя пользователя: sftp-test1
- Пароль: Qwerty123
6.3 Критическая проблема: выход за пределы домашней папки
Теперь попробуем с помощью WinSCP подняться вверх по структуре:
- Нажимаем стрелку "вверх" (перейти на уровень выше). И видим ошибку Bad message при попытке попасть в D:\SFTP.
- Нажимаем стрелку "вверх" ещё раз.
- И неожиданно — теперь видим содержимое всего диска D. Нажимаем "вверх" ещё раз.
- И попадаем в корень всей файловой системы, где мы можем переключиться на другие диски и получить доступ ко всем логическим томам сервера.
🔴 Это является серьёзной уязвимостью. Несмотря на настроенные права 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 в Телеграмм или Макс, чтобы узнавать обо всем первым!
Статья была полезна? Поддержи автора, и благодаря твоей помощи новые материалы будут выходить еще чаще:
