Lista permisiunilor de acces la dosare ale utilizatorului (Administrarea sistemului, Windows, Permisiuni, Ntfs, Utilizatori)

imagodei a intrebat.

Am un utilizator într-un domeniu care are acces la mai multe subfoldere din mai multe dosare. Drepturile sale au fost definite destul de granular. Acum el părăsește compania, dar va continua să lucreze pentru o firmă ca resursă contractată.

Trebuie să găsesc toate folderele la care avea acces și să îi revoc permisiunile, apoi să îl configurez cu un set diferit de permisiuni de acces.

Există vreun instrument (de preferință, un freeware) care să listeze toate permisiunile NTFS pentru un anumit utilizator? Am încercat cu AccessEnum de la Sysinternals, dar lista nu poate fi filtrată după numele de utilizator și este inutilă pentru mine. M-am uitat și la CACLS, dar din câte îmi dau seama afișează permisiunile ordonate după fișier, nu după utilizator.

Aveți vreo idee?

Comentarii

  • Acesta este motivul pentru care ar trebui să acordați întotdeauna calitatea de membru pe baza grupurilor, chiar dacă există un singur utilizator în grup. Ați fi putut pur și simplu să-l eliminați din grup. Între timp, în timp ce așteptați un răspuns, puteți pur și simplu să dezactivați contul său în AD. –  > Por MDMarra.
  • Ați încercat acest instrument: AccessChk v5.0? Pentru a se asigura că au creat un mediu securizat, administratorii Windows au adesea nevoie să știe ce fel de acces au anumiți utilizatori sau grupuri la resurse, inclusiv fișiere, directoare, chei de registru, obiecte globale și servicii Windows. AccessChk răspunde rapid la aceste întrebări cu ajutorul unei interfețe intuitive și a rezultatelor. Se găsește aici: technet.microsoft.com/en-us/sysinternals/bb664922.aspx –  > Por Luca99.
  • @MarkM: Atât de adevărat… Doar că atunci când utilizatorul are nevoie de un acces la un singur dosar, îl adaugi. Apoi, în câteva luni, are nevoie de un alt acces pe un partaj complet diferit. Și în câteva luni din nou pe 2 sau 3 dosare. Cum creezi un grup cu un nume semnificativ pentru un astfel de utilizator? „Nume_utilizator_grup_acces_granular”? Probabil că așa ar fi de ajuns. @Luke99: Un instrument interesant de la Sysinternals. Cum am putut să-l ratez. Oricum, văd că afișează toate folderele la care utilizatorul are acces direct sau indirect. Există o modalitate de a afișa doar dosarele în care utilizatorul este listat în mod explicit în ACL (excluzând accesul prin intermediul grupurilor)? –  > Por imagodei.
3 răspunsuri

Se pare că acest lucru pare să funcționeze (poate cu un avertisment), pentru a găsi toate folderele la care utilizatorul „someuser” are acces, în acest exemplu pe unitatea C, folosind comanda icacls încorporată în Windows:

icacls c:*. /findsid someuser /t /c /l

Este nevoie de /t pentru a-i spune să parcurgă directoarele. Este nevoie de /c pentru a-i spune să continue chiar dacă întâmpină erori. /l o face să lucreze cu legături simbolice (dacă există). (Ultimul este un L, iar aceste stegulețe pot fi scrise cu majuscule sau minuscule).

Adresa *. va fi recunoscută de către cei care lucrează în DOS ca fiind o modalitate de a spune „caută directoare, nu fișiere”. Bineînțeles, dacă doriți să căutați fișiere și nu dosare, schimbați-l în *.*, și, bineînțeles, îl puteți îndrepta către orice unitate sau îl puteți rula din orice dosar, fără a menționa calea de acces la unitate/folder și lăsându-l să caute numai în raport cu acel dosar.

Am căutat același răspuns ca și OP, și am găsit această intrare, dar am fost dezamăgit să văd doar o ofertă bazată pe un instrument descărcabil. Ca și alții, am preferat să folosesc ceva încorporat, și am găsit, în acest instrument icacls.

Și am confirmat că funcționează pe Windows Server 2012, 2008 și Windows 7, așa că bănuiesc că va funcționa la fel de bine și în Server 2003, Windows 8 și așa mai departe.

Lista rezultată va fi dosare indicate linie după linie, cum ar fi:

SID găsit: c:somedirsomesubdir.

Rețineți că, dacă executați această operațiune ca utilizator care nu are el însuși permisiuni pentru unele directoare parcurse, veți obține erori intercalate în rezultate, cum ar fi::

c:System Volume Information: Accesul este refuzat.

Iar dacă este posibil să căutați o unitate întreagă, ar putea rezulta sute de astfel de erori, ceea ce face dificilă găsirea în cadrul acestora a rezultatelor.

Unii ar putea crede că soluția este să rulați linia de comandă ca administrator, dar acest lucru va determina pur și simplu apariția mult mai multor erori de acest tip, deoarece acum veți parcurge foldere care erau ascunse anterior.

Acum, dacă ați fost interesat să ascundeți aceste erori, nu veți putea utiliza o comandă find pentru a direcționa doar rezultatele care reușesc (cele care se referă la „SID found”), deoarece erorile NU vor fi filtrate de către direcționarea către comanda find. În schimb, dacă doriți să eliminați toate erorile, trebuie să folosiți un truc destul de obscur de redirecționare a fluxului de erori (stderr) către „bit bucket”, utilizând 2>nul:. Astfel, exemplul de mai sus ar deveni:

icacls c:*. /findsid someuser /t /c /l 2>nul:

Atenție doar la faptul că unele dintre folderele care au generat astfel de erori, erori care sunt acum ascunse, pot fi foldere la care numitul „someuser” DOAR are acces, dar la care VOI nu aveți. Așa că poate doriți să vă gândiți de două ori înainte de a ignora pur și simplu aceste erori. dar dacă doriți, iată cum puteți face acest lucru.

Această posibilitate limitează potențial valoarea acestui răspuns, îmi dau seama. Dacă cineva mai familiarizat cu lucrurile ar dori să dezvolte sau să corecteze răspunsul meu, aș fi bucuros să o facă.

Comentarii

  • Se pare că ar trebui să fie evident, dar merită subliniat: Căutarea după *. NU înseamnă căutarea numai în directoare sau în toate directoarele. Numele directoarelor pot avea extensii, iar fișierele nu trebuie să aibă extensii. Dacă doriți să fiți minuțios, lăsați-l să caute în toate. –  > Por Scott E.
Jon

Puteți utiliza PowerShell fără a fi nevoie să descărcați nimic altceva. Aceasta va funcționa cu v2.0 și ulterior:

$ReferenceAccountName = 'DOMAINUsername'
[string[]]$SearchDirectories = @('X:SomeDirectory', 'F:AnotherDirectory')

foreach ($RootDir in $SearchDirectories) {
    $DirACL = Get-Acl -Path $RootDir
    foreach ($ACL in $DirACL.Access){
        if ($ACL.IdentityReference -like $ReferenceAccountName){
            Write-Output $RootDir
        }
    }
    foreach ($Directory in (Get-ChildItem -Path $RootDir -Recurse | `
                            Where-Object -FilterScript {$_.Attributes `
                            -contains 'Directory'})){
        $DirACL = Get-Acl -Path $Directory.FullName
        foreach ($ACL in $DirACL.Access){
            if ($ACL.IdentityReference -like $ReferenceAccountName){
                Write-Output $Directory.FullName
            }
        }
    }
}

Nu este la fel de curat ca ceea ce este disponibil cu PowerShell v3 și mai departe, dar va funcționa. Aceasta va scoate o listă a directoarelor găsite în format șir de caractere.

Ați putea cu ușurință să le scoateți ca obiecte și să continuați să lucrați cu ele (exportați-le într-un fișier CSV, eliminați intrările pe măsură ce le găsiți, actualizați un bilet cu informațiile…etc.) prin manipularea obiectului de intrare al apelurilor Write-Output.

Comentarii

  • Ar fi posibil, de asemenea, să se „excludă” Permisiuni moștenite? (de exemplu, căutarea fiecărui dosar în care „DOMAINUsername” a fost adăugat în mod explicit? –  > Por dognose.
  • Da, este posibil: if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){ –  > Por dognose.
imagodei

Am găsit o soluție la propria mea întrebare. Este, cred eu, foarte simplă și curată. Trebuie doar să instalați subinacl și să rulați o singură linie din promptul de comandă.

Puteți descărca subinacl de aici. Deși oficial este suportat doar pe Windows 2000, Windows XP și Windows Server 2003, ar trebui să funcționeze și pe Windows Vista, Windows Server 2008 și Windows 7.

Apoi, executați următoarele din promptul de comandă:

subinacl /testmode /noverbose /outputlog=c:TEXTFILENAME.TXT /subdirectories=directoriesonly X:*.* /findsid=DOMAINusername

Unde X: este unitatea pe care o scanați și nume utilizator este utilizatorul ale cărui permisiuni doriți să le listați. Scanarea poate dura ceva timp și veți obține rezultatele în TEXTFILENAME.TXT.

Dacă utilizați comutatorul /noverbose veți obține o listă compactă a permisiunilor de acces – în principiu, vedeți la ce directoare are acces utilizatorul (cu măști de acces și alte chestii care pot fi utile uneori).

Am folosit OpenOffice Calc pentru a importa lista și apoi am aplicat un Custom Filter (Filtru personalizat) și am filtrat doar pentru acele linii care încep cu +FILE. Aceste linii conțin directoarele la care utilizatorul are acces. Iată cum, folosind instrumente simple, se obțin doar informații relevante.

Deoarece moștenirea este adesea activată pe directoarele părinte, numărul real de directoare pe care ar putea fi necesar să le vizitați pentru a ajusta permisiunile este de obicei semnificativ mai mic decât lista în sine.