Lista uprawnień dostępu do folderu użytkownika

14

Mam użytkownika w domenie, który ma dostęp do wielu podfolderów w wielu folderach. Jego prawa zostały określone bardzo szczegółowo. Teraz odchodzi z firmy, ale nadal będzie pracował dla firmy jako zakontraktowany zasób.

Muszę znaleźć wszystkie foldery, do których miał dostęp, i odwołać jego uprawnienia, a następnie skonfigurować go z innym zestawem uprawnień dostępu.

Czy jest jakieś narzędzie (najlepiej darmowe), które wyświetla listę wszystkich uprawnień NTFS dla danego użytkownika? Próbowałem z AccessEnum od Sysinternals, ale listy nie można filtrować według nazwy użytkownika i jest dla mnie bezużyteczna. Patrzyłem też na CACLS, ale o ile wiem, wyświetla uprawnienia uporządkowane według pliku, a nie użytkownika.

Jakieś pomysły?

imagodei
źródło
1
Dlatego zawsze należy przyznać członkostwo na podstawie grup, nawet jeśli w grupie jest tylko jeden użytkownik. Mogłeś go właśnie usunąć z grupy. W międzyczasie, czekając na odpowiedź, możesz po prostu wyłączyć jego konto w AD.
MDMarra,
Czy wypróbowałeś to narzędzie: AccessChk v5.0? W ramach zapewnienia, że ​​stworzyli bezpieczne środowisko, administratorzy systemu Windows często muszą wiedzieć, jaki rodzaj dostępu do określonych użytkowników lub grup mają zasoby, w tym pliki, katalogi, klucze rejestru, obiekty globalne i usługi Windows. AccessChk szybko odpowiada na te pytania dzięki intuicyjnemu interfejsowi i wynikom. Znalezione tutaj: technet.microsoft.com/en-us/sysinternals/bb664922.aspx
Luke99
@MarkM: Tak prawda ... Po prostu, gdy użytkownik potrzebuje dostępu do jednego folderu, dodajesz go. Potem za kilka miesięcy potrzebuje kolejnego dostępu do zupełnie innej akcji. I za kilka miesięcy ponownie w 2 lub 3 folderach. Jak stworzyć grupę o znaczącej nazwie dla takiego użytkownika? „Nazwa użytkownika_granular_access_group”? To prawdopodobnie załatwi sprawę. @ Luke99: Ciekawe narzędzie od Sysinternals. Jak mogłem to przegapić. W każdym razie widzę, że wyświetla wszystkie foldery, do których użytkownik ma bezpośredni lub pośredni dostęp. Czy istnieje sposób wyświetlania tylko folderów, w których użytkownik jest wyraźnie wymieniony na liście ACL (z wyłączeniem dostępu przez grupy)?
imagodei

Odpowiedzi:

13

Wydaje się, że to załatwia sprawę (być może z zastrzeżeniem), aby znaleźć wszystkie foldery, do których użytkownik „someuser” ma dostęp, w tym przykładzie na dysku C, za pomocą wbudowanego polecenia icacls systemu Windows:

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

Opcja / t jest potrzebna, aby nakazać powtarzanie katalogów. / C jest potrzebne, aby powiedzieć mu, aby kontynuował pracę, nawet jeśli napotka błędy. / L sprawia, że ​​działa z dowiązaniami symbolicznymi (jeśli istnieją). (Ten ostatni to L, a te flagi mogą być pisane wielkimi lub małymi literami.)

*.Będą rozpoznawane przez DOS weteranów jako sposób powiedzieć „szukać katalogów, nie Files”. Oczywiście, jeśli chcesz znaleźć pliki, a nie foldery, zmień je *.*i oczywiście możesz wskazać dowolny dysk lub uruchomić go z dowolnego folderu i pozostawić ścieżkę do dysku / folderu i pozwolić na wyszukiwanie względem tego tylko folder.

Szukałem tej samej odpowiedzi co OP i znalazłem ten wpis, ale byłem zaskoczony, gdy zobaczyłem tylko ofertę opartą na narzędziu do pobrania. Podobnie jak inni, wolałem używać czegoś wbudowanego i znalazłem to w tym narzędziu icacls.

Potwierdziłem, że działa on w systemach Windows Server 2012, 2008 i Windows 7, więc podejrzewam, że zadziała również w Server 2003, Windows 8 i tak dalej.

Wynikowa lista to foldery wskazane wiersz po wierszu, takie jak:

Znaleziono SID: c: \ somedir \ somesubdir.

Pamiętaj, że jeśli uruchomisz to jako użytkownik, który sam nie ma uprawnień do przeglądania niektórych katalogów, w wynikach pojawią się błędy, takie jak:

c: \ Informacje o woluminie systemowym: Odmowa dostępu.

A jeśli przeszukujesz cały dysk, może to spowodować setki takich błędów, co utrudni znalezienie w nich wyników.

Niektórzy mogą myśleć, że odpowiedzią jest uruchomienie wiersza poleceń jako administrator, ale to po prostu spowoduje, że pojawi się o wiele więcej takich błędów, ponieważ będziesz teraz przeglądał foldery, które wcześniej były ukryte.

Teraz, jeśli chciałbyś ukryć te błędy, nie będziesz w stanie użyć polecenia find do potokowania tylko tych wyników, które się powiedzie (te, które odnoszą się do „SID znaleziono”), ponieważ błędy NIE zostaną odfiltrowane za pomocą potoku do polecenia find. Zamiast tego, jeśli chcesz usunąć wszystkie błędy, musisz użyć dość niejasnej sztuczki przekierowania strumienia błędów (stderr) do „segmentu bitów” za pomocą 2>nul:. Tak więc powyższy przykład wyglądałby następująco:

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

Uważaj tylko, że niektóre foldery, które generowały takie błędy, których błędy są teraz ukryte, mogą równie dobrze być folderami, do których ma dostęp tzw. „Someuser”, ale NIE TY. Możesz więc zastanowić się dwa razy, po prostu ignorując te błędy. ale jeśli chcesz, możesz to zrobić.

Zdaję sobie sprawę, że ta możliwość potencjalnie ogranicza wartość tej odpowiedzi. Jeśli ktoś bardziej zaznajomiony z rzeczami chciałby rozwinąć lub poprawić moją odpowiedź, z zadowoleniem ją przyjmę.

Charlie Arehart
źródło
Wydaje się, że powinno to być oczywiste, ale należy podkreślić: Wyszukiwanie *. NIE równa się tylko przeszukiwaniu katalogów lub wszystkich katalogów. Nazwy katalogów mogą mieć rozszerzenia, a pliki nie muszą mieć rozszerzeń. Jeśli chcesz być dokładny, pozwól mu przeszukać wszystko.
Scott E
6

Możesz używać PowerShell bez konieczności pobierania czegokolwiek innego. Będzie to działać z wersją 2.0 i nowszą:

$ReferenceAccountName = 'DOMAIN\Username'
[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
            }
        }
    }
}

To nie jest tak czyste, jak to, co jest dostępne z PowerShell v3 i więcej, ale będzie działać. Spowoduje to wyświetlenie listy katalogów znalezionych w formacie łańcuchowym.

Możesz z łatwością wyprowadzać je jako obiekty i kontynuować pracę z nimi (wyeksportować je do pliku CSV, usunąć wpisy, gdy je znajdziesz, zaktualizować bilet z informacjami ... itd.), Manipulując obiektem wejściowym Write- Połączenia wyjściowe.

Jon
źródło
Czy można również „wykluczyć” odziedziczone uprawnienia? (tzn. przeszukuje każdy folder, w którym „DOMENA \ Nazwa użytkownika” została dodana w sposób jawny?
dognose 27.02.16
1
Tak, możesz:if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
wydać
3

Znalazłem rozwiązanie mojego własnego pytania. Uważam, że jest bardzo prosty i czysty. Musisz tylko zainstalować subinacl i uruchomić jeden wiersz z wiersza polecenia.

Możesz pobrać subinacl tutaj . Chociaż jest oficjalnie obsługiwany tylko w systemach Windows 2000, Windows XP i Windows Server 2003, powinien również działać w systemach Windows Vista, Windows Server 2008 i Windows 7.

Następnie uruchom następujące polecenie w wierszu polecenia:

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

Gdzie X: to dysk, który skanujesz, a nazwa użytkownika to użytkownik, którego uprawnienia chcesz wyświetlić. Skanowanie może zająć trochę czasu, a wyniki zostaną wyświetlone w pliku TEXTFILENAME.TXT.

Jeśli użyjesz przełącznika / noverbose , otrzymasz zwartą listę uprawnień dostępu - w zasadzie widać, do których katalogów użytkownik ma dostęp (z maskami dostępu i innymi rzeczami, które mogą się czasem przydać).

Użyłem OpenOffice Calc do zaimportowania listy, a następnie zastosowałem Filtr niestandardowy i przefiltrowałem tylko dla tych linii zaczynających się od + FILE . Te wiersze zawierają katalogi, do których użytkownik ma dostęp. W ten sposób za pomocą prostych narzędzi uzyskujesz tylko istotne informacje.

Ponieważ dziedziczenie jest często włączone w katalogach nadrzędnych, faktyczna liczba katalogów, które trzeba odwiedzić, aby dostosować uprawnienia, jest zwykle znacznie niższa niż sama lista.

imagodei
źródło