A probléma a vállalkozás karantén időszakában a következő lett: valóban minimalizálni kell az alkalmazásszoftvereket kiszolgáló és tanácsadással foglalkozó szakemberek irodalátogatását, és őszintén szólva a felhasználók gyakran visszaélnek a szakemberek segítségével anélkül, hogy elmélyülni akarnának. maga a kérdés, azt mondják, hogy "jönnek - segítenek - megcsinálják, de én dohányzom/kávézom stb." A telefonos konzultáció a szerver megosztása esetén hatékonyabb, ha a távoli képernyőt nézi.
Kerékpárunk „feltalálása” után a cikk témájában józan információk kerültek elő:
Minden alábbi információ azoknak szól, akik normálisan tűri a kóros perverziókat a kívánt eredmény eléréséhez, szükségtelen módszerek kitalálásával.
Annak érdekében, hogy ne húzzam a macskát a farkánál fogva, az utolsóval kezdem: a kerékpár az átlagos felhasználó számára működik a segédprogram használatával
I. Konzol és árnyék RDP.
Használata óta a Kiszolgálókezelő konzol rendszergazdai jogai -> QuickSessionCollection -> az érdeklődő felhasználó munkamenetére kattintva, a helyi menüben az Árnyék kiválasztásával a szoftver használatát oktató személyzet számára, nem választható, egy másik „fa” módszert is fontolóra vettek, nevezetesen:
1. Keresse meg a munkamenet RDP azonosítóját:
query user | findstr Administrator
vagy:
qwinsta | findstr Administrator
Ráadásul"| findstr Rendszergazda„Csak akkor volt kényelmes, ha tudtad, hogy pontosan mit adminisztrátor szüksége van rá, vagy csak az első részt használja, ha látni szeretné, hogy mindenki bejelentkezett a szerverre.
2. Csatlakozzon ehhez a munkamenethez, feltéve, hogy a tartományban van csoportszabályzat A "Távvezérlési szabályok beállítása a távoli asztali szolgáltatások felhasználói munkameneteihez" opció be van jelölve legalább a "Felhasználói engedéllyel rendelkező munkamenet figyelése" opció bejelölve (
mstsc /shadow:127
Felhívjuk figyelmét, hogy a lista csak a felhasználói bejelentkezéseket tartalmazza.
Ismétlem, hogy rendszergazdai jogok nélkül a következőket kapja:
De a szóban forgó program előzetes hibakereséséhez egy rendszergazdai jogokkal rendelkező fiókot használtam.
II. Program
Tehát a probléma megfogalmazása: valami egyszerű grafikus felület létrehozása, amellyel a felhasználó engedélyével kapcsolódni lehet a felhasználó árnyékérzetéhez, üzenetet küldeni a felhasználónak. A választott programozási környezet a Lazarus.
1. A „bejelentkezés” - „teljes név” felhasználók teljes domain listáját megkapjuk a rendszergazdától, vagy ismét a konzolon keresztül:
wmic useraccount get Name,FullName
még ezt sem tiltja senki:
wmic useraccount get Name,FullName > c:testusername.txt
Mindjárt leszögezem, hogy a Lazarusnak volt gondja ennek a fájlnak a feldolgozásával, mivel alapértelmezés szerint a kódolása UCS-2, így csak kézzel kellett átalakítanom normál UTF-8-ra. A fájlszerkezetben sok a tabulátor, vagy inkább sok szóköz, amit úgy döntöttek, hogy programozottan dolgozzák fel, előbb-utóbb megoldódik a kódolási probléma, és programozottan frissül a fájl.
Tehát az ötlet az, hogy a program felhasználói számára elérhető legyen egy mappa, például c:test, amelyben 2 fájl lesz: az első a bejelentkezési névvel és a teljes névvel, a második az id_rdp-vel és a felhasználók bejelentkezési adataival. Ezután a lehető legjobban feldolgozzuk ezeket az adatokat :).
Addig is a munkamenetek listájához való társításhoz ezt a tartalmat (bejelentkezés és teljes név) átvisszük egy tömbbe:
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;
Elnézést kérek a „sok kódért”, a következő pontok tömörebbek lesznek.
2. Az előző bekezdésben leírt módszerrel beolvassuk a lista StringGrid elembe történő feldolgozásának eredményét, miközben adok egy „jelentős” kódrészletet:
2.1 Az RDP-munkamenetek aktuális listáját egy fájlban kapjuk meg:
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 A fájl feldolgozása (csak a jelentős kódsorok jelennek meg):
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. Közvetlen kapcsolat létrehozása a felhasználót és a munkamenet számát tartalmazó sorra kattintva:
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. Készült még pár dekoráció, mint például a választógombra kattintva történő rendezés, illetve a felhasználónak vagy az összes felhasználónak szóló üzenetek.
→ A teljes forráskód látható
III. Az AdminLink használata – amit láttam:
Az AdminLink létrehoz egy parancsikont, amely hivatkozik a segédprogram helyére admilaunch.exeés az indító segédprogram személyes másolata AdmiRun.Exe amely például a felhasználó mappájában található Vasya, típus C:UsersvasyaWINDOWS. Általánosságban elmondható, hogy nem minden olyan rossz: kijátszhatja a parancsikonfájlhoz és másokhoz való hozzáférési jogokat, hogy megtisztítsa a rendszergazdai lelkiismeretét.
Forrás: will.com