Pomôcka pre ľudské tieňové pripojenie neadministrátora k užívateľským reláciám RDP vo WinServer 2012R2

Problémom počas karanténneho obdobia podniku sa stal nasledujúci: je skutočne potrebné minimalizovať počet návštev kancelárií špecialistov, ktorí obsluhujú a konzultujú aplikačný softvér, a úprimne povedané, používatelia často zneužívajú pomoc špecialistov bez toho, aby sa chceli ponoriť do samotný problém, hovoria „prídu – pomôžu – urobia to, ale ja budem fajčiť/piť kávu atď.“ Telefonická konzultácia pri zdieľaní servera je efektívnejšia, ak si prezeráte vzdialenú obrazovku.

Pomôcka pre ľudské tieňové pripojenie neadministrátora k užívateľským reláciám RDP vo WinServer 2012R2

Po „vynáleze“ nášho bicykla sa objavili rozumné informácie k téme článku: RDS Shadow – tieňové pripojenie k užívateľským reláciám RDP v systéme Windows Server 2012 R2 alebo Neprivilegovaný režim tieňa používateľa na serveri Windows alebo Delegovanie riadenia zasadnutí PRV. Všetky zahŕňajú použitie konzoly, dokonca aj s prvkami jednoduchého dialógu.

Všetky nižšie uvedené informácie sú určené pre tých, ktorí normálne toleruje abnormálne zvrátenosti na získanie požadovaného výsledku, vymýšľanie nepotrebných metód.
Aby som „neťahal mačku za chvost“, začnem tým posledným: bicykel funguje pre bežného užívateľa pomocou utility AdmiLink, za čo patrí vďaka jeho autorovi.

I. Konzolový a tieňový RDP.

Od používania s administrátorské práva konzoly Server Manager -> QuickSessionCollection -> kliknutím na reláciu používateľa, o ktorú máte záujem, výberom položky Shadow z kontextovej ponuky pre personál, ktorý bude poučovať o používaní softvéru, nie je možné, zvažovala sa iná „drevená“ metóda, a to:

1. Zistite ID RDP relácie:

query user | findstr Administrator

alebo:

qwinsta | findstr Administrator 

Navyše"| findstr správca„Bolo to pohodlné, len keď ste vedeli, čo presne správca potrebujete, alebo použite iba prvú časť, aby ste videli všetkých prihlásených na server.

Pomôcka pre ľudské tieňové pripojenie neadministrátora k užívateľským reláciám RDP vo WinServer 2012R2

2. Pripojte sa k tejto relácii za predpokladu, že v doméne skupinové politiky Je vybratá možnosť „Nastaviť pravidlá vzdialeného ovládania pre používateľské relácie služieb vzdialenej pracovnej plochy“ a vybratá aspoň možnosť „Monitorovať reláciu s povolením používateľa“ (RїRѕRґSЂRѕR ± RЅRμRμ):

mstsc /shadow:127

Upozorňujeme, že zoznam bude obsahovať iba prihlásenia používateľov.

Opakujem, že bez práv správcu získate nasledovné:

Pomôcka pre ľudské tieňové pripojenie neadministrátora k užívateľským reláciám RDP vo WinServer 2012R2

Ale na predbežné ladenie programu, o ktorom sa bude diskutovať, som použil účet s právami správcu.

II. Program

Takže vyhlásenie o probléme: vytvorenie nejakého jednoduchého grafického rozhrania na pripojenie k tieňovému zmyslu používateľa s jeho povolením a odoslanie správy používateľovi. Zvoleným programovacím prostredím je Lazarus.

1. Úplný zoznam domén používateľov „login“ – „celé meno“ dostaneme od administrátora alebo znova cez konzolu:

wmic useraccount get Name,FullName 

ani toto nikto nezakazuje:

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

