په هغه اداره کې چیرې چې زه کار کوم، په اصولو کې لیرې کار منع دی. وه. تر تیرې اونۍ پورې. اوس موږ باید په عاجل ډول یو حل پلي کړو. له سوداګرۍ څخه - د پروسې نوي کاري فارمیټ ته تطبیق کول، زموږ څخه - PKI د PIN کوډونو او ټوکنونو سره، VPN، تفصيلي لاګنګ او نور ډیر څه.
د نورو شیانو په مینځ کې ، ما د ریموټ ډیسټاپ زیربنا عرف ټرمینل خدمات تنظیم کول. موږ په مختلفو ډیټا مرکزونو کې د RDS ډیری ګمارنې لرو. یو هدف دا و چې د اړونده IT څانګو همکارانو ته وړتیا ورکړي چې د کاروونکو غونډو سره په متقابل ډول وصل شي. لکه څنګه چې تاسو پوهیږئ، د دې لپاره یو معیاري RDS سیوري میکانیزم شتون لري، او د دې استازیتوب کولو ترټولو اسانه لاره د RDS سرورونو کې د محلي مدیر حقونه ورکول دي.
زه خپلو همکارانو ته درناوی او قدر کوم، مګر زه ډیر لالچی یم کله چې د اداري حقونو د سپارلو خبره راځي. 🙂 د هغو کسانو لپاره چې زما سره موافق دي، مهرباني وکړئ کټ تعقیب کړئ.
ښه، دنده روښانه ده، اوس راځئ چې سوداګرۍ ته راځو.
1 ګام
راځئ چې په فعال ډایرکټر کې د امنیت ګروپ جوړ کړو RDP_Operators او په دې کې د هغو کاروونکو حسابونه شامل کړئ چې موږ یې حقونه سپارل غواړو:
$Users = @(
"UserLogin1",
"UserLogin2",
"UserLogin3"
)
$Group = "RDP_Operators"
New-ADGroup -Name $Group -GroupCategory Security -GroupScope DomainLocal
Add-ADGroupMember -Identity $Group -Members $Users
که تاسو د AD ډیری سایټونه لرئ، نو تاسو به انتظار ته اړتیا ولرئ تر هغه چې دا ټول ډومین کنټرولر ته نقل شوي وي مخکې له دې چې بل ګام ته لاړ شي. دا معمولا له 15 دقیقو څخه ډیر وخت نه نیسي.
2 ګام
راځئ چې ګروپ ته حق ورکړو چې په هر RDSH سرورونو کې د ترمینل ناستې اداره کړي:
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")
}
}
}
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 سکریپټ چلولو لپاره اسانه وي، موږ به د دې لپاره یو شیل د cmd فایل په بڼه جوړ کړو چې ورته نوم یې د PS سکریپټ په څیر دی:
RDSManagement.cmd
@ECHO OFF
powershell -NoLogo -ExecutionPolicy Bypass -File "%~d0%~p0%~n0.ps1" %*
موږ دواړه فایلونه په یو فولډر کې واچوو چې "منیجرانو" ته به د لاسرسي وړ وي او له دوی څخه به د بیا ننوتلو غوښتنه وکړو. اوس، د cmd فایل په چلولو سره، دوی به وکوالی شي د RDS شیډو حالت کې د نورو کاروونکو سیشنونو سره وصل شي او دوی دې ته اړ کړي چې لاګ آوټ شي (دا ګټور کیدی شي کله چې کارونکي نشي کولی په خپلواکه توګه د "ځړول" سیشن پای ته ورسوي).
دا یو څه داسې ښکاري:
د "منیجر" لپاره
د کاروونکي لپاره
یو څو وروستي نظرونه
نوانس 1. که چیرې د کارونکي سیشن چې موږ یې د کنټرول ترلاسه کولو هڅه کوو د Set-RDSPermissions.ps1 سکریپټ په سرور کې اجرا کیدو دمخه پیل شوی و، نو "منیجر" به د لاسرسي تېروتنه ترلاسه کړي. دلته حل څرګند دی: تر هغه پورې انتظار وکړئ چې اداره شوي کارونکي ننوځي.
نوانس 2. د RDP شیډو سره د څو ورځو کار کولو وروسته، موږ یو په زړه پورې بګ یا خصوصیت ولید: د سیوري سیشن پای ته رسیدو وروسته، په ټری کې د ژبې بار د کارونکي سره وصل کیدو لپاره ورک کیږي، او د بیرته ترلاسه کولو لپاره، کاروونکي اړتیا لري چې بیا وصل شي. -د ننه کیدل. لکه څنګه چې دا معلومه شوه، موږ یوازې نه یو:
بس نور څه نه. زه تاسو او ستاسو خدمتګارانو ته ښه روغتیا غواړم. د تل په څیر، زه په نظرونو کې ستاسو فیډبیک ته سترګې په لار یم او له تاسو څخه غواړم چې لاندې لنډه سروې وکړئ.
سرچینې
د RDS سیوري - په وینډوز سرور 2016 / 2012 R2 کې د RDP کارونکي غونډو سره سیوري اړیکه د وینډوز سرور 2012 سیوري کول - غیر مدیرانو ته د حقونو سپارل Get-LoggedOnUser په لیرې سیسټمونو کې د ننوتلو کاروونکو معلومات راټولوي د PowerShell PS1 سکریپټونو پیل کولو غوره لاره د سیمه ایز امنیت ګروپ ته د ډومین کاروونکو اضافه کول GPMC - په OU کې په ټولو کمپیوټرونو کې gpupdate مجبور کړئ
یوازې راجستر شوي کاروونکي کولی شي په سروې کې برخه واخلي.
تاسو څه کاروئ؟
-
۸۵٪AMMYY اداره5
-
۸۵٪AnyDesk11
-
۸۵٪DameWare6
-
۸۵٪Radmin15
-
۸۵٪RDS Shadow9
-
۸۵٪چټک مرسته / وینډوز ریموټ مرسته 1
-
۸۵٪ټیم ویونکی24
-
۸۵٪VNC20
-
۸۵٪نور20
-
۸۵٪LiteManager2
62 کاروونکو رایه ورکړه. 22 کاروونکي منع شوي.
سرچینه: www.habr.com