3

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

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

2 ответа2

6

Да, в 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 службы "неограниченный" или "ограниченный". Если он настроен с типом SID службы "none", SID службы не будет работать. Вы можете проверить тип SID службы установленной службы с помощью команды sc qsidtype :

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

SERVICE_NAME: wuauserv
SERVICE_SID_TYPE:  UNRESTRICTED

Если тип сервиса "none", вы можете изменить его на "неограниченный", используя команду 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 службы с "нет" на "ограниченный". Это почти наверняка приведет к неисправности службы. Изменение типа с "нет" на "неограниченный" с меньшей вероятностью вызовет какие-либо проблемы. Если тип SID службы уже "ограничен" или "неограничен", его не следует менять.

1

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .