Delegasyona rêveberiya danişînên RDP

Delegasyona rêveberiya danişînên RDP
Di rêxistina ku ez lê dixebitim, karê ji dûr ve di prensîbê de qedexe ye. Bû. Heta hefteya çûyî. Niha diviyabû em bi lezgînî çareseriyê pêk bînin. Ji karsaziyê - adaptasyona pêvajoyên berbi formatek xebatê ya nû, ji me - PKI bi kodên PIN û nîşanan, VPN, têketina berfireh û hêj bêtir.
Di nav tiştên din de, min Binesaziya Sermaseya Dûr aka Karûbarên Termînalê saz dikir. Di navendên daneyên cihêreng de me gelek sazûmanên RDS hene. Yek ji mebestan ew bû ku hevkarên ji beşên IT-ê yên têkildar bi înteraktîf bi danişînên bikarhêneran ve girêbidin. Wekî ku hûn dizanin, ji bo vê yekê mekanîzmayek standard RDS Shadow heye, û awayê herî hêsan ji bo veguheztina wê dayîna mafên rêveberê herêmî li ser serverên RDS ye.
Ez rêz û qîmetê didim hevkarên xwe, lê dema ku dor tê dayîn mafên rêveberiyê ez pir çavbirçî me. 🙂 Ji bo yên ku bi min razî ne, ji kerema xwe qut bişopînin.

Welê, peywir zelal e, naha em werin ser karsaziyê.

gav 1

Ka em di Active Directory de komek ewlehiyê biafirînin RDP_Operators û tê de hesabên wan bikarhênerên ku em dixwazin mafan ji wan re veguhezînin têxin nav xwe:

$Users = @(
    "UserLogin1",
    "UserLogin2",
    "UserLogin3"
)
$Group = "RDP_Operators"
New-ADGroup -Name $Group -GroupCategory Security -GroupScope DomainLocal
Add-ADGroupMember -Identity $Group -Members $Users

Ger we gelek malperên AD-ê hene, hûn ê hewce bikin ku li bendê bimînin heya ku ew ji hemî kontrolkerên domainê re were dubare kirin berî ku hûn biçin qonaxa paşîn. Ev bi gelemperî ji 15 hûrdeman bêtir digire.

gav 2

Ka em mafên komê bidin ku danişînên termînalê li ser her serverek RDSH birêve bibin:

Set-RDSPermissions.ps1

