Eszköz, amely lehetővé teszi az adminisztrátori jogosultságok nélküli felhasználók RDP munkamenetekhez való csatlakozását a WinServer 2012R2 rendszeren.

A probléma a vállalat karanténidejében a következő lett: valóban minimalizálni kell a szakemberek irodai látogatásainak számát, akik az alkalmazás szoftverrel kapcsolatban nyújtanak támogatást és tanácsot, és őszintén szólva, a felhasználók gyakran visszaélnek a szakemberek segítségével, anélkül, hogy valóban mélyebben megértenék a problémát, azzal, hogy "jönnek — segítenek — megcsinálják, amíg én egy kicsit pihenek/kávézom stb.". A telefonos konzultáció a szerver távoli képernyőjének megosztása mellett hatékonyabb.

Eszköz, amely lehetővé teszi az adminisztrátori jogosultságok nélküli felhasználók RDP munkamenetekhez való csatlakozását a WinServer 2012R2 rendszeren.

Miután a "biciklink" kitalálásra került, újabb érdemi információ bukkant fel a cikk témájáról: RDS Shadow – árnyékolt kapcsolódás az RDP felhasználói munkamenetekhez Windows Server 2012 R2 alatt. vagy Az árnyékoló üzemmód nem adminisztrátori felhasználóknál Windows Server alatt. vagy RDP munkamenetek kezelése delegálva.. Mindegyikük konzol használatát feltételezi, akár egyszerű párbeszédes elemekkel is.

Az alábbi információ mindenki számára készült, aki normálisan bírja a nem normális túlkapásokat a kívánt eredmény elérése érdekében, felesleges megoldások kitalálásával.
A "macska húzogatása" elkerülése érdekében az utolsóval kezdem: a bicikli egy átlagos felhasználónál az AdmiLink, amiért a szerzőjének köszönet jár.

I. Konzol és shadow RDP.

Mivel a Server Manager konzol adminisztrátori jogokkal való használata -> QuickSessionCollection -> az érdeklődő felhasználó munkamenetének kiválasztásával a jobb klikk menüben a Shadow (Árnyékkép) lehetőség választásával a szoftverrel kapcsolatos munkát instruáló személyzet számára , — nem volt opció, ezért egy másik "fapados" módszer került előtérbe, mégpedig:1. Megtudjuk az RDP munkamenet id-jét:

query user | findstr Administrator

qwinsta | findstr Administrator

vagy:

" 

| findstr Administrator" csak akkor volt hasznos, ha tudtad, hogy pontosanmire van szükséged, vagy a teljes népszerűsítést használd, hogy lásd az összes bejelentkezett felhasználót a szerveren. Administrator 2. Csatlakozunk ehhez a munkamenethez, feltéve, hogy a domainekben

Eszköz, amely lehetővé teszi az adminisztrátori jogosultságok nélküli felhasználók RDP munkamenetekhez való csatlakozását a WinServer 2012R2 rendszeren.

csoportházirendekben a "Távoli irányítási szabályok a távoli asztali szolgáltatások felhasználói munkameneteihez" paraméter legalább "A felhasználó engedélyével naplózzák a munkamenetet" opcióra van állítva ( mstsc /shadow:127több részletért):

Kérem, vegye figyelembe, hogy a listában csak a felhasználói bejelentkezések jelennek meg.

Ismétlem, hogy adminisztrátori jogok nélkül a következőket fogja kapni:

De a következő program előzetes hibakereséséhez, amelyről szó lesz, adminisztrátori jogokkal rendelkező fiókot használtam.

Eszköz, amely lehetővé teszi az adminisztrátori jogosultságok nélküli felhasználók RDP munkamenetekhez való csatlakozását a WinServer 2012R2 rendszeren.

Но для предварительной отладки программы, о которой пойдет речь, я использовал учетку с правами администратора.

II. Program

Tehát a feladat a következő: egy egyszerű grafikus felület létrehozása a felhasználó árnyékérzékelőjéhez való csatlakozáshoz, a felhasználó engedélyével, és üzenet küldése a felhasználónak. A programozási környezet Lazarus lett kiválasztva.

1. A felhasználók teljes domainlistájának megszerzése "bejelentkezés" — "teljes név" az adminisztrátortól, vagy ismét a konzolon keresztül:

wmic useraccount get Name,FullName 

Senki nem tilthatja meg ezt így:

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

