Предыдущий ответ, похоже, не касался вопросов напрямую, поэтому я подумал, что добавлю к нему.
- Мой план состоит в том, чтобы служба работала как учетная запись "Local Service" по умолчанию. Я собираюсь явно установить привилегии "Полный доступ" для учетной записи "Локальная служба" в папке, которую я читаю / записываю в и из. Я считаю, что вышесказанное - хороший план.
Лично я не вижу большой проблемы с этим планом. С BUILTINs, выбор между:
- Запуск от имени LOCALSYSTEM - поэтому, если этот сервис скомпрометирован, злоумышленник владеет всем и сразу.
- Запуск от имени LOCALSERVICE - поэтому, если эта служба или любая из множества других служб, работающих под этой учетной записью, скомпрометированы, злоумышленник получает доступ к одному дополнительному каталогу.*
Возможно, добавление нескольких дополнительных ACL для возможности использования второго варианта является предпочтительным. Да, самым безопасным вариантом для службы с низким уровнем привилегий, но с высокой степенью защиты, будет запуск под настраиваемой учетной записью с низким уровнем привилегий. Но если вы не хотите создавать новую учетную запись / управлять паролями для каждой развертываемой службы, использование LocalService для незначительных, не чувствительных задач не такая уж страшная вещь. Вам просто нужно принять ответственное решение на основе этих соображений, таких как, что находится в этом каталоге или этой базе данных, влияние, если они нарушены и т.д.
Хотя, опять же, по принципу наименьших привилегий, вы должны установить Full Control
случае, если Modify
действительно недостаточно.
2.У меня вопрос: для папки, в которую я читаю и пишу, нужно ли мне настраивать роль "Сетевая служба" с полным доступом? Мне интересно, так как мой сервис использует подключение базы данных к другому серверу, если мне понадобится настройка учетной записи "Сетевой сервис".
Если для вашей базы данных требуется вход в систему Windows Integrated/SSPI, то да, вам нужно везде использовать NetworkService (или учетную запись службы домена), то есть RunAs и разрешения для каталога. Предполагая, что вы также предоставили доступ к этой базе данных своему имени компьютера или учетной записи домена.
Я сомневаюсь, что вы делаете это, поэтому, если он использует обычную аутентификацию по имени пользователя /pwd, вы сможете делать все с помощью LocalService. Вам нужно предоставить только одну учетную запись для этого каталога, независимо от того, что вы используете в своих RunAs, а не оба.
3.Я могу неправильно понять, что делает учетная запись "Сетевой сервис".
LocalService/NetworkService - это практически идентичные учетные записи на локальном компьютере. Разница в основном в том, что они могут делать в сети. NS может получить доступ к некоторым сетевым ресурсам, потому что он отображается в сети как реальная (компьютерная) учетная запись. Но LS будет отображаться как ANONYMOUS, поэтому ему будет отказано в основном всему, что есть в сети.
Кстати, для этого вы должны использовать запланированное задание, а не сервис.
* Начиная с Vista, из-за изоляции сервисов один скомпрометированный процесс LocalService не может легко атаковать другой.Каждый процесс / экземпляр службы LocalService / NetworkService получает свой собственный уникальный идентификатор безопасности сеанса входа в систему (уникальный владелец), в отличие от Windows 2003. Но я не уверен, что это идеально и полностью устраняет уязвимость DACL для файлов и ресурсов. В этом контексте упоминаются SID с ограниченным доступом и токены с ограничением записи .