Lietderība cilvēka ēnu savienojumam bez administratora ar RDP lietotāja sesijām programmā WinServer 2012R2

Problēma uzņēmuma karantīnas periodā kļuva par sekojošu: tiešām ir jāsamazina lietojumprogrammatūru apkalpojošo un konsultējošo speciālistu apmeklējumu skaits birojos, un, atklāti sakot, lietotāji bieži vien ļaunprātīgi izmanto speciālistu palīdzību, nevēloties tajā iedziļināties. pats jautājums, viņi saka: "atnāks - palīdzēs - izdarīs, bet es smēķēšu / dzeršu kafiju utt." Konsultācijas pa tālruni servera koplietošanas laikā ir efektīvākas, ja skatāties attālo ekrānu.

Lietderība cilvēka ēnu savienojumam bez administratora ar RDP lietotāja sesijām programmā WinServer 2012R2

Pēc mūsu velosipēda “izgudrošanas” parādījās saprātīga informācija par raksta tēmu: RDS Shadow — ēnu savienojums ar RDP lietotāju sesijām operētājsistēmā Windows Server 2012 R2 vai Nepriviliģēts lietotāja ēnu režīms Windows serverī vai LAP sesiju vadības deleģēšana. Visi no tiem ir saistīti ar konsoles izmantošanu, pat ar vienkārša dialoga elementiem.

Visa zemāk esošā informācija ir paredzēta tiem, kuri normāli pacieš nenormālas perversijas lai iegūtu vēlamo rezultātu, izgudrojot nevajadzīgas metodes.
Lai “nevilktu kaķi aiz astes”, sākšu ar pēdējo: velosipēds strādā vidusmēra lietotājam, izmantojot utilītu. AdmiLink, par ko paldies tās autoram.

I. Konsole un ēna LAP.

Kopš lietošanas ar servera pārvaldnieka konsoles administratora tiesības -> QuickSessionCollection -> noklikšķinot uz interesējošā lietotāja sesijas, konteksta izvēlnē atlasot Shadow personālam, kas instruē, kā lietot programmatūru, nav iespēja, tika apsvērta cita “koka” metode, proti:

1. Noskaidrojiet sesijas LAP id:

query user | findstr Administrator

vai:

qwinsta | findstr Administrator 

Turklāt "| findstr Administrators"Tas bija ērti tikai tad, kad zinājāt, ko tieši administrators vai izmantojiet tikai pirmo daļu, lai redzētu visus, kas ir pieteikušies serverī.

Lietderība cilvēka ēnu savienojumam bez administratora ar RDP lietotāja sesijām programmā WinServer 2012R2

2. Izveidojiet savienojumu ar šo sesiju, ja vien domēnā grupas politikas Opcija "Iestatīt attālās darbvirsmas pakalpojumu lietotāju sesijām tālvadības pults noteikumus" ir atlasīta ar vismaz opciju "Uzraudzīt sesiju ar lietotāja atļauju" (vairāk):

mstsc /shadow:127

Lūdzu, ņemiet vērā, ka sarakstā būs tikai lietotāju pieteikšanās.

Es atkārtoju, ka bez administratora tiesībām jūs iegūsit sekojošo:

Lietderība cilvēka ēnu savienojumam bez administratora ar RDP lietotāja sesijām programmā WinServer 2012R2

Bet iepriekšējai programmas atkļūdošanai, par kuru tiks runāts, es izmantoju kontu ar administratora tiesībām.

II. Programma

Tātad problēmas paziņojums: vienkārša grafiskā interfeisa izveidošana, lai ar viņa atļauju izveidotu savienojumu ar lietotāja ēnu sajūtu, nosūtot lietotājam ziņojumu. Izvēlētā programmēšanas vide ir Lazarus.

1. Mēs saņemam pilnu lietotāju domēnu sarakstu “pieteikšanās” — “pilns vārds” no administratora vai vēlreiz, izmantojot konsoli:

wmic useraccount get Name,FullName 

neviens neaizliedz pat to:

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

Uzreiz teikšu, ka problēmas ar šī faila apstrādi radās Lazarus, jo pēc noklusējuma tā kodējums ir UCS-2, tāpēc man tas vienkārši bija manuāli jāpārvērš uz parasto UTF-8. Failu struktūrā ir daudz ciļņu vai drīzāk daudz atstarpju, kuras tika nolemts apstrādāt programmatiski; agri vai vēlu kodēšanas problēma tiks atrisināta, un fails tiks atjaunināts programmatiski.

Tātad, ideja ir izveidot programmas lietotājiem pieejamu mapi, piemēram, c:test, kurā būs 2 faili: pirmais ar pieteikumvārdu un pilnu vārdu, otrais ar id_rdp un lietotāju pieteikšanos. Tālāk mēs apstrādājam šos datus pēc iespējas labāk :).

Tikmēr, lai saistītu ar sesiju sarakstu, mēs pārsūtām šo (pieteikšanās un pilnais vārds) saturu uz masīvu:

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;

Es atvainojos par "daudz koda", turpmākie punkti būs kodolīgāki.

2. Izmantojot to pašu metodi no iepriekšējās rindkopas, mēs nolasām saraksta apstrādes rezultātu StringGrid elementā, savukārt es ievadīšu “nozīmīgu” koda daļu:

2.1 Mēs saņemam pašreizējo LAP sesiju sarakstu failā:

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. Apstrādājiet failu (tiek norādītas tikai nozīmīgas koda rindas):

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. Tiešais savienojums, noklikšķinot uz līnijas ar lietotāju un viņa sesijas numuru:

  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. Ir izgatavoti vēl pāris dekorācijas, piemēram, šķirošana, nospiežot radiopogu, un ziņojumi lietotājam vai visiem lietotājiem.

Lietderība cilvēka ēnu savienojumam bez administratora ar RDP lietotāja sesijām programmā WinServer 2012R2

→ Var redzēt pilnu pirmkodu šeit

III. Izmantojot AdminLink - ko es redzēju:

AdminLink ģenerē saīsni, kas norāda uz utilīta atrašanās vietu admilaunch.exeun palaišanas utilīta personīgo kopiju AdmiRun.Exe kas atrodas, piemēram, lietotāja mapē vasja, tips C:UsersvasyaWINDOWS. Kopumā ne viss ir tik slikti: varat paspēlēties ar piekļuves tiesībām saīsnes failam un citiem, lai notīrītu savu administratora sirdsapziņu.

Avots: www.habr.com

Pievieno komentāru