Diritti di sicurezza e accesso del servizio

Il modello di sicurezza di Windows consente di controllare l'accesso agli oggetti SCM (Service Control Manager) e del servizio. Le sezioni seguenti forniscono informazioni dettagliate:

Diritti di accesso per Service Control Manager

Di seguito sono riportati i diritti di accesso specifici per SCM.

Diritto di accesso Descrizione
SC_MANAGER_ALL_ACCESS (0xF003F ) Include STANDARD_RIGHTS_REQUIRED, oltre a tutti i diritti di accesso in questa tabella.
SC_MANAGER_CREATE_SERVICE (0x0002 ) Obbligatorio chiamare la funzione CreateService per creare un oggetto servizio e aggiungerlo al database.
SC_MANAGER_CONNECT (0x0001 ) Obbligatorio per connettersi al gestore del controllo del servizio.
SC_MANAGER_ENUMERATE_SERVICE (0x0004 ) Obbligatorio per chiamare la funzione EnumServicesStatus o EnumServicesStatusEx per elencare i servizi presenti nel database.
Necessario per chiamare la funzione NotifyServiceStatusChange per ricevere una notifica quando viene creato o eliminato qualsiasi servizio.
SC_MANAGER_LOCK (0x0008 ) Necessario per chiamare la funzione LockServiceDatabase per acquisire un blocco nel database.
SC_MANAGER_MODIFY_BOOT_CONFIG (0x0020 ) Obbligatorio per chiamare la funzione NotifyBootConfigStatus .
SC_MANAGER_QUERY_LOCK_STATUS (0x0010 ) Necessario per chiamare la funzione QueryServiceLockStatus per recuperare le informazioni sullo stato del blocco per il database.

Di seguito sono riportati i diritti di accesso generici per SCM.

Diritto di accesso Descrizione
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 processo con i diritti di accesso corretti può aprire un handle alla funzione SCM che può essere usata nelle funzioni OpenService, EnumServicesStatusEx e QueryServiceLockStatus. Solo i processi con privilegi di amministratore sono in grado di aprire handle a SCM che possono essere usati dalle funzioni CreateService e LockServiceDatabase.

Il sistema crea il descrittore di sicurezza per SCM. Per ottenere o impostare il descrittore di sicurezza per SCM, usare le funzioni QueryServiceObjectSecurity e SetServiceObjectSecurity con un handle all'oggetto SCManager.

Windows Server 2003 e Windows XP: A differenza della maggior parte degli altri oggetti a protezione diretta, non è possibile modificare il descrittore di sicurezza per SCM. Questo comportamento è cambiato a partire da Windows Server 2003 con Service Pack 1 (SP1).

Vengono concessi i diritti di accesso seguenti.

Account Diritti di accesso
Utenti autenticati remoti
SC_MANAGER_CONNECT
Utenti autenticati locali (inclusi LocalService e NetworkService)
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
LocalSystem
SC_MANAGER_CONNECT
SC_MANAGER_ENUMERATE_SERVICE
SC_MANAGER_MODIFY_BOOT_CONFIG
SC_MANAGER_QUERY_LOCK_STATUS
STANDARD_RIGHTS_READ
Administrators
SC_MANAGER_ALL_ACCESS

Si noti che gli utenti remoti autenticati tramite la rete ma non connessi in modo interattivo possono connettersi a SCM ma non eseguire operazioni che richiedono altri diritti di accesso. Per eseguire queste operazioni, l'utente deve essere connesso in modo interattivo o il servizio deve usare uno degli account del servizio.

Windows Server 2003 e Windows XP: Gli utenti autenticati remoti vengono concessi i diritti di accesso SC_MANAGER_CONNECT, SC_MANAGER_ENUMERATE_SERVICE, SC_MANAGER_QUERY_LOCK_STATUS e STANDARD_RIGHTS_READ. Questi diritti di accesso sono limitati come descritto nella tabella precedente a partire da Windows Server 2003 con SP1

Quando un processo usa la funzione OpenSCManager per aprire un handle a un database di servizi installati, può richiedere diritti di accesso. Il sistema esegue un controllo di sicurezza sul descrittore di sicurezza per SCM prima di concedere i diritti di accesso richiesti.

Diritti di accesso per un servizio

Di seguito sono riportati i diritti di accesso specifici per un servizio.

