6

Я пытаюсь написать скрипт для перечисления привилегий (например, SeShutDownPrivilege т.д.) Всех учетных записей пользователей. Я бы предпочел, чтобы мой скрипт мог запускаться от имени обычного пользователя, но я мог бы запускать его как учетную запись администратора, если бы мне пришлось. Вот подходы, которые я пробовал до сих пор:

  • использование tokensz (из https://blogs.technet.microsoft.com/askds/2007/11/02/whats-in-a-token/): работает (tokensz /compute_tokensize /dump_groups) для текущего вошедшего в систему пользователя. Но при входе в систему даже как администратор домена, при попытке другого пользователя (tokensz /compute_tokensize /dump_groups /user:[another.user]) я получаю ошибку SEC_E_LOGON_DENIED

  • whoami /all работает, но только для текущего пользователя

  • ntrights.exe не может перечислить привилегии, только добавлять и удалять.

  • secedit /export /areas USER_RIGHTS /cfg out.txt: перечисляет все привилегии и идентификаторы безопасности, которые имеют эту привилегию, но этот список кажется неполным; вывод из tokensz показывает пользователя John.Smith с SeShutdownPrivilege , но вывод secedit для SeShutdownPrivilege перечисляет группы, которые John.Smith не является членом.

Я могу использовать переносимые исполняемые файлы (например, tokensz.exe , ntrights.exe) и встроенные утилиты, но не смогу устанавливать приложения или расширения

3 ответа3

3

Любой, кто ищет скрипт PowerShell, должен это сделать:

gwmi Win32_UserProfile | foreach-object {
 $sid = New-Object System.Security.Principal.SecurityIdentifier($_.SID)
 $user = $sid.Translate([System.Security.Principal.NTAccount])
 $username = $user.Value
 $username
 $chkCmd = "accesschk """ + $username + """ -a * -q"
 iex $chkCmd
 ""
}

Он получает список пользователей, имеющих профиль на локальном компьютере, определяет их имена по SID и вызывает на них accesschk - как рекомендовано Ramhound. Запись каждого пользователя начинается с имени пользователя в формате DOMAIN\user , содержит каждое право в строке и заканчивается пустой строкой. (Перевод SID любезно предоставлен этой статьей.) Вы можете записать его содержимое в файл с помощью оператора перенаправления > .

Предостережение AccessChk заключается в том, что он создает пустой список для пользователей домена, которые не имеют прав локального администратора. Таким образом, эта версия, которая выдает вышеупомянутую информацию для каждого известного пользователя в домене и на компьютере, немного неэффективна, но может стать полезной в будущей версии инструмента:

gwmi Win32_UserAccount | foreach-object {
 $username = $_.Caption
 $username
 $chkCmd = "accesschk """ + $username + """ -a * -q"
 iex $chkCmd
 ""
}

Если вам интересно, о чем secedit , он просто получает список участников (в форме SID), которым были назначены права в разделе «Назначение прав пользователя» (см. secpol.msc). Поэтому вы обычно будете видеть идентификаторы безопасности для групп, таких как «Пользователи» или «Администраторы», а не для конкретных людей.

2

Вы можете использовать AccessChk для выполнения этой задачи.

Accesschk “domain\user” -a * выведет список всех разрешений данного пользователя домена.

Вы можете вызвать эту программу в сценарии PowerShell, объединить результаты в текстовый файл, а затем отфильтровать только те разрешения, о которых вы хотите знать.

2

Этот скрипт может помочь вам. Он предлагает следующие функции, все с использованием чистого PowerShell:

  • Грант-UserRight
  • Отозвать-UserRight
  • Get-UserRightsGrantedToAccount
  • Get-AccountsWithUserRight
  • Грант-TokenPrivilege
  • Отозвать-TokenPrivilege

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .