2

Справочная информация. Я пишу службу и хочу предоставить ей как можно меньше привилегий.Учетная запись виртуальной службы без доступа к сети, например NT AUTHORITY LocalService

Виртуальные учетные записи (иногда «учетные записи виртуальных служб») - это sparsely documented, которые являются новыми для Windows 7/2008R2, которые автоматически управляют учетными записями для служб, которым требуются минимальные права, но доступ к сети с идентификатором компьютера в среде домена.

Моей службе не нужен доступ к сети, поэтому я использую LocalService, но мне не нравится, что если я предоставляю доступ к файлу/etc, я предоставляю доступ ко всем службам, работающим как эта учетная запись.

Есть ли льготная учетная запись, которую я могу использовать?

ответ

2

Вам не нужно менять учетную запись, на которую работает служба; LocalService в порядке.

Вместо этого настройте службу на наличие non-zero SID type, то есть укажите либо SERVICE_SID_TYPE_UNRESTRICTED, либо SERVICE_SID_TYPE_RESTRICTED. Вы можете сделать это, используя функцию ChangeServiceConfig2() и опцию SERVICE_CONFIG_SERVICE_SID_INFO.

Затем вы можете предоставить доступ к файлам и другим защищенным ресурсам, используя SID службы, имя которого NT SERVICE\myservice, а не LocalService. Это предоставит доступ только к вашему сервису. (Ну и любые другие сервисы, которые используют один и тот же процесс, но большинство сторонних служб работают в собственном процессе.)

Для наименьших привилегий используйте SERVICE_SID_TYPE_RESTRICTED. Это означает, что служба может обращаться только к защищенным объектам, которые явно предоставляют доступ к Everyone, SID службы, SID сеанса входа или WRITE_RESTRICTED. Вы также должны использовать опцию SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO для уменьшения привилегий, предоставляемых службе; многие службы вообще не нуждаются в каких-либо привилегиях. (В этом случае вы можете указать, что вам нужно указать SE_CHANGE_NOTIFY_NAME, а не пустой список, хотя я мог бы забыть.)

+0

Можно ли достичь этого с помощью утилиты 'sc'? На данный момент я использую простой/понятный 3-строчный пакетный скрипт для установки, и я бы предпочел не быть P/Invoking по всему месту. – Fowl

+2

Несомненно. 'sc qsidtype' устанавливает тип SID, а' sc qprivs' устанавливает необходимые привилегии. –