У меня есть пользователь в домене, который имеет доступ к нескольким подпапкам в нескольких папках. Его права были определены довольно детально. Теперь он покидает компанию, но продолжит работать на фирму в качестве контрактного ресурса.
Мне нужно найти все папки, к которым он имел доступ, и отозвать его разрешения, а затем настроить его с другим набором прав доступа.
Существует ли какой-либо инструмент (желательно бесплатный), в котором перечислены все разрешения NTFS для данного пользователя? Я пытался с AccessEnum от Sysinternals, но список не может быть отфильтрован по имени пользователя и бесполезен для меня. Я тоже посмотрел CACLS, но насколько я могу судить, он отображает разрешения, упорядоченные по файлам, а не по пользователям.
Есть идеи?
источник
Ответы:
Похоже, что это делает хитрость (возможно, предостережение), чтобы найти все папки, к которым у пользователя «someuser» есть доступ, в этом примере на диске C, с помощью встроенной команды Windows icacls:
Параметр / t необходим для того, чтобы указывать его для повторения каталогов. / C необходим, чтобы он продолжал работать, даже если он обнаружит ошибки. / L заставляет его работать с символическими ссылками (если есть). (Последний является L, и эти флаги могут быть в верхнем или нижнем регистре.)
*.
Будет признано DOS старожилов как способ сказать «взгляд для каталогов, а не файлы». Конечно, если вы хотите найти файлы, а не папки, измените его на*.*
, и, конечно, вы можете указать его на любом диске, или запустить его из любой папки и оставить путь к диску / папке и позволить ему искать относительно этого только папка.Я искал тот же ответ, что и ОП, и нашел эту запись, но был огорчен, увидев только предложение, основанное на загружаемом инструменте. Как и другие, я предпочел использовать что-то встроенное, и я нашел это в этом инструменте icacls.
И я подтвердил, что он работает в Windows Server 2012, 2008 и Windows 7, поэтому я подозреваю, что он также будет работать в Server 2003, Windows 8 и так далее.
Результирующий список будет отображаться папками строка за строкой, например:
Найден SID: c: \ somedir \ somesubdir.
Обратите внимание, что если вы запустите его как пользователь, который сам не имеет прав доступа к некоторым просматриваемым каталогам, вы получите ошибки, чередующиеся в таких результатах, как:
c: \ System Volume Information: доступ запрещен.
И если вы ищете весь диск, это может привести к сотням таких ошибок, что затруднит поиск в них результатов.
Некоторые могут подумать, что ответом является запуск командной строки от имени администратора, но это просто вызовет появление гораздо большего количества таких ошибок, поскольку теперь вы будете проходить через ранее скрытые папки.
Теперь, если вы заинтересованы в сокрытии этих ошибок, вы не сможете использовать команду поиска для передачи только тех результатов, которые МОГУТ быть успешными (те, которые ДОЛЖНЫ обратиться к «найден SID»), потому что ошибки НЕ будут отфильтрованы по трубе к команде поиска. Вместо этого, если вы хотите удалить все ошибки, вам нужно использовать довольно неясный прием перенаправления потока ошибок (stderr) в «битовую корзину» с помощью
2>nul:
. Таким образом, приведенный выше пример станет:Просто имейте в виду, что некоторые из папок, которые генерировали такие ошибки, ошибки которых теперь скрыты, вполне могут быть папками, к которым у «someuser» есть доступ, но к которым вы не имеете доступа. Таким образом, вы можете подумать дважды, просто игнорируя эти ошибки. но если вы хотите, вот как вы можете это сделать.
Я понимаю, что эта возможность потенциально ограничивает ценность этого ответа. Если кто-то, более знакомый с вещами, хотел бы расширить или исправить мой ответ, я бы приветствовал это.
источник
Вы можете использовать PowerShell без необходимости загружать что-либо еще. Это будет работать с версией 2.0 и позже:
Это не так чисто, как то, что доступно с PowerShell v3 и выше, но это будет работать. Это выведет список каталогов, найденных в строковом формате.
Вы можете легко вывести их в виде объектов и продолжить работу с ними (экспортировать их в CSV-файл, удалять записи по мере их нахождения, обновлять заявку с информацией ... и т. Д.), Манипулируя объектом ввода объекта Write- Выходные звонки.
источник
if ($ACL.IdentityReference -like $ReferenceAccountName -and !$ACL.IsInherited){
Я нашел решение своего собственного вопроса. Это, я считаю, очень просто и чисто. Вам нужно только установить subinacl и запустить одну строку из командной строки.
Вы можете скачать subinacl здесь . Хотя он официально поддерживается только в Windows 2000, Windows XP и Windows Server 2003, он также должен работать в Windows Vista, Windows Server 2008 и Windows 7.
Затем вы запускаете следующее из командной строки:
Где X: диск, который вы сканируете, и имя пользователя - это пользователь, чьи права вы хотите перечислить. Сканирование может занять некоторое время, и вы получите результаты в TEXTFILENAME.TXT.
Если вы используете переключатель / noverbose, вы получаете компактный список разрешений доступа - в основном вы видите, к каким каталогам имеет доступ пользователь (с масками доступа и некоторыми другими вещами, которые иногда могут пригодиться).
Я использовал OpenOffice Calc для импорта списка, а затем применил пользовательский фильтр и фильтровал только те строки, которые начинаются с + FILE . Эти строки содержат каталоги, к которым пользователь имеет доступ. Таким образом, используя простые инструменты, вы получаете только соответствующую информацию.
Поскольку наследование часто включается в родительских каталогах, фактическое количество каталогов, которые вам, возможно, потребуется посетить для настройки разрешений, обычно значительно ниже, чем сам список.
источник