Corrección del error “Access is denied” al usar sc remoto en Windows Server 2022

Cuando la migración a Windows Server 2022 interrumpe la gestión remota de servicios con sc.exe, el mensaje “Access is denied.” puede desorientar incluso a administradores experimentados. A continuación encontrarás una guía exhaustiva—con explicaciones técnicas, pasos detallados y buenas prácticas—para restaurar la funcionalidad de inicio y detención remota de servicios sin exponer el servidor a riesgos innecesarios.

Índice

Contexto del error

En versiones anteriores de Windows Server (por ejemplo, 2012 R2 o la versión RTM de 2016) era habitual delegar el control de determinados servicios a grupos de dominio de soporte o a sistemas de orquestación. Bastaba con concederles en la ACL del servicio los permisos Remote Pause, Stop, Start (RPWP) mediante sc sdset.

Sin embargo, tras migrar a Windows Server 2022, muchos equipos descubren que el mismo comando—sc \\Servidor stop <Servicio>—devuelve Access is denied. a usuarios no administradores, pese a que:

  • La lista DACL del servicio es idéntica a la que funcionaba en 2016.
  • La GPO que otorgaba permisos no ha cambiado.
  • El grupo sigue pudiendo consultar el estado del servicio (sc … query). 

Por qué ya no basta la ACL del servicio

Desde Windows 10 / Server 2016 1709, Microsoft incorporó en el Service Control Manager (SCM) una función adicional de seguridad: Remote Access Check. Este mecanismo realiza una verificación previa a cualquier solicitud remota realizada a través de la tubería nombrada \\pipe\svcctl. Si quien llama no pertenece al grupo de administradores locales, la petición se descarta antes de llegar a la capa que evalúa las ACL individuales de cada servicio.

En otras palabras: la DACL sigue siendo válida, pero el SCM ni siquiera la consulta a menos que el solicitante rebase el filtro “sólo administradores” o el servicio esté incluido en una lista de exclusión.

Localización de la lista de exclusión

El registro almacena la clave en:

HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\SCM

Allí reside el valor RemoteAccessCheckExemptionList (tipo REGMULTISZ). Cada línea contiene el nombre interno de un servicio que quedará exento de la comprobación remota. Solo estos servicios aceptarán órdenes remotas de usuarios sin privilegios administrativos locales.

Comparativa de opciones

OpciónVentajasDesventajas
Agregar el servicio a RemoteAccessCheckExemptionListPermite restaurar la funcionalidad precisa sin otorgar derechos excesivos.Implica tocar el registro (o automatizar el cambio con GPO/PowerShell).
Convertir el grupo en administradores localesImplementación inmediata, sin cambios de registro.Aumenta drásticamente la superficie de ataque y puede violar políticas de mínima privilegiación.

Procedimiento paso a paso recomendado

Verificar la ACL del servicio

sc.exe sdshow &lt;Servicio&gt;

Confirma que el descriptor incluye las entradas RPWP (Remote Start/Stop/Pause). Si necesitas modificarlo:

sc.exe sdset &lt;Servicio&gt; &lt;SDDL_actualizado&gt;

Incorporar el servicio en la lista de exclusión

reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\SCM" ^
    /v RemoteAccessCheckExemptionList /t REGMULTISZ ^
    /d &lt;NombreServicioInterno&gt; /f

Para varios servicios, introduce cada nombre en una nueva línea (usa 0x0d0a como separador si lo exportas con .reg).

Reiniciar y probar

En la mayoría de los casos basta con reiniciar el servicio objetivo; si persiste el error, reinicia el servidor.

sc \\Servidor2022 stop &lt;Servicio&gt;
sc \\Servidor2022 start &lt;Servicio&gt;

Auditar el resultado

Abre el Visor de eventos → Security y filtra los ID 4670 (cambio de permisos) y 7045 (creación de servicio). La ausencia de nuevos eventos indica que la solución no ha introducido cambios inesperados.

Automatización a gran escala

Distribuir la clave con GPO

En un entorno de Active Directory, configura una Group Policy Preference de tipo Registry apuntando a la ruta anterior. Asegúrate de marcar la opción Replace para evitar entradas duplicadas o mal formadas.

Script de PowerShell

param(
    [string]$ServiceName = "NombreServicioInterno"
)
$path = "HKLM:\SYSTEM\CurrentControlSet\Control\SecurePipeServers\SCM"
$prop = "RemoteAccessCheckExemptionList"
$current = (Get-ItemProperty -Path $path -Name $prop -ErrorAction SilentlyContinue).$prop
if ($current -notmatch "^$ServiceName$") {
    $new = if ($current) { "$current`r`n$ServiceName" } else { $ServiceName }
    Set-ItemProperty -Path $path -Name $prop -Value $new -Type MultiString
    Write-Host "Servicio añadido a la lista de exclusión."
} else {
    Write-Host "El servicio ya estaba en la lista."
}

Consideraciones de seguridad

  • Principio de mínimo privilegio. Añade sólo los servicios estrictamente necesarios a la lista. 
  • Segmenta la delegación. Si un mismo grupo necesita administrar varios servicios, evalúa si realmente todos requieren control remoto.
  • Monitoriza periódicamente. Cambios de aplicación o actualizaciones de sistema podrían introducir nuevos servicios que necesiten la misma excepción, o eliminar otros ya obsoletos.
  • Documenta las modificaciones. Mantén un registro centralizado de las claves y servicios exentos para evitar configuraciones divergentes.

Preguntas frecuentes

¿Puedo deshabilitar completamente la comprobación remota?

No. Microsoft no expone una directiva global para revertir el comportamiento. La lista de exclusión es la única vía oficial para permitir el acceso remoto a servicios por parte de usuarios no administradores.

¿Es necesario abrir puertos adicionales en el firewall?

No. La característica de filtrado actúa dentro del SCM, antes de que el tráfico cruce cualquier política de firewall. La regla de Remote Service Management (puerto 445) sigue siendo suficiente.

El comando sc stop funciona en local pero no en remoto, ¿qué indica?

Confirma que el usuario pertenece al grupo autorizado y revisa la lista de exclusión. Si la operación local es exitosa, la ACL está bien configurada; el bloqueo remoto es casi seguro culpa de Remote Access Check.

¿Afecta a PowerShell Invoke-Command o WMI?

Solo cuando dichos métodos llaman internamente a sc.exe o al canal RPC del SCM. Si tu script PowerShell utiliza cmdlets como Restart-Service -ComputerName, el problema reaparecerá; en cambio, módulos que empleen otras API de control de servicios vía CIM pueden eludir la limitación.

¿Qué sucede en entornos de clúster (Failover Cluster)?

Los recursos gestionados por el servicio de clúster no dependen directamente del SCM para la conmutación, pero las operaciones de mantenimiento que usan sc.exe sí. Planifica las exclusiones por nodo, no por clúster.

Buenas prácticas posteriores

Una vez solucionado el acceso, establece un procedimiento de revisión cada trimestre:

  1. Exporta la clave RemoteAccessCheckExemptionList y verifica que solo contenga servicios válidos.
  2. Valida que los registros de auditoría no muestren aumentos de fallos de inicio/parada de servicios.
  3. Documenta nuevas aplicaciones que requieran delegación y repite el proceso de aprobación.

Conclusión

La introducción del Remote Access Check en el SCM de Windows Server refuerza la seguridad por defecto, pero impacta en flujos de trabajo existentes. Conocer su funcionamiento y configurar la lista de exclusión de forma selectiva te permite preservar la automatización y, al mismo tiempo, mantener un entorno robusto.

Siguiendo los pasos y recomendaciones anteriores tus equipos de soporte podrán retomar el control remoto de servicios en Windows Server 2022—sin recurrir a privilegios administrativos globales y respetando así las mejores prácticas de ciberseguridad.

Índice