Nástroj pro lidské shadow připojení neadmina k RDP sezením uživatelů ve WinServer 2012R2

Problém během karantény v práci společnosti byl následující: skutečně je potřeba minimalizovat počet návštěv kanceláří specialisty, kteří se zabývají aplikovaným softwarem, a abych byl upřímný, uživatelé často zneužívají pomoc specialistů, aniž by se chtěli ponořit do samotné problematiky, říkají: „přijdou — pomohou — udělají, já si mezitím vyjdu na cigaretu nebo si dám kávu atd.“ Telefonní konzultace při společném přístupu k serveru jsou efektivnější, pokud se díváte na vzdálenou obrazovku.

Nástroj pro lidské shadow připojení neadmina k RDP sezením uživatelů ve WinServer 2012R2

Ihned po „vynalezení“ našeho kola jsme obdrželi použitelné informace na téma článku: RDS Shadow – stínové připojení k uživatelským RDP relacím ve Windows Server 2012 R2 nebo Mód shadow neprivilegovaného uživatele ve Windows Server nebo Delegujeme správu RDP relací. Všechny tyto možnosti předpokládají použití konzole, dokonce i s prvky jednoduchého dialogu.

Všechny informace uvedené níže jsou určeny pro ty, kteří normálně snášejí nenormální úchylky pro dosažení požadovaného výsledku, vynalézají zbytečné metody.
Abych „nedržel kočku za ocas“, začnu tím nejposlednějším: kolo funguje u běžného uživatele za pomoci utilitky AdmiLink, za což autorovi patří dík.

I. Konzole a shadow RDP.

Jelikož použití s administrátorskými právy konzole Server Manager -> QuickSessionCollection -> kliknutím na relaci zajímavého uživatele a výběrem ve kontextovém menu Shadow (Stínová kopie) pro personál, školící, jak pracovat se softwarem, — není variantou, byl zvážen jiný „dřevěný“ způsob, a to:

1. Zjistíme RDP ID relace:

query user | findstr Administrator

nebo:

qwinsta | findstr Administrator 

Přitom "| findstr Administrator" bylo pohodlné pouze tehdy, když víte, že konkrétně Administrator je to, co potřebujete, jinak použijte pouze první část pro zobrazení všech přihlášených na serveru.

Nástroj pro lidské shadow připojení neadmina k RDP sezením uživatelů ve WinServer 2012R2

2. Připojíme se k této relaci, pokud v doménových skupinových politikách je parametr „Nastavuje pravidla pro vzdálené ovládání pro uživatelské relace služeb vzdálených pracovních stanic“ nastaven alespoň na „Pozorování relace se souhlasem uživatele“ (více informací):

mstsc /shadow:127

Všimněte si, že v seznamu budou pouze přihlášení uživatelé.

Opakuji, že bez administrátorských práv obdržíte následující:

Nástroj pro lidské shadow připojení neadmina k RDP sezením uživatelů ve WinServer 2012R2

Ale pro předběžné ladění programu, o kterém bude řeč, jsem použil účet s administrátorskými právy.

II. Program

Takže zadání je: vytvoření jednoduchého grafického rozhraní pro připojení k skrytému smyslu uživatele s jeho souhlasem a odeslání zprávy uživateli. Programovací prostředí bylo zvoleno Lazarus.

1. Získáme kompletní seznam doménových uživatelů „přihlašovací jméno“ — „celé jméno“ od administrátora, nebo opět přes konzolu:

wmic useraccount get Name,FullName 

nikdo to neomezuje ani takto:

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

Ihned řeknu, že právě u Lazarus byl problém s zpracováním tohoto souboru, protože jeho kódování je ve výchozím nastavení UCS-2, takže jsem ho musel ručně převést na běžný UTF-8. Ve struktuře souboru je mnoho tabulátorů, lépe řečeno množství mezer, které bylo rozhodnuto programově zpracovat, dříve nebo později bude úloha s kódováním vyřešena a soubor bude programově aktualizován.

Takže, v myšlence bude složka dostupná pro uživatele programu, například c:test, ve které budou 2 soubory: první s loginem a celým jménem, druhý s id_rdp a přihlašovacími jmény uživatelů. Dále tyto údaje zpracováváme, jak umíme:).

A zatím pro asociaci se seznamem relací přesouváme toto (login a celé jméno) obsah do pole:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin //f_d globální cesta k umístění souborů 
f1:=f_d+'user_name.txt';     //úkol přečíst obsah souboru do pole
fL := TStringList.Create; // řetězec podrobíme metamorfózám s oddělovači
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1); 
try // Otevřít soubor pro čtení
  reset(F); ReadLn(F,line1);
  i:=0;
while not eof(F) do // Čteme řádky, dokud nedojdeme na konec souboru
begin
ReadLn(F,line1);
line1:= StringReplace(line1, '  ', '|',[]); //nahrazujeme první s dvojitými mezerami oddělovačem |
// odstraníme všechny dvojité mezery
while pos('  ',line1)>0 do line1:= StringReplace(line1, '  ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin // pokud oddělovač existuje, vložte ho do pole
fL.DelimitedText :=line1; // rozdělujeme na sloupce
if (fL[0]'') then // pokud účet má jméno
begin // vložte ho do pole
 inc(i); // zbavujeme se možných osamělých mezer v přihlašovacím jménu
 fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
 fam[1,i]:=fL[0];
 end;end;end;end; // Hotovo. Zavřete soubor.
 CloseFile(F);
 Fl.Free;
 except
 on E: EInOutError do  ShowMessage('Chyba zpracování souboru. Podrobnosti: '+E.Message);
 end;end;

Omlouvám se za "mnoho kódu", následující body budou výstižnější.

2. Stejně jako metodou z předchozího bodu načteme výsledek zpracování seznamu do prvku StringGrid, přičemž uvedu „významný“ kus kódu:

2.1 Získáme aktuální seznam RDP relací do souboru:

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čkat déle, než se soubor pro čtení vytvoří

2.2 Zpracováváme soubor (uvedeny jen významné řádky kódu):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; \/\/ vkládáme do StringGrid1 v cyklu
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); \/\/ odstraníme mezery z loginu
if (SearchArr(login1)>=0) then \/\/ hledáme v poli z p1. login a zapisujeme do tabulky FIO
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; \/\/ nebo zapíšeme plusíka:)
.... \/\/ podle volby uživatele třídíme a formátujeme dle údajů
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. Přímo samotné připojení při kliknutí na řádek s uživatelským jménem a číslem jeho relace:

  id:=(StringGrid1.Row);\/\/ zjistit číslo řádku IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; \/\/ získáme identifikátor rdp
  cmdline:='\/c mstsc \/shadow:'+ ids; \/\/ a připojíme se....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. Bylo uděláno ještě pár vylepšení, jako je třídění po kliknutí na radiobutton, a zprávy pro uživatele, nebo všechny uživatele.

Nástroj pro lidské shadow připojení neadmina k RDP sezením uživatelů ve WinServer 2012R2

→ Úplný zdrojový kód lze vidět zde

III. Použití AdminLink — co jsem viděl:

AdminLink skutečně generuje zástupce, který odkazuje na umístění utility admilaunch.exe, a osobní kopii utility spouštění AdmiRun.Exe která se nachází ve složce uživatele, například vasya, ve stylu C:UsersvasyaWINDOWS. Celkově to není tak špatné: s právy přístupu k souboru zástupce a dalšími, lze si pohrát pro vyčištění vlastní administrativní svědomí.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster