Utilitas untuk bayangan manusia yang menghubungkan non-admin ke sesi pengguna RDP di WinServer 2012R2

Masalah selama periode karantina perusahaan adalah sebagai berikut: sangat penting untuk meminimalkan jumlah kunjungan ke lemari oleh spesialis yang melayani dan memberi nasihat tentang perangkat lunak aplikasi, dan terus terang, pengguna sering menyalahgunakan bantuan spesialis yang tidak ingin menyelidiki pertanyaan itu sendiri, dengan mengatakan "mereka akan datang - mereka akan membantu, mereka akan melakukannya, dan sementara saya merokok / minum kopi, dll. " Berkonsultasi melalui telepon ketika berbagi server lebih efektif saat melihat layar jarak jauh.



Setelah "penemuan" sepeda kami, informasi waras muncul di topik artikel: RDS Shadow - koneksi shadow ke sesi pengguna RDP di Windows Server 2012 R2 atau mode Shadow dari pengguna yang tidak memiliki hak istimewa di windows server atau Kami mendelegasikan pengelolaan sesi RDP . Semuanya menyiratkan penggunaan konsol, bahkan dengan elemen dialog sederhana.

Semua informasi di bawah ini ditujukan bagi mereka yang biasanya mentolerir penyimpangan yang abnormal untuk mendapatkan hasil yang diinginkan, menciptakan metode yang tidak perlu.
Agar tidak "menarik ekornya", saya akan mulai dengan yang terakhir: sepeda bekerja untuk pengguna biasa menggunakan utilitas AdmiLink , yang penulis dan terima kasih.

I. Konsol dan bayangan RDP.

Karena penggunaan konsol Server Manager dengan hak administrator -> QuickSessionCollection -> dengan mengklik sesi pengguna yang diminati, memilih Shadow dari menu konteks untuk staf yang menginstruksikan bekerja dengan perangkat lunak bukanlah suatu pilihan, metode “kayu” lainnya dipertimbangkan, yaitu:

1. Kita mempelajari id sesi RDP:

query user | findstr Administrator

atau:

qwinsta | findstr Administrator 

Selain itu, " | findstr Administrator " nyaman hanya ketika Anda tahu apa yang sebenarnya Anda butuhkan Administrator , atau hanya menggunakan bagian pertama untuk melihat semua login ke server.



2. Kami terhubung ke sesi ini, asalkan dalam kebijakan grup domain parameter "Menetapkan aturan kendali jarak jauh untuk sesi pengguna Layanan Desktop Jarak Jauh" dipilih setidaknya "Memantau sesi dengan izin pengguna" ( selengkapnya ):

mstsc /shadow:127

Harap dicatat bahwa daftar ini hanya akan berisi login pengguna.

Saya ulangi bahwa tanpa hak admin Anda akan menerima yang berikut:



Tetapi untuk debugging awal dari program yang akan dibahas, saya menggunakan akun dengan hak administrator.

II Program

Jadi pernyataan masalah: membuat semacam antarmuka grafis sederhana untuk menghubungkan ke bayangan pengguna dengan izinnya, mengirim pesan ke pengguna. Lingkungan pemrograman dipilih oleh Lazarus.

1. Kami mendapatkan daftar domain lengkap dari pengguna "login" - "nama lengkap" dari administrator, atau lagi melalui konsol:

wmic useraccount get Name,FullName 

tidak ada yang melarang hal ini:

wmic useraccount get Name,FullName > c:\test\username.txt

Saya harus segera mengatakan bahwa Lazarus-lah yang memiliki masalah dengan pemrosesan file ini, karena penyandian default-nya adalah UCS-2, jadi saya hanya perlu mengubahnya secara manual ke UTF-8 biasa. Ada banyak tab dalam struktur file, atau lebih tepatnya banyak ruang yang diputuskan untuk diprogram setelah semua, cepat atau lambat masalah penyandian akan dipecahkan, dan file akan diperbarui secara terprogram.

Jadi, dalam ide folder, dapat diakses oleh pengguna program, misalnya c: \ test, di mana akan ada 2 file: yang pertama dengan login dan nama lengkap, yang kedua dengan pengguna id_rdp dan login. Selanjutnya kami memproses data ini semampu kami :).

Sementara itu, untuk dikaitkan dengan daftar sesi, kami mentransfer konten ini (login dan nama lengkap) ke sebuah array:

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 minta maaf untuk "banyak kode", poin-poin berikut akan lebih singkat.

2. Demikian pula, menggunakan metode dari paragraf sebelumnya, kita membaca hasil pemrosesan daftar menjadi elemen StringGrid, sementara saya akan memberikan sepotong kode "signifikan":

2.1. Kita mendapatkan daftar aktual sesi RDP dalam file:

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 Kami memproses file (hanya baris kode yang signifikan 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. Koneksi itu sendiri ketika Anda mengklik pada baris dengan pengguna dan nomor sesi:

  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 dekorasi lagi dibuat, seperti menyortir dengan mengklik tombol radio, dan pesan ke pengguna atau semua pengguna.



→ Kode sumber lengkap dapat dilihat di sini

III. Aplikasi AdminLink - apa yang saya lihat:

AdminLink benar-benar menghasilkan pintasan yang merujuk ke lokasi utilitas admilaunch.exe , dan salinan pribadi dari utilitas peluncuran AdmiRun.Exe yang terletak di folder pengguna, misalnya, vasya , seperti C: \ Users \ vasya \ WINDOWS \ . Secara umum, tidak semuanya buruk: Anda dapat bermain dengan hak akses ke file cara pintas dan lainnya, untuk menghapus kesadaran admin Anda sendiri.

All Articles