Перелічіть дозволи доступу до папки користувача


14

У мене є користувач у домені, який має доступ до декількох папок у декількох папках. Його права були визначені досить детально. Тепер він покидає компанію, але продовжить працювати для фірми як ресурс, що залучається.

Мені потрібно знайти всі папки, до яких він мав доступ, і скасувати його дозволи, а потім налаштувати його з іншим набором дозволів на доступ.

Чи є якийсь інструмент (безкоштовний, бажано), який перераховує всі дозволи NTFS для певного користувача? Я намагався з AccessEnum від Sysinternals, але список не може бути відфільтрований за іменем користувача і для мене марний. Я також переглянув CACLS, але наскільки я можу сказати, він відображає дозволи, упорядковані файлом, а не користувачем.

Будь-які ідеї?


1
Ось чому завжди слід надавати членство на основі груп, навіть якщо в групі є лише один користувач. Ви могли щойно вилучити його з групи. Тим часом, поки ви чекаєте відповіді, ви можете просто відключити його акаунт в AD.
MDMarra

Ви спробували цей інструмент: AccessChk v5.0? В рамках забезпечення їх створення безпечним середовищем адміністраторам Windows часто потрібно знати, який доступ мають конкретні користувачі або групи до ресурсів, включаючи файли, каталоги, ключі реєстру, глобальні об’єкти та служби Windows. AccessChk швидко відповідає на ці питання за допомогою інтуїтивного інтерфейсу та виводу. Знайдено тут: technet.microsoft.com/en-us/sysinternals/bb664922.aspx
Luke99

@MarkM: Так правда ... Просто коли користувачеві потрібен доступ до однієї папки, ти додаєш його. Потім через кілька місяців йому потрібен ще один доступ на зовсім іншу частку. І через кілька місяців знову на 2 або 3 папки. Як створити групу зі значущим іменем для такого користувача? "Ім'я користувача_granular_access_group"? Це, мабуть, зробить трюк. @ Luke99: Цікавий інструмент від Sysinternals. Як я міг це пропустити. У будь-якому разі, я бачу, що на ньому відображаються всі папки, до яких користувач має прямий або непрямий доступ. Чи існує спосіб відображення лише папок, у яких користувач явно вказаний в ACL (за винятком доступу через групи)?
imagodei

Відповіді:


13

Здається, це зробити фокус (можливо, застереження), щоб знайти всі папки, до яких користувач "someuser" має доступ, у цьому прикладі на диску C, використовуючи вбудовану команду Windows icacls:

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

/ T необхідний, щоб сказати, щоб він повторював каталоги. / C необхідний, щоб сказати, щоб продовжувати роботу, навіть якщо він зіткнувся з помилками. / L змушує його працювати з символічними посиланнями (якщо такі є). (Остання з них - L, і ці прапори можуть бути великими або малими.)

*.Буде визнано DOS старожилів як спосіб сказати «погляд для каталогів, а не файл». Звичайно, якщо ви хочете знайти файли, а не папки, змініть їх на *.*, і, звичайно, ви можете вказати його на будь-який диск, або запустити його з будь-якої папки і залишити шлях диска / папки і дозволити йому шукати відносно цього лише папка.

Я шукав таку ж відповідь, що і ОП, і знайшов цей запис, але був розбитий, щоб побачити лише пропозицію, засновану на завантажуваному інструменті. Як і інші, я вважав за краще використовувати щось вбудоване, і знайшов це в цьому інструменті icacls.

І я підтвердив, що він працює в Windows Server 2012, 2008 та Windows 7, тому я підозрюю, що він буде добре працювати в Server 2003, Windows 8 тощо.

Отриманий список буде папками, зазначеними рядком за рядком, наприклад:

Знайдено SID: c: \ somedir \ somesubdir.

Зауважте, що якщо ви запускаєте це як користувач, який сам не має дозволу на проходження деяких каталогів, ви отримаєте помилки, переплетені в результатах, таких як:

c: \ Інформація про обсяг системи: доступ заборонено.

І якщо ви можете шукати весь диск, це може призвести до сотень таких помилок, що ускладнює пошук у них результатів.

Деякі можуть подумати, що відповідь полягає у запуску командного рядка в якості адміністратора, але це просто призведе до появи набагато більше таких помилок, оскільки тепер ви будете обходити папки, які раніше були приховані.

Тепер, якщо вам було цікаво приховати ці помилки, ви не зможете використовувати команду find, щоб передавати лише ті результати, які DO досягли успіху (ті, які DO посилаються на "SID знайдено"), оскільки помилки НЕ будуть відфільтровані по трубі до команди find. Натомість, якщо ви хочете видалити всі помилки, вам потрібно скористатися досить незрозумілим трюком перенаправлення потоку помилок (stderr) на "бітове відро" за допомогою 2>nul:. Отже, наведеним вище прикладом стане:

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

Будьте обережні, що деякі з папок, які генерували такі помилки, помилки яких тепер приховані, цілком можуть бути папками, до яких має ім'я "someuser", але до яких ВАС немає. Тож ви можете подумати двічі про просто ігнорування цих помилок. але якщо ти хочеш, так це можна зробити.

Я розумію, що ця можливість потенційно обмежує значення цієї відповіді. Якщо хтось із ознайомленням із речами хотів би розширити чи виправити свою відповідь, я б вітаю це.


Здається, це повинно бути очевидним, але вказує: Пошук *. НЕ дорівнює лише пошуковим каталогам або всім каталогів. Імена каталогів можуть мати розширення, а файли не повинні мати розширення. Якщо ви хочете бути ретельним, нехай він шукає все.
Скотт Е

6

Ви можете використовувати PowerShell, не завантажуючи нічого іншого. Це буде працювати з v2.0 і пізнішими версіями:

$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
            }
        }
    }
}

Це не так чисто, як те, що доступно для PowerShell v3 і далі, але воно буде працювати. Це виведе список каталогів, знайдених у рядковому форматі.

Ви можете легко виводити їх у вигляді об’єктів і продовжувати виконувати роботу з ними (експортувати їх у файл CSV, видаляти записи, коли їх знайдете, оновлювати квиток з інформацією ... тощо), маніпулюючи об'єктом введення запису- Вихідні дзвінки.


Чи можна було б також "виключити" успадковані дозволи? (тобто пошук у кожній папці, де явно додано "
ДОМАН

1
Так, ви можете:if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
прогнозувати

3

Я знайшов рішення власного питання. Це, я вважаю, дуже просто і чисто. Вам потрібно лише встановити subinacl і запустити один рядок з командного рядка.

Завантажити subinacl можна тут . Хоча він офіційно підтримується лише в Windows 2000, Windows XP та Windows Server 2003, він також повинен працювати в Windows Vista, Windows Server 2008 та Windows 7.

Далі ви запускаєте наступне з командного рядка:

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

Де X: це диск, який ви скануєте, а ім’я користувача - це той користувач, чиї дозволи ви хочете внести до списку. Сканування може зайняти деякий час, і ви отримаєте результати в TEXTFILENAME.TXT.

Якщо ви використовуєте комутатор / noverbose, ви отримуєте компактний перелік дозволів доступу - в основному ви бачите, до яких каталогів користувач має доступ (з масками доступу та деякими іншими речами, які іноді можуть бути корисні).

Я використовував OpenOffice Calc для імпорту списку, а потім застосував спеціальний фільтр і фільтрував лише ті рядки, що починаються з + FILE . Ці рядки містять каталоги, до яких користувач має доступ. Ось так, використовуючи прості інструменти, ви отримуєте лише відповідну інформацію.

Оскільки наслідування часто вмикається у батьківських каталогах, то фактична кількість каталогів, які вам можуть знадобитися відвідати, щоб відкоригувати дозволи, зазвичай значно нижча, ніж сам список.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.