Я создал службу окна, которая отслеживает файлы в определенном каталоге в нашей ОС Windows. Когда файл обнаружен, служба выполняет некоторые операции ввода-вывода, считывает файлы, создает подкаталоги и т. Д. Эта служба также использует подключение к базе данных для подключения к другому серверу. Мой план состоит в том, чтобы служба работала как учетная запись «Local Service» по умолчанию. Так как мне нужно разрешить права на запись / чтение, которые, по-видимому, учетная запись «Local Service» по умолчанию не делает, я собираюсь явно установить привилегии «Full Control» для учетной записи «Local Service» в папке, которую я чтение / запись в и из.
Я считаю, что выше это хорошо. У меня вопрос: для папки, в которую я читаю и пишу, нужно ли мне настраивать роль «Сетевая служба» с полным доступом? Мне интересно, так как мой сервис использует подключение базы данных к другому серверу, если мне понадобится настройка учетной записи «Сетевой сервис».
Возможно, я неправильно понимаю, что делает учетная запись «Сетевой сервис».
источник
LocalService
взломанная, будет иметь доступ ко всему, что вы открылиLocalService
, в то время как обычно она не имеет доступа ни к чему. Это стандартная процедура компьютерной безопасности с 70-х годов .LocalSystem
него больше прав и привилегий, чем у обычных учетных записей администратора.Предыдущий ответ, похоже, не касался вопросов напрямую, поэтому я решил добавить к нему.
Лично я не вижу большой проблемы с этим планом. С BUILTINs, выбор между:
Возможно, добавление нескольких дополнительных ACL для возможности использования второго варианта является предпочтительным. Да, самым безопасным вариантом для службы с низким уровнем привилегий, но с высокой степенью защиты, будет запуск под настраиваемой учетной записью с низким уровнем привилегий. Но если вы не хотите создавать новую учетную запись / управлять паролями для каждой развертываемой службы, использование LocalService для незначительных, не чувствительных задач не такая уж ужасная вещь. Вам просто нужно принять ответственное решение на основе этих соображений, таких как, что находится в этом каталоге или этой базе данных, влияние, если они нарушены и т.д.
Хотя опять же, по принципу наименьших привилегий, вы должны устанавливать только,
Full Control
если этогоModify
действительно недостаточно.Если для вашей базы данных требуется вход в систему Windows Integrated / SSPI, то да, вам нужно везде использовать NetworkService (или учетную запись службы домена), то есть RunAs и права доступа к каталогу. Предполагая, что вы также предоставили доступ к этой базе данных своему имени компьютера $ или учетной записи домена. Я сомневаюсь, что вы делаете это, поэтому, если он использует обычную аутентификацию по имени пользователя / pwd, вы должны иметь возможность делать все с помощью LocalService. Вам нужно предоставить только одну учетную запись для этого каталога, независимо от того, что вы используете в своих RunAs, а не оба.
LocalService / NetworkService - это почти идентичные учетные записи на локальном компьютере. Разница в основном в том, что они могут делать в сети. NS может получить доступ к некоторым сетевым ресурсам, потому что он отображается в сети как реальная (компьютерная) учетная запись. Но LS будет отображаться как ANONYMOUS, поэтому ему будет отказано в основном всему, что есть в сети.
Кстати, для этого вы должны использовать запланированное задание, а не сервис.
* Начиная с Vista, из-за изоляции сервисов один скомпрометированный процесс LocalService не может легко атаковать другой. Каждый процесс / экземпляр службы LocalService / NetworkService получает свой собственный уникальный SID сеанса входа в систему (уникальный владелец), в отличие от Windows 2003. Но я не уверен, что это идеально и полностью устраняет уязвимость DACL для файлов и ресурсов. В этом контексте упоминаются SID с ограниченным доступом и токены с ограничением записи .
источник
Другие ответы подтверждают, что вы говорите об использовании Local Service. Таким образом, локальная служба является рекомендуемой учетной записью для использования с вашей службой, если вам не нужны дополнительные функции Active Directory SSPI сетевой службы.
Для ограничения доступа на чтение / запись к определенной папке вы можете сделать лучше, чем просто предоставить доступ к общей учетной записи локальной службы. Проблема, как указывали другие, заключается в том, что это также предоставит доступ на чтение / запись ко всем другим службам, работающим как локальная служба, и если все службы сделают это, то постепенно локальная служба получит доступ ко все более важным ресурсам.
Решение состоит в том, чтобы вместо этого ACL вашу папку, используя ваш конкретный SID службы. С вашим сервисным SID связан только ваш собственный сервисный процесс, поэтому это еще больше блокирует ваш ресурс. Вы можете просмотреть SID службы, используя
sc showsid <service name>
. SID службы генерируется из имени службы, поэтому он будет одинаковым на всех машинах.Чтобы включить использование SID службы вашей службы, использовать
ChangeServiceConfig2
сSERVICE_SID_INFO
структурой для набораSERVICE_SID_TYPE_UNRESTRICTED
. Вы также можете настроитьSERVICE_SID_TYPE_RESTRICTED
получение еще более ограниченного SID, который разрешает доступ на запись только к ресурсам, явно разрешенным с вашим SID службы.Эта ссылка содержит высокоуровневые описания идентификаторов SID служб и идентификаторов SID с ограниченным доступом: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)
источник