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 |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS |
GENERIC_WRITE |
SC_MANAGER_CREATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG |
GENERIC_EXECUTE |
SC_MANAGER_CONNECT SC_MANAGER_LOCK |
GENERIC_ALL |
|
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 |
|
Utenti autenticati locali (inclusi LocalService e NetworkService) |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
LocalSystem |
SC_MANAGER_ENUMERATE_SERVICE SC_MANAGER_MODIFY_BOOT_CONFIG SC_MANAGER_QUERY_LOCK_STATUS STANDARD_RIGHTS_READ |
Administrators |
|
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 |
SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_INTERROGATE SERVICE_ENUMERATE_DEPENDENTS |
GENERIC_WRITE |
SERVICE_CHANGE_CONFIG |
GENERIC_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) |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_USER_DEFINED_CONTROL |
LocalSystem |
SERVICE_ENUMERATE_DEPENDENTS SERVICE_INTERROGATE SERVICE_PAUSE_CONTINUE SERVICE_QUERY_CONFIG SERVICE_QUERY_STATUS SERVICE_START SERVICE_STOP SERVICE_USER_DEFINED_CONTROL |
Administrators |
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.