«Доступ запрещен» при попытке запустить службу даже при работе с правами администратора/повышенными правами

«Доступ запрещен» при попытке запустить службу даже при работе с правами администратора/повышенными правами

Я использую sc start "MyService"командную строку с повышенными правами администратора, но получаю следующую ошибку:

[SC] StartService НЕУДАЧНО 5:

В доступе отказано.

Для полноты картины, ошибка при попытке запустить его из графического интерфейса ( services.msc) выглядит так:

Ошибка 5: Доступ запрещен

Так как это служба .NET, она была установлена ​​с помощью InstallUtil.exe(запустить от имени администратора). Служба настроена на работу как NETWORK SERVICE, но я также пробовал ее с LOCAL SERVICE.

решение1

Это было связано с тем, что по умолчанию ни NETWORK SERVICE, ни LOCAL SERVICE не имеют разрешений на чтение из каталога, где находится исполняемый файл моей службы. Мне нужно было предоставить им привилегии на чтение в папке (как минимум).

решение2

Я столкнулся именно с этой проблемой, но был обескуражен, не найдя в ответах четких инструкций по ее решению, поэтому вот мои:

Быстро и грязно

Самое простое решение — просто убедиться, что приложение, для которого вы устанавливаете службу (в моем конкретном примере Tor), расположено где-то, и NT AUTHORITY\LOCAL SERVICEему разрешено чтение (например C:\Tor\), прежде чем запускать команды.

Лично я презираю подобные решения.

Более чистый, более образовательный и более утомительный

Я сам установил Tor $env:UserProfile\AppData\Local\Programs, поэтому вот что я сделал в Windows 10, используя терминал PowerShell с повышенными привилегиями:

PS C:\Users\User\AppData\Local\Programs>$fsar = New-Object 
System.Security.AccessControl.FileSystemAccessRule(`
>> "NT AUTHORITY\LOCAL SERVICE",`
>> "ReadAndExecute",`
>> "ContainerInherit,ObjectInherit",`
>> "InheritOnly",`
>> "Allow")

Это создаетFileSystemAccessRule(на что я ссылаюсь $fsarв коде), что позволяет IdentityReference "NT AUTHORITY\LOCAL SERVICE" читать и выполнять (и синхронизировать, побочный эффект этого) любой файл/папку, к которой применено правило, и ее дочерние элементы через флаги наследования "ContainerInherit,ObjectInherit" в сочетании с PropagationFlag "InheritOnly". "Allow" устанавливает правило на разрешение (любой примененный запрет переопределит его, но это вряд ли произойдет).

Теперь мы хотим применить это правило доступа к папке, в которую мы установили Tor. На первом этапе получаем существующий ACL (чтобы не испортить то, что там было изначально), используяПолучить-Acl. Второй шаг просто добавляет это правило доступа к объекту, который мы сохранили в переменной. Третий шаг передает список контроля доступа, который мы изменили, в командуУстановить-Aclкоторый мы также указываем вместе с путем к нашей папке, содержащей Tor.

PS C:\Users\User\AppData\Local\Programs>$torFolderAcl = Get-Acl .\MyTorFolder
PS C:\Users\User\AppData\Local\Programs>$torFolderAcl.AddAccessRule($fsar)
PS C:\Users\User\AppData\Local\Programs>$torFolderAcl | Set-Acl .\MyTorFolder

Вы должны иметь возможность перейти к месту в структуре папок, где tor.exeнаходится ваш файл, и выполнить команду после этого.

Tor-только-вещи

Для тех, кто не в курсе, есть встроенная функция быстрого доступа, которая позволяет сделать это без использования scнепосредственного или какого-либо другого сервисного приложения.

Если вы хотите сохранить torrcфайл в определенном месте и разрешить службе использовать его, вы можете использовать это для установки службы:

PS C:\Users\User\AppData\Local\Programs\MyTorFolder>.\tor.exe --service install -options -f $pathToTorrc

Если вы, как и я, ожидали, что все вышеперечисленное будет работать без проблем, прежде чем осознали, что существуют утомительные проблемы с контролем доступа, то вам, вероятно, просто нужно запустить это:

PS C:\Users\User\AppData\Local\Programs\MyTorFolder>.\tor.exe --service start

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

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