Diritto di accesso Descrizione
SERVICE_ALL_ACCESS (0xF01FF ) Include STANDARD_RIGHTS_REQUIRED oltre a tutti i diritti di accesso in questa tabella.
SERVICE_CHANGE_CONFIG (0x0002 ) Necessario per chiamare la funzione ChangeServiceConfig o ChangeServiceConfig2 per modificare la configurazione del servizio. Poiché questo concede al chiamante il diritto di modificare il file eseguibile eseguito dal sistema, deve essere concesso solo agli amministratori.
SERVICE_ENUMERATE_DEPENDENTS (0x0008 ) Necessario per chiamare la funzione EnumDependentServices per enumerare tutti i servizi dipendenti dal servizio.
SERVICE_INTERROGATE (0x0080 ) Necessario per chiamare la funzione ControlService per chiedere al servizio di segnalarne immediatamente lo stato.
SERVICE_PAUSE_CONTINUE (0x0040 ) Necessario per chiamare la funzione ControlService per sospendere o continuare il servizio.
SERVICE_QUERY_CONFIG (0x0001 ) Obbligatorio per chiamare le funzioni QueryServiceConfig e QueryServiceConfig2 per eseguire query sulla configurazione del servizio.
SERVICE_QUERY_STATUS (0x0004 ) Necessario per chiamare la funzione QueryServiceStatus o QueryServiceStatusEx per chiedere al gestore di controllo del servizio lo stato del servizio.
Necessario per chiamare la funzione NotifyServiceStatusChange per ricevere una notifica quando un servizio cambia stato.
SERVICE_START (0x0010 ) Necessario per chiamare la funzione StartService per avviare il servizio.
SERVICE_STOP (0x0020 ) Necessario per chiamare la funzione ControlService per arrestare il servizio.
SERVICE_USER_DEFINED_CONTROL(0x0100) Necessario per chiamare la funzione ControlService per specificare un codice di controllo definito dall'utente.

Di seguito sono riportati i diritti di accesso standard per un servizio.

Diritto di accesso Descrizione
ACCESS_SYSTEM_SECURITY Obbligatorio per chiamare la funzione QueryServiceObjectSecurity o SetServiceObjectSecurity per accedere a SACL. Il modo appropriato per ottenere questo accesso consiste nell'abilitare il privilegioSE_SECURITY_NAME nel token di accesso corrente del chiamante, aprire l'handle per ACCESS_SYSTEM_SECURITY accesso e quindi disabilitare il privilegio.
DELETE (0x10000) Necessario per chiamare la funzione DeleteService per eliminare il servizio.
READ_CONTROL (0x20000 ) Obbligatorio per chiamare la funzione QueryServiceObjectSecurity per eseguire una query sul descrittore di sicurezza dell'oggetto servizio.
WRITE_DAC (0x40000) Obbligatorio per chiamare la funzione SetServiceObjectSecurity per modificare il membro Dacl del descrittore di sicurezza dell'oggetto servizio.
WRITE_OWNER (0x80000) Obbligatorio per chiamare la funzione SetServiceObjectSecurity per modificare i membri proprietario e gruppo del descrittore di sicurezza dell'oggetto servizio.

Di seguito sono riportati i diritti di accesso generici per un servizio.

Diritto di accesso Descrizione
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

SCM crea il descrittore di sicurezza di un oggetto servizio quando il servizio viene installato dalla funzione CreateService . Il descrittore di sicurezza predefinito di un oggetto servizio concede l'accesso seguente.

Account Diritti di accesso
Utenti autenticati remoti Non concesso per impostazione predefinita. Windows Server 2003 con SP1: SERVICE_USER_DEFINED_CONTROL
Windows Server 2003 e Windows XP: I diritti di accesso per gli utenti autenticati remoti sono uguali a per gli utenti autenticati locali.
Utenti autenticati locali (inclusi LocalService e NetworkService)
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_USER_DEFINED_CONTROL
LocalSystem
READ_CONTROL
SERVICE_ENUMERATE_DEPENDENTS
SERVICE_INTERROGATE
SERVICE_PAUSE_CONTINUE
SERVICE_QUERY_CONFIG
SERVICE_QUERY_STATUS
SERVICE_START
SERVICE_STOP
SERVICE_USER_DEFINED_CONTROL
Administrators
DELETE
READ_CONTROL
SERVICE_ALL_ACCESS
WRITE_DAC
WRITE_OWNER

Per eseguire qualsiasi operazione, l'utente deve essere connesso in modo interattivo oppure il servizio deve usare uno degli account del servizio.

Per ottenere o impostare il descrittore di sicurezza per un oggetto servizio, usare le funzioni QueryServiceObjectSecurity e SetServiceObjectSecurity . Per altre informazioni, vedere Modifica dell'elenco DACL per un servizio.

Quando un processo usa la funzione OpenService , il sistema controlla i diritti di accesso richiesti per il descrittore di sicurezza per l'oggetto servizio.

La concessione di determinati diritti di accesso agli utenti non attendibili (ad esempio SERVICE_CHANGE_CONFIG o SERVICE_STOP) può consentire loro di interferire con l'esecuzione del servizio e, eventualmente, consentire loro di eseguire applicazioni con l'account LocalSystem.

Quando viene chiamata la funzione EnumServicesStatusEx , se il chiamante non dispone del diritto di accesso SERVICE_QUERY_STATUS a un servizio, il servizio viene omesso automaticamente dall'elenco dei servizi restituiti al client.