Переконайтеся, що певний користувач має даний привілей


16

З огляду на пару користувача та привілей, мені потрібно визначити, чи має користувач привілей на сервері. У моїх налаштуваннях вірно:

  • Сервер є частиною домену, але не контролером домену
  • У інфраструктурі існує кілька доменів, які мають довірчі відносини
  • Іноді користувачі (локальні, домени чи з іншого домену) можуть належати до локальної групи, заслуговуючи на те, що вони перебувають у якійсь іншій групі (домені чи локальній), яка належить до локальної групи, на відміну від належності до групи безпосередньо.

Приклад сценарію для останньої точки:

  • User1 належить до групи TeamA в DomainA
  • DomaimA \ TeamA є членом DomainB \ SpecialAccess
  • DomainB \ SpecialAccess є членом DomainB \ DomainAdmins
  • Нарешті, DomainB \ DomainAdmins належить до локальної групи адміністраторів
  • Група місцевих адміністраторів має привілей SeRemoteInteractiveLogonRight

Тепер якщо у мене є на вході DomainA \ User1 та SeRemoteInteractiveLogonRight, мені потрібно прийти до відповіді "Так" або "Ні". Тому я відкриваю локальну політику на машині, відзначаю, які групи перераховані праворуч. Мене теж цікавить, потім перейдіть до менеджерів серверів і подивіться, що стосується членів групи, а потім мені потрібно побачити, які члени будь-яких груп у цих групах і так далі.

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

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

EDIT : В дусі не потрапляти в проблемну пастку XY, що мені дійсно потрібно зробити, це переконатися, що на групі серверів відсутні конкретні облікові записи користувачів, які використовуються як ідентифікатори пулу додатків IIS, не мають привілеїв SeInteractiveLogonRight або SeRemoteInteractiveLogonRight. Я не маю проблем з частиною IIS, але останній крок перевірки рахунку на привілей - це те, що я намагаюся знайти прямий спосіб перевірити. Я також хотів би автоматизувати перевірку, тому що це потрібно робити регулярно.


6
Це звучить як робота для ... Результатний набір політики (RSoP)! technet.microsoft.com/en-us/library/cc758010%28v=WS.10%29.aspx
Davidw

1
@zespri - Моя відповідь була сміттям, і я її видалив. Права користувачів SeInteractiveLogonRight та SeRemoteInteractiveLogonRight обробляються інакше, ніж "звичайні" привілеї, і, схоже, звітувати про них буде проблематично. Якщо я знайду рішення для вас, я опублікую ще одну відповідь, але поки що у мене нічого немає.
Еван Андерсон

1
@Davidw - RSoP проблематичний тим, що параметри локальної політики безпеки не відображатимуться у висновку. Отже, будь-які записи "Не налаштовані" просто відображатимуться як "Не налаштовані", і ви фактично не побачите, яким принципалам надано право за допомогою локальної політики безпеки. Нарешті, навіть якщо ви отримаєте список принципів групової політики, ви будете затримуватися, розширюючи членство в групі (можливо, і міждоменний), щоб повторити функціональність ОС. Це насправді виявилося набагато складнішим питанням, ніж я очікував.
Еван Андерсон

1
@EvanAnderson Рівно! Коли мене попросили оцінити, як довго це займе у мене, це здалося простою задачею. А через пару днів гуглити і пробувати різні речі ... нічого. Наразі мій план полягає в тому, щоб отримати GetTokenInformation з інформаційним класом маркера TokenPrivileges. Звичайно, спершу мені потрібно розібратися, як влаштувати токен. Цей маршрут здається найбільш перспективним на даний момент.
Андрій Савіних

@zespri - NtOpenProcessToken (), мабуть, найкращий спосіб дістатися до маркера. (Подивіться на leeholmes.com/blog/2006/07/21/… )
Еван Андерсон

Відповіді:


1

Токени доступу не мають інформації про права, лише про привілеї.

Що вам потрібно зробити, це:

  • Знайдіть робочий процес IIS, який відповідає вашому пулу додатків. Оскільки ви знаєте ідентифікацію пулу додатків, це повинно бути легко, перерахувавши всі процеси з ім'ям робочого процесу та фільтруючи той, який має посвідчення. Якщо їх більше, ви можете використовувати будь-яку.
  • Використовуйте GetTokenInformation з інформаційним класом TokenGroup, а не TokenPrivilege в маркері процесу. Результат дасть всім перехідним групам ідентичність. Це означає навіть непрямі.
  • Тепер ви можете переглядати ці групи та викликати LsaEnumerateAccountRights на кожній з них та зіставляти інформацію. Це дасть вам те, що ви хочете.

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

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