Разрешение доступа на чтение/запись к папке только определенной службе

Разрешение доступа на чтение/запись к папке только определенной службе

Есть ли способ запретить чтение и/или запись в определенную папку в Windows и предоставить доступ к ней только определенной службе/процессу?

Похоже, что разрешения привязаны к пользователю, а не к службе, но мне бы хотелось узнать, есть ли способ реализовать такую ​​функциональность в любом случае.

решение1

Да, в Windows 7 это можно сделать, хотя для этого может потребоваться перенастройка службы, что влечет за собой (вероятно, довольно небольшой) риск возникновения проблем с совместимостью.

Идентификатор безопасности, связанный со службой, может быть обозначен как

NT SERVICE\SERVICENAME

где servicenameзаменяется на фактическое имя службы (отображается как «Имя службы» в административном инструменте служб и отличается от отображаемого имени, отображаемого в основном списке служб). Если вы используете графический интерфейс для изменения настроек безопасности, а машина присоединена к домену, вам нужно будет изменить область поиска на локальный компьютер. Также обратите внимание, что это работает только для служб, которые в данный момент установлены.

Вы можете определить SID, связанный с определенным именем службы, независимо от того, установлена ​​ли такая служба, с помощью команды sc showsid:

C:\working>sc showsid wjkjk

NAME: wjkjk
SERVICE SID: S-1-5-80-492907775-8774055-3223757035-3566066944-1037782649

Если вы устанавливаете безопасность файла или папки с помощью icaclsкоманды, вы можете указать SID, добавив к нему префикс *, например, *S-1-5-80-492907775-8774055-3223757035-3566066944-1037782649.

Чтобы служба могла получить доступ к файлам с помощью этого идентификатора безопасности, она должна быть настроена с типом SID службы "unrestricted" или "restricted". Если она настроена с типом SID службы "none", то SID службы не будет работать. Вы можете проверить тип SID службы установленной службы с помощью команды sc qsidtype:

C:\working>sc qsidtype wuauserv
[SC] QueryServiceConfig2 SUCCESS

SERVICE_NAME: wuauserv
SERVICE_SID_TYPE:  UNRESTRICTED

Если тип службы — «none», вы можете изменить его на «unrestricted» с помощью sc sidtypeкоманды:

C:\working>sc qsidtype psexesvc
[SC] QueryServiceConfig2 SUCCESS

SERVICE_NAME: psexesvc
SERVICE_SID_TYPE:  NONE

C:\working>sc sidtype psexesvc unrestricted
[SC] ChangeServiceConfig2 SUCCESS

C:\working>sc qsidtype psexesvc
[SC] QueryServiceConfig2 SUCCESS

SERVICE_NAME: psexesvc
SERVICE_SID_TYPE:  UNRESTRICTED

Изменения не вступят в силу до перезапуска службы.

Примечание:вам следуетнетизменить тип SID службы с "none" на "restricted". Это почти наверняка приведет к сбоям в работе службы. Изменение типа с "none" на "unrestricted" гораздо менее вероятно вызовет какие-либо проблемы. Если тип SID службы уже "restricted" или "unlimited", вам не следует его менять.

решение2

Существует псевдо-«пользователь», SERVICEкоторый используется всеми службами, поэтому вы можете просто ограничить доступ, разрешив доступ только этому «пользователю».

Однако это не совсем то, что вы просили, поскольку это не одна конкретная служба, это все службы. Нет механизма по умолчанию, чтобы ограничиться одной службой, хотя этоможетвозможно, если приложить немало усилий, чтобы заставить службу использовать другой идентификатор при запуске — я бы не рекомендовал этого делать.

Связанный контент