Elmondom, hogy a Lazarus-nak problémája volt a fájl kezelésével, mivel alapértelmezett kódolása UCS-2, ezért egyszerűen manuálisan kellett átkonvertálni normál UTF-8-ra. A fájl struktúrájában sok tabulátor van, pontosabban sok szóköz, amit programozott módon kellett feldolgozni, korán vagy későn a karakterkódolás problémája megoldódik, és a fájl programozottan frissülni fog.

Tehát a tervek szerint lesz egy mappa, amely elérhető a program felhasználói számára, például c:test, amelyben 2 fájl lesz: az első a bejelentkezéssel és a teljes névvel, a második az id_rdp-vel és a felhasználók bejelentkezésével. Ezeket az adatokat aztán feldolgozzuk, ahogy tudjuk:).

Addig is, hogy társítsuk a munkamenetek listájával, átkonvertáljuk ezt (bejelentkezés és teljes név) egy tömbbe:

procedure Tf_rdp.UserF2Array;
var 
  F:TextFile;   i:integer;   f1, line1:String;   fL: TStringList;
begin 
 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, '  ', '|',[]);
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('Fájl feldolgozási hiba. Részletek: '+E.Message);
 end;end;

Elnézést kérek a "sok kódért", a következő pontok rövidebbek lesznek.

2. Hasonlóan az előző pontban leírt módszerhez, olvassuk be a lista feldolgozásának eredményét a StringGrid elembe, ezért bemutatok egy "jelentős" kód részletet:

2.1. Beszerezzük az aktuális RDP munkamenetek listáját egy fájlba:

f1:=f_d+'user.txt';
cmdline:='\/c query user >'+ f1;
if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1)=0 then;
Sleep(500); \/\/ várhatunk hosszabb ideig is, amíg a fájl elkészül az olvasáshoz

2.2. Feldolgozzuk a fájlt (csak a jelentős kódrészletek vannak megadva):

StringGrid1.Cells[0,i]:=fL[1]; StringGrid1.Cells[2,i]:=fL[3]; \/\/ciklusban betesszük a StringGrid1-be
login1:=StringReplace(fL[1],' ','',[rfReplaceall, rfIgnoreCase]); \/\/eltávolítjuk a szóközöket a belépési névből
if (SearchArr(login1)>=0) then \/\/keresünk az p1-es tömbben, és beírjuk az adatbázisba a nevet
StringGrid1.Cells[1,i]:=fam[1,SearchArr(login1)]
else StringGrid1.Cells[1,i]:='+'; \/\/ vagy beírunk egy pluszjelet:)
.... \/\/ a felhasználó választása szerint rendezünk és formázunk az adatok alapján
if (b_id.Checked=true) then SortGrid(0) else SortGrid(1);
StringGrid1.AutoSizeColumn(0);StringGrid1.AutoSizeColumn(1); StringGrid1.AutoSizeColumn(2);  

3. Közvetlenül a csatlakozás, amikor a felhasználó és az ő munkamenetének számát tartalmazó sorra kattintunk:

  id:=(StringGrid1.Row);\/\/ megtudjuk a sor számát  IntToStr(StringGrid1.Row)
  ids:=StringGrid1.Cells[2,id]; \/\/megszerezzük az RDP azonosítót
  cmdline:='\/c mstsc \/shadow:'+ ids; \/\/és csatlakozunk....
 if (b_rdp.Checked=True) then  if ShellExecute(0,nil, PChar('cmd'),PChar(cmdline),nil,1) =0 then;       

4. Készült még néhány díszítés, mint például rendezés kattintásra a radiobutton-re, és üzenetek a felhasználónak, vagy minden felhasználónak.

Eszköz, amely lehetővé teszi az adminisztrátori jogosultságok nélküli felhasználók RDP munkamenetekhez való csatlakozását a WinServer 2012R2 rendszeren.

→ A teljes forrást kódot lehet megtekinteni itt

III. Az AdminLink alkalmazása — amit láttam:

Az AdminLink valóban létrehoz egy parancsikont, amely hivatkozik az eszköz elérési útjára admilaunch.exe, és a program elindításának saját másolatára AdmiRun.Exe ami a felhasználó mappájában található, például vasya, hasonlóan C:UsersvasyaWINDOWS. Összességében nem olyan rossz: a fájl parancsikonra vonatkozó jogosultságokkal és egyebekkel játszadozva, tisztábbá tehetjük a saját adminisztrátori lelkiismeretünket.

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster