Žmogaus šešėlinio ne administratoriaus prisijungimo prie KPP vartotojo seansų programa WinServer 2012R2

Problema įmonės karantino laikotarpiu tapo tokia: tikrai būtina kuo labiau sumažinti taikomąją programinę įrangą aptarnaujančių ir konsultuojančių specialistų apsilankymų biuruose skaičių, o atvirai kalbant, vartotojai dažnai piktnaudžiauja specialistų pagalba, nenorėdami gilintis. pati problema, jie sako: „ateis - padės - padarys, bet aš parūkysiu/geriu kavą ir pan. Konsultacijos telefonu bendrinant serverį yra efektyvesnės, jei žiūrite nuotolinį ekraną.

Žmogaus šešėlinio ne administratoriaus prisijungimo prie KPP vartotojo seansų programa WinServer 2012R2

Po mūsų dviračio „išradimo“ pasirodė protinga informacija straipsnio tema: RDS šešėlis – šešėlinis ryšys su RDP vartotojo sesijomis sistemoje Windows Server 2012 R2 arba Neprivilegijuotas vartotojo šešėlinis režimas Windows serveryje arba KPP seansų valdymo delegavimas. Visi jie apima konsolės naudojimą, net ir su paprasto dialogo elementais.

Visa žemiau pateikta informacija skirta tiems, kurie normaliai toleruoja nenormalius iškrypimus norint gauti norimą rezultatą, išradinėti nereikalingus metodus.
Kad „netempčiau katės už uodegos“, pradėsiu nuo paskutinio: dviratis tinka paprastam vartotojui, naudojantis programa AdmiLink, už ką ačiū jos autoriui.

I. Konsolė ir šešėlis KPP.

Nuo naudojimo su Serverio tvarkyklės konsolės administratoriaus teisės -> QuickSessionCollection -> spustelėdami dominančio vartotojo seansą, kontekstiniame meniu pasirinkdami Shadow personalui, kuris moko naudotis programine įranga, nėra pasirinkimas, buvo svarstomas kitas „medinis“ metodas, būtent:

1. Sužinokite seanso KPP ID:

query user | findstr Administrator

arba:

qwinsta | findstr Administrator 

Be to "| findstr Administratorius„Buvo patogu tik tada, kai žinai, ką tiksliai administratorius jums reikia arba naudokite tik pirmąją dalį, kad pamatytumėte visus prisijungusius prie serverio.

Žmogaus šešėlinio ne administratoriaus prisijungimo prie KPP vartotojo seansų programa WinServer 2012R2

2. Prisijunkite prie šios sesijos, jei domene grupės politika Parinktis „Nustatyti nuotolinio valdymo taisykles nuotolinio darbalaukio paslaugų vartotojo seansams“ pažymėta, kai pasirinkta bent parinktis „Stebėti seansą su vartotojo leidimu“ (daugiau):

mstsc /shadow:127

Atminkite, kad sąraše bus tik naudotojų prisijungimai.

Kartoju, kad be administratoriaus teisių gausite šiuos dalykus:

Žmogaus šešėlinio ne administratoriaus prisijungimo prie KPP vartotojo seansų programa WinServer 2012R2

Tačiau preliminariam programos, kuri bus aptariama, derinimui naudojau paskyrą su administratoriaus teisėmis.

II. Programa

Taigi problemos teiginys: paprastos grafinės sąsajos sukūrimas, norint prisijungti prie vartotojo šešėlio pojūčio, jam leidus, išsiųsti pranešimą vartotojui. Pasirinkta programavimo aplinka Lazarus.

1. Iš administratoriaus arba dar kartą per pultą gauname visą vartotojų domenų sąrašą „prisijungimas“ – „visas vardas“:

wmic useraccount get Name,FullName 

niekas net to nedraudžia:

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

Iš karto pasakysiu, kad Lazarus turėjo problemų su šio failo apdorojimu, nes pagal numatytuosius nustatymus jo kodavimas yra UCS-2, todėl turėjau jį rankiniu būdu konvertuoti į įprastą UTF-8. Failų struktūroje yra daug skirtukų, tiksliau, daug tarpų, kuriuos buvo nuspręsta apdoroti programiškai, anksčiau ar vėliau kodavimo problema bus išspręsta, o failas bus atnaujintas programiškai.

Taigi, idėja yra turėti programos vartotojams prieinamą aplanką, pvz., c:test, kuriame bus 2 failai: pirmasis su prisijungimu ir visu vardu, antrasis su id_rdp ir vartotojų prisijungimu. Toliau šiuos duomenis apdorojame kuo geriau :).

Tuo tarpu, norėdami susieti su seansų sąrašu, perkeliame šį (prisijungimo vardą ir vardą) turinį į masyvą:

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;

Atsiprašau už „daug kodo“, šie punktai bus glaustesni.

2. Naudodami tą patį ankstesnės pastraipos metodą, perskaitome sąrašo apdorojimo rezultatą į StringGrid elementą, o aš pateiksiu „reikšmingą“ kodo dalį:

2.1 Dabartinį KPP seansų sąrašą gauname faile:

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 Apdorokite failą (rodomos tik svarbios kodo eilutės):

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. Pats tiesioginis ryšys spustelėjus eilutę su vartotoju ir jo seanso numeriu:

  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. Padaryta dar pora dekoracijų, pavyzdžiui, rūšiavimas paspaudus akutę ir žinutės vartotojui arba visiems vartotojams.

Žmogaus šešėlinio ne administratoriaus prisijungimo prie KPP vartotojo seansų programa WinServer 2012R2

→ Galima pamatyti visą šaltinio kodą čia

III. „AdminLink“ naudojimas – ką mačiau:

„AdminLink“ sukuria nuorodą, kurioje nurodoma paslaugų programos vieta admilaunch.exe, ir asmeninė paleidimo priemonės kopija AdmiRun.Exe kuris yra, pavyzdžiui, vartotojo aplanke vasya, tipas C: Vartotojai WINDOWS. Apskritai, ne viskas taip blogai: galite žaisti su prieigos teisėmis prie nuorodų failo ir kitų, kad išvalytumėte savo administratoriaus sąžinę.

Šaltinis: www.habr.com

Добавить комментарий