የRDP ክፍለ-ጊዜዎችን አስተዳደር በውክልና መስጠት

የRDP ክፍለ-ጊዜዎችን አስተዳደር በውክልና መስጠት
በምሠራበት ድርጅት ውስጥ, የርቀት ሥራ በመርህ ደረጃ የተከለከለ ነው. ነበር። እስካለፈው ሳምንት ድረስ። አሁን በአስቸኳይ መፍትሄ መተግበር ነበረብን። ከንግድ ሥራ - ሂደቶችን ወደ አዲስ የሥራ ቅርፀት ማስተካከል, ከእኛ - PKI በፒን ኮዶች እና ቶከኖች, ቪፒኤን, ዝርዝር ምዝግብ ማስታወሻ እና ሌሎች ብዙ.
ከሌሎች ነገሮች በተጨማሪ የርቀት ዴስክቶፕ መሠረተ ልማት aka Terminal Services እያቋቋምኩ ነበር። በተለያዩ የመረጃ ማዕከሎች ውስጥ በርካታ የ RDS ማሰማራቶች አሉን። ከግቦቹ አንዱ ተዛማጅ የአይቲ ክፍሎች ባልደረቦች ከተጠቃሚ ክፍለ-ጊዜዎች ጋር በይነተገናኝ እንዲገናኙ ማስቻል ነበር። እንደሚያውቁት፣ ለዚህ ​​መደበኛ የ RDS Shadow ዘዴ አለ፣ እና እሱን ለማስተላለፍ ቀላሉ መንገድ በ RDS አገልጋዮች ላይ የአካባቢ አስተዳዳሪ መብቶችን መስጠት ነው።
ባልደረቦቼን አከብራለሁ እና እወዳቸዋለሁ፣ ግን የአስተዳዳሪ መብቶችን ስለመስጠት በጣም ስግብግብ ነኝ። 🙂 ከእኔ ጋር ለሚስማሙ እባኮትን ተከተሉ።

ደህና, ስራው ግልጽ ነው, አሁን ወደ ሥራ እንውረድ.

1 ደረጃ

በActive Directory ውስጥ የደህንነት ቡድን እንፍጠር RDP_ኦፕሬተሮች እና መብቶችን ልንሰጥባቸው የምንፈልጋቸውን የተጠቃሚዎች መለያዎች በውስጡ አካትት፡-

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

ብዙ የኤ.ዲ.ዲ ድረ-ገጾች ካሉዎት ወደ ቀጣዩ ደረጃ ከመቀጠልዎ በፊት በሁሉም የጎራ ተቆጣጣሪዎች ላይ እስኪደገም ድረስ መጠበቅ ያስፈልግዎታል። ይህ አብዛኛውን ጊዜ ከ 15 ደቂቃዎች ያልበለጠ ጊዜ ይወስዳል.

2 ደረጃ

በእያንዳንዱ የRDSH አገልጋዮች ላይ ተርሚናል ክፍለ ጊዜዎችን እንዲያስተዳድር ለቡድኑ መብቶችን እንስጥ፡

አዘጋጅ-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")
        }
    }
}

3 ደረጃ

ቡድኑን ወደ አካባቢያዊ ቡድን ያክሉ የርቀት ዴስክቶፕ ተጠቃሚዎች በእያንዳንዱ የ RDSH አገልጋዮች ላይ. የእርስዎ አገልጋዮች ወደ የክፍለ-ጊዜ ስብስቦች ከተጣመሩ፣ ይህንን በስብስብ ደረጃ ላይ እናደርጋለን፡-

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

ለነጠላ አገልጋዮች እንጠቀማለን። የቡድን ፖሊሲ, በአገልጋዮቹ ላይ እንዲተገበር በመጠባበቅ ላይ. ለመጠበቅ በጣም ሰነፍ የሆኑ ጥሩ የድሮ gpupdate በመጠቀም ሂደቱን ማፋጠን ይችላሉ, ይመረጣል በማዕከላዊነት.

4 ደረጃ

ለ “አስተዳዳሪዎች” የሚከተለውን የPS ስክሪፕት እናዘጋጅ፡-

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 "    сессий не найдено"
    }
}

የPS ስክሪፕቱን ለማሄድ ምቹ ለማድረግ፣ ከPS ስክሪፕት ጋር ተመሳሳይ ስም ባለው በcmd ፋይል መልክ ሼል እንፈጥራለን።

RDSManagement.cmd

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

ሁለቱንም ፋይሎች ለ "አስተዳዳሪዎች" ተደራሽ በሆነ አቃፊ ውስጥ እናስቀምጣቸዋለን እና እንደገና እንዲገቡ እንጠይቃቸዋለን። አሁን የ cmd ፋይልን በማስኬድ በ RDS Shadow ሁነታ ውስጥ ከሌሎች ተጠቃሚዎች ክፍለ ጊዜዎች ጋር መገናኘት እና ዘግተው እንዲወጡ ማስገደድ ይችላሉ (ተጠቃሚው ራሱን የቻለ " hanging" ክፍለ ጊዜ ማቋረጥ በማይችልበት ጊዜ ይህ ጠቃሚ ሊሆን ይችላል).

ይህን ይመስላል።

ለ "አስተዳዳሪ"የRDP ክፍለ-ጊዜዎችን አስተዳደር በውክልና መስጠት

ለተጠቃሚውየRDP ክፍለ-ጊዜዎችን አስተዳደር በውክልና መስጠት

ጥቂት የመጨረሻ አስተያየቶች

Nuance 1. ቁጥጥር ለማግኘት የምንሞክርበት የተጠቃሚ ክፍለ ጊዜ የተጀመረው Set-RDSPermissions.ps1 ስክሪፕት በአገልጋዩ ላይ ከመደረጉ በፊት ከሆነ፣ “አስተዳዳሪው” የመዳረሻ ስህተት ይደርስበታል። እዚህ ያለው መፍትሄ ግልጽ ነው፡ የሚተዳደረው ተጠቃሚ እስኪገባ ድረስ ይጠብቁ።

Nuance 2. ከRDP Shadow ጋር ከበርካታ ቀናት ጋር ከሰራን በኋላ አንድ አስደሳች ስህተት ወይም ባህሪ አስተውለናል፡ ከጥላው ክፍለ ጊዜ ማብቂያ በኋላ ተጠቃሚው እንዲገናኝ የቋንቋ አሞሌው ይጠፋል እና መልሶ ለማግኘት ተጠቃሚው እንደገና ያስፈልገዋል። -ግባ. እንደሚታወቀው እኛ ብቻችንን አይደለንም፡- ጊዜ, два, ሶስት.

ይኼው ነው. ለእርስዎ እና ለአገልጋዮችዎ ጤናን እመኛለሁ። እንደ ሁሌም ፣ በአስተያየቶች ውስጥ የእርስዎን አስተያየት በጉጉት እጠብቃለሁ እና ከዚህ በታች ያለውን አጭር ዳሰሳ እንድትወስዱ እጠይቃለሁ።

ምንጮች

በዳሰሳ ጥናቱ ውስጥ የተመዘገቡ ተጠቃሚዎች ብቻ መሳተፍ ይችላሉ። ስግን እንእባክህን።

ምን ትጠቀማለህ?

  • 8,1%AMMYY አስተዳዳሪ5

  • 17,7%AnyDesk11

  • 9,7%DameWare6

  • 24,2%ራዲሚን15

  • 14,5%RDS ጥላ9

  • 1,6%ፈጣን ረዳት / የዊንዶውስ የርቀት እርዳታ1

  • 38,7%TeamViewer24

  • 32,3%ቪኤንሲ20

  • 32,3%ሌላ20

  • 3,2%LiteManager2

62 ተጠቃሚዎች ድምጽ ሰጥተዋል። 22 ተጠቃሚዎች ድምፀ ተአቅቦ አድርገዋል።

ምንጭ: hab.com

አስተያየት ያክሉ