Utiliti untuk sambungan bayangan manusia bukan pentadbir kepada sesi pengguna RDP dalam WinServer 2012R2

Masalah semasa tempoh kuarantin perusahaan menjadi seperti berikut: adalah benar-benar perlu untuk meminimumkan bilangan lawatan ke pejabat oleh pakar yang membuat servis dan perundingan mengenai perisian aplikasi, dan secara terus terang, pengguna sering menyalahgunakan bantuan pakar tanpa mahu menyelidikinya. isu itu sendiri, mereka berkata "mereka akan datang - mereka akan membantu - mereka akan melakukannya, tetapi saya akan merokok/minum kopi, dll." Perundingan telefon semasa berkongsi pelayan adalah lebih berkesan jika anda melihat skrin jauh.

Utiliti untuk sambungan bayangan manusia bukan pentadbir kepada sesi pengguna RDP dalam WinServer 2012R2

Selepas "ciptaan" basikal kami, maklumat waras mengenai topik artikel itu muncul: RDS Shadow – sambungan bayangan ke sesi pengguna RDP dalam Windows Server 2012 R2 atau Mod bayangan pengguna yang tidak mempunyai hak istimewa dalam pelayan windows atau Mewakilkan pengurusan sesi RDP. Kesemuanya melibatkan penggunaan konsol, walaupun dengan unsur-unsur dialog mudah.

Semua maklumat di bawah adalah bertujuan untuk mereka yang bertolak ansur dengan penyelewengan yang tidak normal secara normal untuk mendapatkan hasil yang diingini, mencipta kaedah yang tidak perlu.
Untuk tidak "menarik ekor kucing", saya akan mulakan dengan yang terakhir: basikal berfungsi untuk pengguna biasa yang menggunakan utiliti AdmiLink, yang terima kasih kepada pengarangnya.

I. Konsol dan RDP bayangan.

Sejak digunakan dengan hak pentadbir konsol Pengurus Pelayan -> QuickSessionCollection -> dengan mengklik pada sesi pengguna yang diminati, memilih Shadow dari menu konteks untuk kakitangan yang mengarahkan cara menggunakan perisian, bukan pilihan, kaedah "kayu" lain telah dipertimbangkan, iaitu:

1. Ketahui id RDP sesi:

query user | findstr Administrator

atau:

qwinsta | findstr Administrator 

Lebih-lebih lagi"| findstr Pentadbir"Ia hanya mudah apabila anda tahu apa sebenarnya pentadbir anda perlukan, atau gunakan hanya bahagian pertama untuk melihat semua orang log masuk ke pelayan.

Utiliti untuk sambungan bayangan manusia bukan pentadbir kepada sesi pengguna RDP dalam WinServer 2012R2

2. Sambung ke sesi ini, dengan syarat dalam domain dasar kumpulan Pilihan "Sediakan peraturan kawalan jauh untuk sesi Perkhidmatan Desktop Jauh pengguna" dipilih dengan sekurang-kurangnya pilihan "Pantau sesi dengan kebenaran pengguna" dipilih (lebih):

mstsc /shadow:127

Sila ambil perhatian bahawa senarai hanya akan mengandungi log masuk pengguna.

Saya ulangi bahawa tanpa hak pentadbir anda akan mendapat perkara berikut:

Utiliti untuk sambungan bayangan manusia bukan pentadbir kepada sesi pengguna RDP dalam WinServer 2012R2

Tetapi untuk penyahpepijatan awal program yang akan dibincangkan, saya menggunakan akaun dengan hak pentadbir.

II. Program

Jadi penyataan masalah: mencipta beberapa antara muka grafik mudah untuk menyambung kepada deria bayang pengguna dengan kebenarannya, menghantar mesej kepada pengguna. Persekitaran pengaturcaraan yang dipilih ialah Lazarus.

1. Kami mendapat senarai domain penuh pengguna "log masuk" - "nama penuh" daripada pentadbir, atau sekali lagi melalui konsol:

wmic useraccount get Name,FullName 

tiada siapa yang melarang walaupun ini:

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

Saya akan katakan dengan serta-merta bahawa Lazarus yang mempunyai masalah dengan memproses fail ini, kerana secara lalai pengekodannya ialah UCS-2, jadi saya hanya perlu menukarnya secara manual kepada UTF-8 biasa. Terdapat banyak tab dalam struktur fail, atau lebih tepatnya banyak ruang, yang diputuskan untuk diproses secara pemrograman; lambat laun masalah pengekodan akan diselesaikan, dan fail akan dikemas kini secara pemrograman.

Jadi, ideanya adalah untuk mempunyai folder yang boleh diakses oleh pengguna program, contohnya c:test, di mana akan ada 2 fail: yang pertama dengan log masuk dan nama penuh, yang kedua dengan id_rdp dan log masuk pengguna. Seterusnya, kami memproses data ini sebaik mungkin :).

Sementara itu, untuk mengaitkan dengan senarai sesi, kami memindahkan kandungan (log masuk dan nama penuh) ini kepada tatasusunan:

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;

Saya memohon maaf atas "banyak kod", perkara berikut akan menjadi lebih ringkas.

2. Menggunakan kaedah yang sama dari perenggan sebelumnya, kami membaca hasil pemprosesan senarai ke dalam elemen StringGrid, sementara saya akan memberikan sekeping kod "penting":

2.1 Kami menerima senarai semasa sesi RDP dalam 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 Proses fail (hanya baris kod yang penting ditunjukkan):

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. Sambungan terus sendiri dengan mengklik pada baris dengan pengguna dan nombor sesinya:

  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. Beberapa lagi hiasan telah dibuat, seperti mengisih dengan mengklik butang radio dan mesej kepada pengguna atau semua pengguna.

Utiliti untuk sambungan bayangan manusia bukan pentadbir kepada sesi pengguna RDP dalam WinServer 2012R2

β†’ Kod sumber penuh boleh dilihat di sini

III. Menggunakan AdminLink - apa yang saya lihat:

AdminLink menjana pintasan yang merujuk lokasi utiliti admilaunch.exe, dan salinan peribadi utiliti pelancaran AdmiRun.Exe yang terletak dalam folder pengguna, sebagai contoh Vasya, taip C:UsersvasyaWINDOWS. Secara umum, tidak semuanya begitu buruk: anda boleh bermain-main dengan hak akses kepada fail pintasan dan lain-lain untuk membersihkan hati nurani pentadbir anda sendiri.

Sumber: www.habr.com

Tambah komen