Nástroj pre ľudské shadow pripojenie neadmina k RDP reláciám používateľov v WinServer 2012R2

Problém počas obdobia karantény pre podniky bol nasledujúci: skutočne je potrebné minimalizovať počet návštev kancelárií odborníkmi, ktorí sa zaoberajú a poskytujú poradenstvo ohľadom aplikačného softvéru, a povedzme otvorene, používatelia často zneužívajú pomoc odborníkov, nechcúc sa zaoberať samotnou otázkou, akoby povedali: "prídu — pomôžu — urobia, a ja zatiaľ pôjdem fajčiť/piť kávu a podobne." Konzultácia telefonicky pri spoločnom prístupe k serveru je efektívnejšia, ak sa prezerá vzdialená obrazovka.

Nástroj pre ľudské shadow pripojenie neadmina k RDP reláciám používateľov v WinServer 2012R2

Už po "vynájdení" nášho bicykla sa našli zmysluplné informácie k téme článku: RDS Shadow – tienové pripojenie k RDP reláciám používateľov vo Windows Server 2012 R2 alebo Režim shadow neprivilegovaného používateľa vo Windows Serveri alebo Delegujeme riadenie RDP relácií. Všetky z nich predpokladajú použitie konzoly, aj s prvkami jednoduchého dialógu.

Všetky nižšie uvedené informácie sú určené pre tých, ktorí normálne znášajú nenormálne úchylky na dosiahnutie požadovaného výsledku, vymýšľajúc zbytočné spôsoby.
Aby som "neťahal mačku za chvost", začnem od konca: bicykel funguje u bežného používateľa s pomocou utilitky AdmiLink, za čo autorovi ďakujem.

I. Konzola a shadow RDP.

Keďže používanie s adminskými právami konzoly Server Manager -> QuickSessionCollection -> kliknutím na reláciu zaujímavého používateľa, výberom v kontextovej ponuke Shadow (Tienená kópia) pre personál, ktorý školí o práci s ПО, — nie je variant, bol zvažovaný iný "drevený" spôsob, a to:

1. Zistíme RDP id relácie:

query user | findstr Administrator

alebo:

qwinsta | findstr Administrator 

Prípadne "| findstr Administrator" bolo užitočné len keď viete, že presne Administrator je to, čo potrebujete, alebo použiť len prvú časť na prezeranie všetkých používateľov prihlásených na server.

Nástroj pre ľudské shadow pripojenie neadmina k RDP reláciám používateľov v WinServer 2012R2

2. Pripojíme sa k tejto relácii, pokiaľ sú v doménových skupinových politikách parametre "Špecifikuje pravidlá vzdialeného ovládania pre používateľské relácie služieb vzdialených pracovných stolov" zvolené aspoň ako "Sledovanie relácie so súhlasom používateľa" (podrobnejšie):

mstsc /shadow:127

Upozorňujem, že v zozname budú iba prihlasovacie údaje používateľov.

Opakujem, že bez adminských práv dostanete nasledujúce:

Nástroj pre ľudské shadow pripojenie neadmina k RDP reláciám používateľov v WinServer 2012R2

Ale na predbežné ladenie programu, o ktorom sa bude hovoriť, som použil účet s administrátorskými právami.

II. Program

Takže úloha je stanovená: vytvorenie jednoduchého grafického rozhrania pre pripojenie k „tieňovému“ senzoru používateľa s jeho súhlasom a odoslanie správy používateľovi. Programovacie prostredie bolo zvolené Lazarus.

1. Získavame úplný zoznam používateľov „login“ – „celé meno“ od administrátora, alebo opäť cez konzolu:

wmic useraccount get Name,FullName 

nikto to ani nezakazuje:

wmic useraccount get Name,FullName > c:testusername.txt

Poviem rovno, že práve v Lazaruse bola problémy s spracovaním tohto súboru, pretože jeho predvolená kódovanie je UCS-2, takže som ho musel jednoducho rukami previesť na bežný UTF-8. V štruktúre súboru je veľa tabulátorov, presnejšie množstvo medzier, ktoré sme sa rozhodli nakoniec spracovať programovo, skôr či neskôr sa táto úloha s kódovaním vyrieši a súbor sa bude aktualizovať programovo.

Takže, plán je, že priečinok, ktorý bude dostupný pre používateľov programu, napríklad c:test, bude obsahovať 2 súbory: prvý s login a fullname, druhý s id_rdp a login používateľov. Následne tieto údaje spracujeme, ako môžeme:).

A zatiaľ na asociáciu so zoznamom relácií prenášame toto (login a fullname) obsah do poľa:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin  //f_d globálna cesta k umiestneniu súborov 
f1:=f_d+'user_name.txt';     //úloha načítať do poľa obsah súboru
fL := TStringList.Create; // riadok podrobíme metamorfózam s oddeľovačmi
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1); 
try // Otvoriť súbor na čítanie
  reset(F); ReadLn(F,line1);
  i:=0;
while not eof(F) do // Čítame riadky, kým sa súbor nevyčerpá
begin
ReadLn(F,line1);
line1:= StringReplace(line1, '  ', '|',[]); //nahradíme prvé 2 medzery oddeľovačom |
// odstránime všetky dvojité medzery
while pos('  ',line1)>0 do line1:= StringReplace(line1, '  ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin //ak oddeľovač existuje, uložme ho do poľa
fL.DelimitedText :=line1; // rozdelíme na stĺpce
if (fL[0] '') then //ak účet má meno
begin //vložíme ho do poľa
 inc(i); // zbavíme sa možných osamelých medzier v logine
 fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
 fam[1,i]:=fL[0];
 end;end;end;end; // Hotovo. Zatvárame súbor.
 CloseFile(F);
 Fl.Free;
 except
 on E: EInOutError do  ShowMessage('Chyba spracovania súboru. Podrobnosti: '+E.Message);
 end;end;

Ospravedlňujem sa za „veľa kódu“, ďalšie body budú stručnejšie.

2. Rovnako metódou z predchádzajúceho bodu prečítame výsledok spracovania zoznamu do prvku StringGrid, pričom uvádzam "významný" úryvok kódu:

2.1 Získame aktuálny zoznam RDP relácií do súboru:

f1:=f_d+'user.txt';
cmdline:='\/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); \/\/ môžeme počkať aj dlhšie, kým sa súbor vytvorí na čítanie

2.2 Spracovávame súbor (uvádzam len významné riadky kódu):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; \/\/ v cykle pridávame do StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); \/\/ odstraňujeme z loginu medzery
if (SearchArr(login1)>=0) then \/\/ hľadáme v poli z p1. login a zapisujeme do tabuľky FIO
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; \/\/ alebo zapisujeme plusík:)
.... \/\/ v závislosti od voľby používateľa triedime a formátujeme podľa údajov
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. Priamo pripojenie po kliknutí na riadok s používateľom a číslom jeho relácie:

  id:=(StringGrid1.Row);\/\/ zistíme číslo riadku  IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; \/\/ získame identifikátor rdp
  cmdline:='\/c mstsc \/shadow:'+ ids; \/\/ a pripojíme sa....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. Urobilo sa ešte pár vylepšení typu triedenia po kliknutí na radiobutton a správa používateľom, alebo všetkým používateľom.

Nástroj pre ľudské shadow pripojenie neadmina k RDP reláciám používateľov v WinServer 2012R2

→ Úplný zdrojový kód si môžete pozrieť tu

III. Použitie AdminLink — čo som videl:

AdminLink skutočne generuje skratku, ktorá odkazuje na umiestnenie utilitky admilaunch.exe, a osobnú kópiu utilitky na spustenie AdmiRun.Exe ktorá sa nachádza v priečinku používateľa, napríklad vasya, typu C:UsersvasyaWINDOWS. Všeobecne, nie je to také zlé: s právami prístupu k súboru skratky a inými, pre vyčistenie vlastného administrátorského svedomia, sa dá pohrať.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster