Проверка разрешения доступа к файлам в Windows для пользователей без повышенных прав - PullRequest
1 голос
/ 24 февраля 2012

Я пишу код на C ++ для платформы Windows (XP / 7), чтобы проверить разрешение, связанное с файлом.Я хочу убедиться, что файл, который я читаю, не может быть записан учетными записями с повышенными привилегиями.Вот что я сейчас делаю:

  • Я получаю DACL, связанный с файлом, вызывающим GetNamedSecurityInfo
  • Я вызываю CreateWellKnownSid с хорошоизвестные Sids, такие как WinAuthenticatedUserSid (группа Пользователи)
  • Я звоню BuildTrusteeWithSid , чтобы построить TRUSTEE с предыдущим SID
  • Я звоню GetEffectiveRightsFromAcl с ранее созданным доверенным лицом для получения действующего acl
  • Я проверяю, что ACL не содержит установленный флаг записи.

Этот код отлично работает дляГруппа пользователей.А как насчет других групп, таких как «Все», «Гости» или других конкретных пользователей, которые могут иметь определенный доступ для записи в файл?Я хотел бы найти решение, в котором мне не нужно перечислять все возможные SID и проверять их все.Могу ли я использовать SID, например «что угодно, но не администратор»?

С уважением, Ant

1 Ответ

1 голос
/ 24 февраля 2012

Я бы выбрал немного другой подход:

  1. Получить все записи ACE через GetExplicitEntriesFromAcl для файла и всех его родителей
  2. Выберите GRANT_ACCESS и SET_ACCESS ACE
  3. Получите список доверенных лиц из выбранных ACE
  4. Для каждого из доверенных лиц выполните проверку доступа.GetEffectiveRightsFromAcl, пожалуй, самое простое решение здесь.

Вы можете подумать, что конкретно вы хотите делать с ВЛАДЕЛЕЦОМ.Он может изменить права в любое время.

...