Hneď poviem, že problém so spracovaním tohto súboru mal práve Lazarus, keďže štandardne je jeho kódovanie UCS-2, takže som ho musel ručne previesť na bežné UTF-8. V štruktúre súborov je veľa záložiek, alebo skôr veľa medzier, ktoré bolo rozhodnuté spracovať programovo, skôr či neskôr sa problém s kódovaním vyrieši a súbor sa programovo aktualizuje.

Ide teda o to, aby bol priečinok prístupný používateľom programu, napríklad c:test, v ktorom budú 2 súbory: prvý s prihlasovacím menom a celým menom, druhý s id_rdp a prihlásením používateľov. Ďalej tieto údaje spracovávame najlepšie ako vieme :).

Medzitým, aby sme sa priradili k zoznamu relácií, prenesieme tento obsah (prihlasovacie meno a celé meno) do poľa:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin //f_d глобальный путь к размещению файлов 
f1:=f_d+'user_name.txt';     //задача считать в массив содержимое файла
fL := TStringList.Create; // строку подвергнем метамарфозам с разделителями
fL.Delimiter := '|'; fL.StrictDelimiter := True;
AssignFile(F,f1); 
try // Открыть файл для чтения
  reset(F); ReadLn(F,line1);
  i:=0;
while not eof(F) do // Считываем строки, пока не закончится файл
begin
ReadLn(F,line1);
line1:= StringReplace(line1, '  ', '|',[]); //заменяем первый попавш.2пробела разделителем |
// удаляем все двойные пробелы
while pos('  ',line1)>0 do line1:= StringReplace(line1, '  ', ' ', [rfReplaceAll]);
begin
if (pos('|',line1)>0) then
begin //если разделитель существует заносим его в массив
fL.DelimitedText :=line1; // разбиваем на столбцы
if (fL[0]<>'') then //если учетка имеет имя
begin //вносим ее в массив
 inc(i); // избавляемся от возможных одиночных пробелов в логине
 fam[0,i]:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]);
 fam[1,i]:=fL[0];
 end;end;end;end; // Готово. Закрываем файл.
 CloseFile(F);
 Fl.Free;
 except
 on E: EInOutError do  ShowMessage('Ошибка обработки файла. Детали: '+E.Message);
 end;end;

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

2. Rovnakým spôsobom z predchádzajúceho odseku prečítame výsledok spracovania zoznamu do prvku StringGrid, pričom uvediem „významný“ kúsok kódu:

2.1 Dostávame aktuálny zoznam relácií RDP v súbore:

f1:=f_d+'user.txt';
cmdline:='/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); // можно и подольше ждать пока файл для чтения создается

2.2 Spracujte súbor (uvedené sú len významné riadky kódu):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; //кидаем в цикле в StringGrid1
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); //убираем из логина пробелы
if (SearchArr(login1)>=0) then //ищем в массиве из п1. логин и записываем в таблицу ФИО
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; // либо записываем плюсик:)
.... //в зависимости от выбора пользователя сортируем и форматируем по данным
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. Samotné priame pripojenie kliknutím na riadok s používateľom a jeho číslom relácie:

  id:=(StringGrid1.Row);// узнаем номер строки  IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; //получаем идентификатор rdp
  cmdline:='/c mstsc /shadow:'+ ids; //и подключаемся....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. Urobilo sa niekoľko ďalších dekorácií, ako je triedenie kliknutím na prepínač a správy pre používateľa alebo všetkých používateľov.

Pomôcka pre ľudské tieňové pripojenie neadministrátora k užívateľským reláciám RDP vo WinServer 2012R2

→ Môžete vidieť úplný zdrojový kód tu

III. Používanie AdminLink – čo som videl:

AdminLink generuje skratku, ktorá odkazuje na umiestnenie pomôcky admilaunch.exea osobnú kópiu spúšťacieho nástroja AdmiRun.Exe ktorý sa nachádza napríklad v priečinku používateľa Vasya, typ C: Používatelia používajú WINDOWS. Vo všeobecnosti nie je všetko také zlé: môžete sa pohrať s prístupovými právami k súboru skratiek a iným, aby ste si vyčistili svedomie správcu.

Zdroj: hab.com

Pridať komentár