$Group = "RDP_Operators"
$Servers = @(
    "RDSHost01",
    "RDSHost02",
    "RDSHost03"
)
ForEach ($Server in $Servers) {
    #Делегируем право на теневые сессии
    $WMIHandles = Get-WmiObject `
        -Class "Win32_TSPermissionsSetting" `
        -Namespace "rootCIMV2terminalservices" `
        -ComputerName $Server `
        -Authentication PacketPrivacy `
        -Impersonation Impersonate
    ForEach($WMIHandle in $WMIHandles)
    {
        If ($WMIHandle.TerminalName -eq "RDP-Tcp")
        {
        $retVal = $WMIHandle.AddAccount($Group, 2)
        $opstatus = "успешно"
        If ($retVal.ReturnValue -ne 0) {
            $opstatus = "ошибка"
        }
        Write-Host ("Делегирование прав на теневое подключение группе " +
            $Group + " на сервере " + $Server + ": " + $opstatus + "`r`n")
        }
    }
}

gav 3

Komê li koma herêmî zêde bikin Bikarhênerên Sermaseya Dûr li ser her yek ji pêşkêşkerên RDSH. Ger serverên we di berhevokên danişînê de têne hev kirin, wê hingê em vê yekê di asta berhevokê de dikin:

$Group = "RDP_Operators"
$CollectionName = "MyRDSCollection"
[String[]]$CurrentCollectionGroups = @(Get-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup).UserGroup
Set-RDSessionCollectionConfiguration -CollectionName $CollectionName -UserGroup ($CurrentCollectionGroups + $Group)

Ji bo pêşkêşkerên yekane em bikar tînin siyaseta komê, li bendê ye ku ew li ser pêşkêşkeran were sepandin. Yên ku li bendê ne pir tembel in dikarin pêvajoyê bi karanîna gpupdate-a kevn a baş, bi tercîh bilezînin navendî.

gav 4

Ka em ji bo "rêveber" skrîpta PS-ya jêrîn amade bikin:

RDSmanagement.ps1

$Servers = @(
    "RDSHost01",
    "RDSHost02",
    "RDSHost03"
)

function Invoke-RDPSessionLogoff {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName,
        [parameter(Mandatory=$true, Position=1)][String]$SessionID
    )
    $ErrorActionPreference = "Stop"
    logoff $SessionID /server:$ComputerName /v 2>&1
}

function Invoke-RDPShadowSession {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName,
        [parameter(Mandatory=$true, Position=1)][String]$SessionID
    )
    $ErrorActionPreference = "Stop"
    mstsc /shadow:$SessionID /v:$ComputerName /control 2>&1
}

Function Get-LoggedOnUser {
    Param(
        [parameter(Mandatory=$True, Position=0)][String]$ComputerName="localhost"
    )
    $ErrorActionPreference = "Stop"
    Test-Connection $ComputerName -Count 1 | Out-Null
    quser /server:$ComputerName 2>&1 | Select-Object -Skip 1 | ForEach-Object {
        $CurrentLine = $_.Trim() -Replace "s+"," " -Split "s"
        $HashProps = @{
            UserName = $CurrentLine[0]
            ComputerName = $ComputerName
        }
        If ($CurrentLine[2] -eq "Disc") {
            $HashProps.SessionName = $null
            $HashProps.Id = $CurrentLine[1]
            $HashProps.State = $CurrentLine[2]
            $HashProps.IdleTime = $CurrentLine[3]
            $HashProps.LogonTime = $CurrentLine[4..6] -join " "
            $HashProps.LogonTime = $CurrentLine[4..($CurrentLine.GetUpperBound(0))] -join " "
        }
        else {
            $HashProps.SessionName = $CurrentLine[1]
            $HashProps.Id = $CurrentLine[2]
            $HashProps.State = $CurrentLine[3]
            $HashProps.IdleTime = $CurrentLine[4]
            $HashProps.LogonTime = $CurrentLine[5..($CurrentLine.GetUpperBound(0))] -join " "
        }
        New-Object -TypeName PSCustomObject -Property $HashProps |
        Select-Object -Property UserName, ComputerName, SessionName, Id, State, IdleTime, LogonTime
    }
}

$UserLogin = Read-Host -Prompt "Введите логин пользователя"
Write-Host "Поиск RDP-сессий пользователя на серверах..."
$SessionList = @()
ForEach ($Server in $Servers) {
    $TargetSession = $null
    Write-Host "  Опрос сервера $Server"
    Try {
        $TargetSession = Get-LoggedOnUser -ComputerName $Server | Where-Object {$_.UserName -eq $UserLogin}
    }
    Catch {
        Write-Host "Ошибка: " $Error[0].Exception.Message -ForegroundColor Red
        Continue
    }
    If ($TargetSession) {
        Write-Host "    Найдена сессия с ID $($TargetSession.ID) на сервере $Server" -ForegroundColor Yellow
        Write-Host "    Что будем делать?"
        Write-Host "      1 - подключиться к сессии"
        Write-Host "      2 - завершить сессию"
        Write-Host "      0 - ничего"
        $Action = Read-Host -Prompt "Введите действие"
        If ($Action -eq "1") {
            Invoke-RDPShadowSession -ComputerName $Server -SessionID $TargetSession.ID
        }
        ElseIf ($Action -eq "2") {
            Invoke-RDPSessionLogoff -ComputerName $Server -SessionID $TargetSession.ID
        }
        Break
    }
    Else {
        Write-Host "    сессий не найдено"
    }
}

Ji bo ku skrîpta PS-ê hêsan were xebitandin, em ê ji bo wê di forma pelek cmd de bi heman navî wekî skrîpta PS-ê şêlekek biafirînin:

RDSmanagement.cmd

@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*

Em herdu pelan di peldankek ku dê ji "rêveberan" re bigihîjin têxin hundur û ji wan dipirsin ku ji nû ve têkevinê. Naha, bi xebitandina pelê cmd, ew ê karibin bi danişînên bikarhênerên din ên di moda RDS Shadow de werin girêdan û wan neçar bikin ku derkevin (ev dikare bikêr be dema ku bikarhêner nekare rûniştinek "daleqandî" serbixwe biqedîne).

Ew tiştek mîna vê xuya dike:

Ji bo "rêveber"Delegasyona rêveberiya danişînên RDP

Ji bo bikarhênerDelegasyona rêveberiya danişînên RDP

Çend şîroveyên dawî

Xala 1. Ger danişîna bikarhêner a ku em hewl didin kontrolê bi dest bixin berî ku skrîpta Set-RDSPermissions.ps1 li ser pêşkêşkarê were darve kirin hate destpêkirin, wê hingê "rêveber" dê xeletiyek gihîştinê bistîne. Li vir çareserî diyar e: li bendê bimînin heya ku bikarhênerê rêvebir têkeve.

Xala 2. Piştî çend rojan xebitandina bi RDP Shadow re, me xeletiyek an taybetmendiyek balkêş dît: piştî bidawîbûna rûniştina siyê, barika zimanî ya di tepsiyê de ji bo bikarhênerê ku pê ve girêdayî ye winda dibe, û ji bo vegerandina wê, pêdivî ye ku bikarhêner ji nû ve vegerîne. -login. Wekî ku diqewime, em ne tenê ne: carinan, два, .

Navê pêger. Ez ji we û serverên we re sihetek baş dixwazim. Mîna her gav, ez li benda nerînên we di şîroveyan de me û ji we dipirsim ku hûn anketa kurt a jêrîn bigirin.

Çavkaniyên

Tenê bikarhênerên qeydkirî dikarin beşdarî anketê bibin. Têketinji kerema xwe.

Hûn çi bikar tînin?

  • 8,1%AMMYY Admin5

  • 17,7%AnyDesk11

  • 9,7%DameWare6

  • 24,2%Radmin15

  • 14,5%RDS Shadow9

  • 1,6%Quick Assist / Windows Remote Assistance1

  • 38,7%TeamViewer24

  • 32,3%VNC20

  • 32,3%din20

  • 3,2%LiteManager2

62 bikarhêneran deng dan. 22 bikarhêner betal bûn.

Source: www.habr.com

Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster