Поделиться через


Вспомогательные маркеры для заданий передачи BITS

В Windows Vista служба фоновой интеллектуальной передачи (BITS) позволяет приложению связать один маркер безопасности с заданием передачи BITS. Затем задание передачи BITS использует этот маркер для проверки подлинности и для доступа к локальным и удаленным ресурсам.

В Windows 7 служба BITS связывает дополнительный маркер с заданием передачи BITS. Задание передачи BITS можно настроить с помощью дополнительного маркера безопасности, который является маркером олицетворения, созданным приложением, вызывающим COM-API BITS. Эта модель вспомогательного маркера позволяет приложениям одновременно использовать два разных маркера безопасности для доступа к локальным файлам, сертификатам на стороне клиента, удаленным файлам и прокси-серверу. Например, создается задание передачи BITS, которое записывает скачанные данные в привилегированный локальный каталог, а затем представляет удостоверение домена с низким уровнем прав на HTTP-сервер и прокси-сервер.

Приложение, как правило, служба Windows, задает вспомогательный маркер с помощью нового интерфейса IBitsTokenOptions. Этот интерфейс реализуется объектом задания BITS. Приложение вызывает IBackgroundCopyJob::QueryInterface для получения указателя интерфейса. Приложение олицетворяет вспомогательное удостоверение и вызывает IBitsTokenOptions::SetHelperToken передать маркер в службу BITS. Затем приложение указывает ресурсы, к которым применяется маркер, передав набор битовых флагов с помощью IBitsTokenOptions::SetHelperTokenFlags. Приложение очищает все флаги (с помощью SetHelperTokenFlags еще раз) для восстановления поведения. Служба BITS хранит битовые флаги и маркер в задании передачи BITS.

Когда владелец заданий передачи BITS отключается, служба BITS удаляет все вспомогательные маркеры, связанные с заданием передачи. Если передача не завершена, служба BITS помещает задание в состояние ошибки с кодом ошибки BG_E_TOKEN_REQUIRED и удаляет вспомогательный маркер. Клиентское приложение может обновить маркер, вызвав IBitsTokenOptions::SetHelperToken, а затем возобновить задание передачи BITS. Кроме того, клиентское приложение может очистить вспомогательные флаги маркеров с помощью IBitsTokenOptions::SetHelperTokenFlags, а затем возобновить задание передачи без вспомогательного маркера.

Аналогичным образом, когда владелец сеанса служб терминалов отключается, служба BITS должна отменить все вспомогательные маркеры из этого сеанса и поместить затронутые задания передачи в состояние ошибки с кодом ошибки BG_E_TOKEN_REQUIRED.

Для вспомогательной модели маркеров требуется изменить политику управления доступом BITS. Предыдущие версии BITS реализовали проверки доступа для каждого вызова метода. Начиная с Windows 7 проверка доступа должна выполняться внутри вызова IBackgroundCopyJob::QueryInterface; В противном случае вспомогательный маркер может не иметь доступа к заданию передачи.

Заметка

Старые реализации эффективно требуют, чтобы пользователи BITS имели права администратора, чтобы задать вспомогательные маркеры. Начиная с Windows 10 версии 1607 пользователи BITS неадминистратора могут использовать IBitsTokenOptions::SetHelperToken, чтобы задать вспомогательные маркеры неадминистратора в заданиях BITS. Это изменение позволяет пользователям BITS неадминистратора (например, службам фонового загрузчика, запущенным в учетной записи NetworkService) задавать вспомогательные маркеры.

В частности, реализация была изменена, чтобы разрешить пользователям без прав администратора задавать вспомогательные маркеры, если выполняются следующие условия:

  • во время вызова IBackgroundCopyJob::QueryInterface идентификатор безопасности маркера потока вызывающего объекта совпадает с идентификатором безопасности учетной записи пользователя владельца задания и
  • при вызове IBitsTokenOptions::SetHelperToken вспомогательный маркер не включает идентификатор безопасности администратора (DOMAIN_ALIAS_RID_ADMINS) .

 

IBitsTokenOptions