"Acceso denegado" al intentar iniciar el servicio incluso cuando se ejecuta Administrador/elevado

"Acceso denegado" al intentar iniciar el servicio incluso cuando se ejecuta Administrador/elevado

Lo estoy usando sc start "MyService"desde un "Administrador: Símbolo del sistema" elevado pero recibo el siguiente error:

[SC] Servicio de inicio FALLÓ 5:

Acceso denegado.

Para completar, el error cuando intenta ejecutarlo desde la GUI ( services.msc) es:

Error 5: acceso denegado

Como es un servicio .NET, se instaló usando InstallUtil.exe(ejecutar como administrador). El servicio está configurado para ejecutarse como SERVICIO DE RED pero también lo probé con SERVICIO LOCAL.

Respuesta1

Esto se debió al hecho de que, de forma predeterminada, ni el SERVICIO DE RED ni el SERVICIO LOCAL tienen permisos para leer desde el directorio donde reside el ejecutable de mi servicio. Necesitaba otorgarles privilegios de lectura en la carpeta (como mínimo).

Respuesta2

Me encontré con este problema exacto, pero me consternó no encontrar un conjunto claro de instrucciones en las respuestas para solucionarlo, así que aquí están las mías:

Rápido y sucio

La solución más simple es simplemente asegurarse de que la aplicación para la que está instalando un servicio (en mi ejemplo concreto, Tor) esté ubicada en algún lugar NT AUTHORITY\LOCAL SERVICEdonde se pueda leer, por ejemplo C:\Tor\, antes de ejecutar los comandos.

Personalmente desprecio soluciones como estas.

Más limpio, más educativo y más tedioso

Yo mismo puse Tor $env:UserProfile\AppData\Local\Programs, así que esto es lo que hice en Windows 10 usando una terminal PowerShell elevada:

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

Esto crea unRegla de acceso al sistema de archivos(al que me refiero $fsaren el código) que permite que IdentityReference de "NT AUTHORITY\LOCAL SERVICE" lea y ejecute (y sincronice, un efecto secundario de eso) cualquier archivo/carpeta a la que se aplica la regla y sus hijos a través de los indicadores de herencia "ContainerInherit,ObjectInherit" en combinación con PropagationFlag "InheritOnly". "Permitir" establece la regla para permitir (cualquier denegación aplicada la anulará, pero es poco probable que esto suceda).

Ahora queremos aplicar esta regla de acceso a la carpeta en la que instalamos Tor. El primer paso obtiene una ACL existente (para no estropear lo que estaba allí en primer lugar) usandoObtener-Acl. El segundo paso simplemente agrega esa regla de acceso al objeto que almacenamos en una variable. El tercer paso introduce la lista de control de acceso que modificamos en el comandoEstablecer-Aclque también proporcionamos con la ruta de nuestra carpeta que contiene 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

Debería poder navegar hasta el lugar de la estructura de carpetas donde tor.exese encuentra su archivo y ejecutar el comando después de esto.

Cosas exclusivas para Tor

Para aquellos que no lo saben, hay un acceso directo integrado que les permite hacer esto sin usar scdirectamente ni ninguna otra aplicación de servicio.

Si desea almacenar el torrcarchivo en algún lugar específico y que el servicio lo use, puede usar esto para instalar el servicio:

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

Si usted, como yo, esperaba que lo anterior funcionara sin problemas antes de darse cuenta de que había tediosos problemas de control de acceso, entonces probablemente solo quiera ejecutar esto:

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

Espero que al menos una o dos personas se beneficien de esta respuesta adicional. Si no, estoy seguro de que volveré aquí en uno o dos años y lo usaré yo mismo cuando inevitablemente olvide cómo lo hice la primera vez...

información relacionada