WinServer 2012R2లో RDP యూజర్ సెషన్‌లకు నాన్-అడ్మినిస్ట్రేటర్ యొక్క హ్యూమన్ షాడో కనెక్షన్ కోసం యుటిలిటీ

ఎంటర్‌ప్రైజ్ యొక్క నిర్బంధ వ్యవధిలో సమస్య ఈ క్రింది విధంగా మారింది: అప్లికేషన్ సాఫ్ట్‌వేర్‌పై సర్వీసింగ్ మరియు కన్సల్టింగ్ నిపుణులు కార్యాలయాల సందర్శనల సంఖ్యను తగ్గించడం నిజంగా అవసరం, మరియు స్పష్టంగా చెప్పాలంటే, వినియోగదారులు తరచుగా లోతుగా ఆలోచించకుండా నిపుణుల సహాయాన్ని దుర్వినియోగం చేస్తారు. సమస్య కూడా, వారు "వారు వస్తారు - వారు సహాయం చేస్తారు - వారు చేస్తారు, కానీ నేను పొగ త్రాగుతాను / కాఫీ తాగుతాను, మొదలైనవి." మీరు రిమోట్ స్క్రీన్‌ను వీక్షిస్తే సర్వర్‌ను భాగస్వామ్యం చేసేటప్పుడు టెలిఫోన్ సంప్రదింపులు మరింత ప్రభావవంతంగా ఉంటాయి.

WinServer 2012R2లో RDP యూజర్ సెషన్‌లకు నాన్-అడ్మినిస్ట్రేటర్ యొక్క హ్యూమన్ షాడో కనెక్షన్ కోసం యుటిలిటీ

మా సైకిల్ యొక్క "ఆవిష్కరణ" తర్వాత, వ్యాసం యొక్క అంశంపై సేన్ సమాచారం మారింది: RDS షాడో – విండోస్ సర్వర్ 2012 R2లో RDP యూజర్ సెషన్‌లకు షాడో కనెక్షన్ లేదా విండోస్ సర్వర్‌లో అన్‌ప్రివిలేజ్డ్ యూజర్ షాడో మోడ్ లేదా RDP సెషన్‌ల నిర్వహణను అప్పగించడం. అవన్నీ ఒక సాధారణ సంభాషణ యొక్క అంశాలతో కూడా కన్సోల్‌ను ఉపయోగించడాన్ని కలిగి ఉంటాయి.

దిగువన ఉన్న సమాచారం అంతా వారి కోసం ఉద్దేశించబడింది అసాధారణమైన వక్రీకరణలను సాధారణంగా తట్టుకుంటుంది ఆశించిన ఫలితాన్ని పొందడానికి, అనవసరమైన పద్ధతులను కనిపెట్టడం.
“పిల్లిని తోకతో లాగకుండా”, నేను చివరిదానితో ప్రారంభిస్తాను: బైక్ యుటిలిటీని ఉపయోగించే సగటు వినియోగదారు కోసం పని చేస్తుంది అడ్మిలింక్, దాని రచయితకు ధన్యవాదాలు.

I. కన్సోల్ మరియు షాడో RDP.

తో ఉపయోగించడం నుండి సర్వర్ మేనేజర్ కన్సోల్ యొక్క నిర్వాహక హక్కులు -> QuickSessionCollection -> ఆసక్తి ఉన్న వినియోగదారు సెషన్‌పై క్లిక్ చేయడం ద్వారా, సందర్భ మెను నుండి షాడోని ఎంచుకోవడం ద్వారా సాఫ్ట్‌వేర్‌ను ఎలా ఉపయోగించాలో సూచించే సిబ్బంది కోసం, ఒక ఎంపిక కాదు, మరొక "చెక్క" పద్ధతి పరిగణించబడింది, అవి:

1. సెషన్ యొక్క RDP idని కనుగొనండి:

query user | findstr Administrator

లేదా:

qwinsta | findstr Administrator 

అంతేకాకుండా "| findstr నిర్వాహకుడు"మీకు సరిగ్గా తెలిసినప్పుడు మాత్రమే ఇది సౌకర్యవంతంగా ఉంటుంది అడ్మినిస్ట్రేటర్ సర్వర్‌కి లాగిన్ అయిన ప్రతి ఒక్కరినీ చూడటానికి మీకు అవసరం లేదా మొదటి భాగాన్ని మాత్రమే ఉపయోగించండి.

WinServer 2012R2లో RDP యూజర్ సెషన్‌లకు నాన్-అడ్మినిస్ట్రేటర్ యొక్క హ్యూమన్ షాడో కనెక్షన్ కోసం యుటిలిటీ

2. డొమైన్‌లో అందించిన ఈ సెషన్‌కు కనెక్ట్ చేయండి సమూహ విధానాలు "రిమోట్ డెస్క్‌టాప్ సేవల యొక్క వినియోగదారు సెషన్‌ల కోసం రిమోట్ కంట్రోల్ నియమాలను సెటప్ చేయండి" ఎంపిక కనీసం "వినియోగదారు అనుమతితో మానిటర్ సెషన్" ఎంపికతో ఎంపిక చేయబడింది (మరింత సమాచారం):

mstsc /shadow:127

జాబితా వినియోగదారు లాగిన్‌లను మాత్రమే కలిగి ఉంటుందని దయచేసి గమనించండి.

నిర్వాహక హక్కులు లేకుండా మీరు ఈ క్రింది వాటిని పొందుతారని నేను పునరావృతం చేస్తున్నాను:

WinServer 2012R2లో RDP యూజర్ సెషన్‌లకు నాన్-అడ్మినిస్ట్రేటర్ యొక్క హ్యూమన్ షాడో కనెక్షన్ కోసం యుటిలిటీ

కానీ చర్చించబడే ప్రోగ్రామ్ యొక్క ప్రాథమిక డీబగ్గింగ్ కోసం, నేను నిర్వాహక హక్కులతో కూడిన ఖాతాను ఉపయోగించాను.

II. కార్యక్రమం

కాబట్టి సమస్య ప్రకటన: వినియోగదారు యొక్క షాడో సెన్స్‌కి అతని అనుమతితో కనెక్ట్ చేయడానికి కొన్ని సాధారణ గ్రాఫికల్ ఇంటర్‌ఫేస్‌ను సృష్టించడం, వినియోగదారుకు సందేశాన్ని పంపడం. ఎంచుకున్న ప్రోగ్రామింగ్ వాతావరణం లాజరస్.

1. మేము వినియోగదారుల పూర్తి డొమైన్ జాబితాను “లాగిన్” - “పూర్తి పేరు” నిర్వాహకుడి నుండి లేదా మళ్లీ కన్సోల్ ద్వారా పొందుతాము:

wmic useraccount get Name,FullName 

దీనిని కూడా ఎవరూ నిషేధించరు:

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

ఈ ఫైల్‌ను ప్రాసెస్ చేయడంలో లాజరస్‌కు సమస్య ఉందని నేను వెంటనే చెబుతాను, ఎందుకంటే డిఫాల్ట్‌గా దాని ఎన్‌కోడింగ్ UCS-2, కాబట్టి నేను దీన్ని మాన్యువల్‌గా సాధారణ UTF-8కి మార్చవలసి వచ్చింది. ఫైల్ నిర్మాణంలో చాలా ట్యాబ్‌లు ఉన్నాయి లేదా చాలా ఖాళీలు ఉన్నాయి, వీటిని ప్రోగ్రామాటిక్‌గా ప్రాసెస్ చేయాలని నిర్ణయించారు; ముందుగానే లేదా తరువాత ఎన్‌కోడింగ్ సమస్య పరిష్కరించబడుతుంది మరియు ఫైల్ ప్రోగ్రామ్‌పరంగా నవీకరించబడుతుంది.

కాబట్టి, ప్రోగ్రామ్ యొక్క వినియోగదారులకు ప్రాప్యత చేయగల ఫోల్డర్‌ను కలిగి ఉండాలనే ఆలోచన ఉంది, ఉదాహరణకు c:test, దీనిలో 2 ఫైల్‌లు ఉంటాయి: మొదటిది లాగిన్ మరియు పూర్తి పేరుతో, రెండవది id_rdp మరియు వినియోగదారుల లాగిన్‌తో. తరువాత, మేము ఈ డేటాను సాధ్యమైనంత ఉత్తమంగా ప్రాసెస్ చేస్తాము :).

ఈ సమయంలో, సెషన్‌ల జాబితాతో అనుబంధించడానికి, మేము ఈ (లాగిన్ మరియు పూర్తి పేరు) కంటెంట్‌లను శ్రేణికి బదిలీ చేస్తాము:

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;

"చాలా కోడ్" కోసం నేను క్షమాపణలు కోరుతున్నాను, ఈ క్రింది అంశాలు మరింత సంక్షిప్తంగా ఉంటాయి.

2. మునుపటి పేరా నుండి అదే పద్ధతిని ఉపయోగించి, మేము జాబితాను స్ట్రింగ్‌గ్రిడ్ మూలకంలోకి ప్రాసెస్ చేసిన ఫలితాన్ని చదువుతాము, అయితే నేను "ముఖ్యమైన" కోడ్ ముక్కను ఇస్తాను:

2.1 మేము ఫైల్‌లో RDP సెషన్‌ల ప్రస్తుత జాబితాను స్వీకరిస్తాము:

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 ఫైల్‌ను ప్రాసెస్ చేయండి (కోడ్ యొక్క ముఖ్యమైన పంక్తులు మాత్రమే సూచించబడ్డాయి):

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. వినియోగదారు మరియు అతని సెషన్ నంబర్‌తో లైన్‌పై క్లిక్ చేయడం ద్వారా నేరుగా కనెక్షన్:

  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. రేడియోబటన్‌పై క్లిక్ చేయడం ద్వారా క్రమబద్ధీకరించడం మరియు వినియోగదారుకు లేదా వినియోగదారులందరికీ సందేశాలు వంటి మరికొన్ని అలంకరణలు చేయబడ్డాయి.

WinServer 2012R2లో RDP యూజర్ సెషన్‌లకు నాన్-అడ్మినిస్ట్రేటర్ యొక్క హ్యూమన్ షాడో కనెక్షన్ కోసం యుటిలిటీ

→ పూర్తి సోర్స్ కోడ్ చూడవచ్చు ఇక్కడ

III. AdminLinkని ఉపయోగించడం - నేను చూసినవి:

AdminLink యుటిలిటీ స్థానాన్ని సూచించే సత్వరమార్గాన్ని రూపొందిస్తుంది admilaunch.exe, మరియు లాంచ్ యుటిలిటీ యొక్క వ్యక్తిగత కాపీ AdmiRun.Exe ఇది వినియోగదారు ఫోల్డర్‌లో ఉంది, ఉదాహరణకు Vasya, రకం సి:యూజర్వాస్యా విండోస్. సాధారణంగా, ప్రతిదీ చాలా చెడ్డది కాదు: మీరు మీ స్వంత అడ్మిన్ మనస్సాక్షిని క్లియర్ చేయడానికి షార్ట్‌కట్ ఫైల్ మరియు ఇతరులకు యాక్సెస్ హక్కులతో ఆడుకోవచ్చు.

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి