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.
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ón | Ventajas | Desventajas |
---|---|---|
Agregar el servicio a RemoteAccessCheckExemptionList | Permite restaurar la funcionalidad precisa sin otorgar derechos excesivos. | Implica tocar el registro (o automatizar el cambio con GPO/PowerShell). |
Convertir el grupo en administradores locales | Implementació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 <Servicio>
Confirma que el descriptor incluye las entradas RPWP
(Remote Start/Stop/Pause). Si necesitas modificarlo:
sc.exe sdset <Servicio> <SDDL_actualizado>
Incorporar el servicio en la lista de exclusión
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurePipeServers\SCM" ^
/v RemoteAccessCheckExemptionList /t REGMULTISZ ^
/d <NombreServicioInterno> /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 <Servicio>
sc \\Servidor2022 start <Servicio>
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:
- Exporta la clave
RemoteAccessCheckExemptionList
y verifica que solo contenga servicios válidos. - Valida que los registros de auditoría no muestren aumentos de fallos de inicio/parada de servicios.
- 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.