Derechos de acceso y seguridad del servicio

El modelo de seguridad de Windows permite controlar el acceso al administrador de control de servicios (SCM) y a los objetos de servicio. En las secciones siguientes se proporciona información detallada:

Derechos de acceso para Service Control Manager

A continuación se muestran los derechos de acceso específicos para el SCM.

Derecho de acceso Descripción
SC_MANAGER_ALL_ACCESS (0xF003F) Incluye STANDARD_RIGHTS_REQUIRED, además de todos los derechos de acceso de esta tabla.
SC_MANAGER_CREATE_SERVICE (0x0002) Necesario para llamar a la función CreateService para crear un objeto de servicio y agregarlo a la base de datos.
SC_MANAGER_CONNECT (0x0001) Necesario para conectarse al administrador de control de servicios.
SC_MANAGER_ENUMERATE_SERVICE (0x0004) Necesario para llamar a la función EnumServicesStatus o EnumServicesStatusEx para enumerar los servicios que se encuentran en la base de datos.
Necesario para llamar a la función NotifyServiceStatusChange para recibir notificaciones cuando se crea o elimina cualquier servicio.
SC_MANAGER_LOCK (0x0008) Necesario para llamar a la función LockServiceDatabase para adquirir un bloqueo en la base de datos.
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020) Necesario para llamar a la función NotifyBootConfigStatus .
SC_MANAGER_QUERY_LOCK_STATUS (0x0010) Necesario para llamar a la función QueryServiceLockStatus para recuperar la información de estado de bloqueo de la base de datos.

A continuación se muestran los derechos de acceso genéricos para el SCM.

Derecho de acceso Descripción
GENERIC_READ
STANDARD_RIGHTS_READ
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
GENERIC_WRITE
STANDARD_RIGHTS_WRITE
SC_MANAGER_CREATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
GENERIC_EXECUTE
STANDARD_RIGHTS_EXECUTE
SC_MANAGER_CONNECT
SC_MANAGER_LOCK
GENERIC_ALL
SC_MANAGER_ALL_ACCESS

Un proceso con los derechos de acceso correctos puede abrir un identificador para el SCM que se puede usar en las funciones OpenService, EnumServicesStatusEx y QueryServiceLockStatus . Solo los procesos con privilegios de administrador pueden abrir identificadores para el SCM que las funciones CreateService y LockServiceDatabase pueden usar.

El sistema crea el descriptor de seguridad para el SCM. Para obtener o establecer el descriptor de seguridad para el SCM, use las funciones QueryServiceObjectSecurity y SetServiceObjectSecurity con un identificador para el objeto SCManager.

Windows Server 2003 y Windows XP: A diferencia de la mayoría de los otros objetos protegibles, no se puede modificar el descriptor de seguridad del SCM. Este comportamiento ha cambiado a partir de Windows Server 2003 con Service Pack 1 (SP1).

Se conceden los siguientes derechos de acceso.

Cuenta Derechos de acceso
Usuarios autenticados remotos
SC_MANAGER_CONNECT
Usuarios autenticados localmente (incluidos LocalService y NetworkService)
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
LocalSystem (Sistema local)
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
Administradores
SC_MANAGER_ALL_ACCESS

Tenga en cuenta que los usuarios remotos autenticados a través de la red pero que no han iniciado sesión interactivamente pueden conectarse al SCM, pero no realizar operaciones que requieran otros derechos de acceso. Para realizar estas operaciones, el usuario debe iniciar sesión de forma interactiva o el servicio debe usar una de las cuentas de servicio.

Windows Server 2003 y Windows XP: A los usuarios autenticados remotos se les conceden los derechos de acceso SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUS y STANDARD_RIGHTS_READ . Estos derechos de acceso están restringidos como se describe en la tabla anterior a partir de Windows Server 2003 con SP1

Cuando un proceso usa la función OpenSCManager para abrir un identificador en una base de datos de servicios instalados, puede solicitar derechos de acceso. El sistema realiza una comprobación de seguridad en el descriptor de seguridad del SCM antes de conceder los derechos de acceso solicitados.

Derechos de acceso para un servicio

A continuación se muestran los derechos de acceso específicos de un servicio.

Derecho de acceso Descripción
SERVICE_ALL_ACCESS (0xF01FF) Incluye STANDARD_RIGHTS_REQUIRED además de todos los derechos de acceso de esta tabla.
SERVICE_CHANGE_CONFIG (0x0002) Necesario para llamar a la función ChangeServiceConfig o ChangeServiceConfig2 para cambiar la configuración del servicio. Dado que esto concede al autor de la llamada el derecho a cambiar el archivo ejecutable que ejecuta el sistema, solo se le debe conceder a los administradores.
SERVICE_ENUMERATE_DEPENDENTS (0x0008) Necesario para llamar a la función EnumDependentServices para enumerar todos los servicios dependientes del servicio.
SERVICE_INTERROGATE (0x0080) Es necesario llamar a la función ControlService para pedir al servicio que notifique su estado inmediatamente.
SERVICE_PAUSE_CONTINUE (0x0040) Necesario para llamar a la función ControlService para pausar o continuar el servicio.
SERVICE_QUERY_CONFIG (0x0001) Necesario para llamar a las funciones QueryServiceConfig y QueryServiceConfig2 para consultar la configuración del servicio.
SERVICE_QUERY_STATUS (0x0004) Necesario para llamar a la función QueryServiceStatus o QueryServiceStatusEx para pedir al administrador de control de servicio el estado del servicio.
Necesario para llamar a la función NotifyServiceStatusChange para recibir notificaciones cuando un servicio cambia el estado.
SERVICE_START (0x0010) Necesario para llamar a la función StartService para iniciar el servicio.
SERVICE_STOP (0x0020) Necesario para llamar a la función ControlService para detener el servicio.
SERVICE_USER_DEFINED_CONTROL(0x0100) Necesario para llamar a la función ControlService para especificar un código de control definido por el usuario.

A continuación se muestran los derechos de acceso estándar de un servicio.

Derecho de acceso Descripción
ACCESS_SYSTEM_SECURITY Necesario para llamar a la función QueryServiceObjectSecurity o SetServiceObjectSecurity para acceder a SACL. La manera adecuada de obtener este acceso es habilitar el privilegioSE_SECURITY_NAME en el token de acceso actual del autor de la llamada, abrir el identificador para ACCESS_SYSTEM_SECURITY acceso y, a continuación, deshabilitar el privilegio.
DELETE (0x10000) Necesario para llamar a la función DeleteService para eliminar el servicio.
READ_CONTROL (0x20000) Necesario para llamar a la función QueryServiceObjectSecurity para consultar el descriptor de seguridad del objeto de servicio.
WRITE_DAC (0x40000) Necesario para llamar a la función SetServiceObjectSecurity para modificar el miembro Dacl del descriptor de seguridad del objeto de servicio.
WRITE_OWNER (0x80000) Necesario para llamar a la función SetServiceObjectSecurity para modificar los miembros Owner y Group del descriptor de seguridad del objeto de servicio.

A continuación se muestran los derechos de acceso genéricos de un servicio.

Derecho de acceso Descripción
GENERIC_READ
STANDARD_RIGHTS_READ
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_INTERROGATE
SERVICE_ENUMERATE_DEPENDENTS
GENERIC_WRITE
STANDARD_RIGHTS_WRITE
SERVICE_CHANGE_CONFIG
GENERIC_EXECUTE
STANDARD_RIGHTS_EXECUTE
SERVICE_START
SERVICE_STOP
SERVICE_PAUSE_CONTINUE
SERVICE_USER_DEFINED_CONTROL

El SCM crea el descriptor de seguridad de un objeto de servicio cuando la función CreateService instala el servicio. El descriptor de seguridad predeterminado de un objeto de servicio concede el siguiente acceso.

Cuenta Derechos de acceso
Usuarios autenticados remotos No se concede de forma predeterminada. Windows Server 2003 con SP1: SERVICE_USER_DEFINED_CONTROL
Windows Server 2003 y Windows XP: Los derechos de acceso para los usuarios autenticados remotos son los mismos que para los usuarios autenticados locales.
Usuarios autenticados localmente (incluidos LocalService y NetworkService)
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_USER_DEFINED_CONTROL
LocalSystem (Sistema local)
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_PAUSE_CONTINUE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_START
SERVICE_STOP
SERVICE_USER_DEFINED_CONTROL
Administradores
DELETE
READ_CONTROL
SERVICE_ALL_ACCESS
WRITE_DAC
WRITE_OWNER

Para realizar cualquier operación, el usuario debe iniciar sesión de forma interactiva o el servicio debe usar una de las cuentas de servicio.

Para obtener o establecer el descriptor de seguridad de un objeto de servicio, use las funciones QueryServiceObjectSecurity y SetServiceObjectSecurity . Para obtener más información, consulte Modificación de la DACL para un servicio.

Cuando un proceso usa la función OpenService , el sistema comprueba los derechos de acceso solicitados en el descriptor de seguridad del objeto de servicio.

Conceder determinados derechos de acceso a usuarios que no son de confianza (como SERVICE_CHANGE_CONFIG o SERVICE_STOP) puede permitirles interferir con la ejecución del servicio y, posiblemente, permitirles ejecutar aplicaciones en la cuenta localSystem.

Cuando se llama a la función EnumServicesStatusEx , si el autor de la llamada no tiene el derecho de acceso SERVICE_QUERY_STATUS a un servicio, el servicio se omite silenciosamente de la lista de servicios devueltos al cliente.