በምሠራበት ድርጅት ውስጥ, የርቀት ሥራ በመርህ ደረጃ የተከለከለ ነው. ነበር። እስካለፈው ሳምንት ድረስ። አሁን በአስቸኳይ መፍትሄ መተግበር ነበረብን። ከንግድ ሥራ - ሂደቶችን ወደ አዲስ የሥራ ቅርፀት ማስተካከል, ከእኛ - 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)
ለነጠላ አገልጋዮች እንጠቀማለን።
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" ክፍለ ጊዜ ማቋረጥ በማይችልበት ጊዜ ይህ ጠቃሚ ሊሆን ይችላል).
ይህን ይመስላል።
ለ "አስተዳዳሪ"
ለተጠቃሚው
ጥቂት የመጨረሻ አስተያየቶች
Nuance 1. ቁጥጥር ለማግኘት የምንሞክርበት የተጠቃሚ ክፍለ ጊዜ የተጀመረው Set-RDSPermissions.ps1 ስክሪፕት በአገልጋዩ ላይ ከመደረጉ በፊት ከሆነ፣ “አስተዳዳሪው” የመዳረሻ ስህተት ይደርስበታል። እዚህ ያለው መፍትሄ ግልጽ ነው፡ የሚተዳደረው ተጠቃሚ እስኪገባ ድረስ ይጠብቁ።
Nuance 2. ከRDP Shadow ጋር ከበርካታ ቀናት ጋር ከሰራን በኋላ አንድ አስደሳች ስህተት ወይም ባህሪ አስተውለናል፡ ከጥላው ክፍለ ጊዜ ማብቂያ በኋላ ተጠቃሚው እንዲገናኝ የቋንቋ አሞሌው ይጠፋል እና መልሶ ለማግኘት ተጠቃሚው እንደገና ያስፈልገዋል። -ግባ. እንደሚታወቀው እኛ ብቻችንን አይደለንም፡-
ይኼው ነው. ለእርስዎ እና ለአገልጋዮችዎ ጤናን እመኛለሁ። እንደ ሁሌም ፣ በአስተያየቶች ውስጥ የእርስዎን አስተያየት በጉጉት እጠብቃለሁ እና ከዚህ በታች ያለውን አጭር ዳሰሳ እንድትወስዱ እጠይቃለሁ።
ምንጮች
RDS Shadow - በዊንዶውስ አገልጋይ 2016/2012 R2 ውስጥ ከRDP ተጠቃሚ ክፍለ ጊዜዎች ጋር የጥላ ግንኙነት ዊንዶውስ አገልጋይ 2012 ጥላ መስጠት - መብቶችን ለአስተዳዳሪ ላልሆኑ ማስተላለፍ Get-LoggedOnUser በርቀት ሲስተሞች ላይ በተጠቃሚዎች ላይ የተመዘገቡ መረጃዎችን ይሰበስባል የ PowerShell PS1 ስክሪፕቶችን እንዴት መጀመር እንደሚቻል ምርጡ መንገድ የጎራ ተጠቃሚዎችን ወደ የአካባቢ ደህንነት ቡድን ማከል GPMC - በOU ውስጥ ባሉ ሁሉም ኮምፒውተሮች ላይ gpupdateን አስገድድ
በዳሰሳ ጥናቱ ውስጥ የተመዘገቡ ተጠቃሚዎች ብቻ መሳተፍ ይችላሉ።
ምን ትጠቀማለህ?
-
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