Назад | Перейти на главную страницу

Убедитесь, что у данного пользователя есть права

Учитывая пару пользователя и привилегия Мне нужно определить, есть ли у пользователя права на сервере. В моей настройке верно следующее:

Пример сценария для последней точки:

Теперь, если у меня есть на входе DomainA \ User1 и SeRemoteInteractiveLogonRight, мне нужно прийти к ответу Да или Нет. Итак, я открываю локальную политику на машине, отмечаю, какие группы перечислены справа, меня тоже интересует, затем иду к менеджерам серверов и смотрю, что у членов группы, а затем мне нужно видеть, какие члены любых групп в этих группах и так далее.

Я интуитивно чувствую, что это может быть проще. Я был очень взволнован, когда обнаружил Утилита AccessChk Это длилось целых три минуты, и я обнаружил, что в нем перечислены только прямые отношения, поэтому пользователь в группе не будет отображаться.

Теперь я предполагаю, что можно было бы каким-то образом объединить результаты AccessChk, чтобы я мог проверить, принадлежит ли пользователь какой-либо из групп, возвращаемых AccessChk, но учитывая, что это не один домен, а несколько из них, я не знаю, как к этому подойти. Также вывод AccessChk, похоже, не различает группу и пользователя.

РЕДАКТИРОВАТЬ: Чтобы не попасть в ловушку проблемы XY, мне действительно нужно убедиться, что на группе серверов никакие конкретные учетные записи пользователей, которые используются в качестве идентификаторов пула приложений IIS, не имеют привилегий SeInteractiveLogonRight или SeRemoteInteractiveLogonRight. У меня нет проблем с частью IIS, но последний шаг проверки учетной записи на соответствие привилегии - это то, что я изо всех сил пытаюсь найти простой способ проверить. Я также хотел бы автоматизировать проверку, потому что это нужно будет делать регулярно.

В токенах доступа нет информации о правах, только о привилегиях.

Что вам нужно сделать, так это:

  • Найдите рабочий процесс IIS, соответствующий вашему пулу приложений. Поскольку вы знаете идентификатор пула приложений, это должно быть легко, если перечислить все процессы с именем рабочего процесса и отфильтровать тот, который имеет идентификатор. Если их больше одного, вы можете использовать любой.
  • Используйте GetTokenInformation с информационным классом TokenGroup, а не TokenPrivilege в токене процесса. Результат даст вам все транзитивным группам принадлежит идентичность. То есть даже косвенные.
  • Теперь вы можете просмотреть эти группы и вызвать LsaEnumerateAccountRights на каждом и сопоставьте информацию. Это даст вам то, что вы хотите.

Вышеупомянутое зависит от существования процесса (и токена), соответствующего идентификатору учетной записи. В вашем сценарии это не должно быть проблемой. В случаях, когда это проблема, вы можете попробовать использовать поиск в Active Directory для Вычисляемый атрибут Token-Groups. Эта статья перечисляет несколько подходов, как это осуществить.