Condividi tramite


Sicurezza e diritti di accesso named pipe

La sicurezza di Windows consente di controllare l'accesso alle named pipe. Per altre informazioni sulla sicurezza, vedere Access-Control Model.For more information about security, see Access-Control Model.

È possibile specificare un descrittore di sicurezza per una named pipe quando si chiama la funzione CreateNamedPipe . Il descrittore di sicurezza controlla l'accesso alle estremità client e server della named pipe. Se si specifica NULL, la named pipe ottiene un descrittore di sicurezza predefinito. Gli ACL nel descrittore di sicurezza predefinito per una named pipe concedono il controllo completo all'account, agli amministratori e al proprietario del creatore. Concedono inoltre l'accesso in lettura ai membri del gruppo Everyone e all'account anonimo.

Per recuperare il descrittore di sicurezza di una named pipe, chiamare la funzione GetSecurityInfo . Per modificare il descrittore di sicurezza di una named pipe, chiamare la funzione SetSecurityInfo .

Quando un thread chiama CreateNamedPipe per aprire un handle alla fine del server di una named pipe esistente, il sistema esegue un controllo di accesso prima di restituire l'handle. Il controllo di accesso confronta il token di accesso del thread e i diritti di accesso richiesti rispetto all'elenco DACL nel descrittore di sicurezza della named pipe. Oltre ai diritti di accesso richiesti, l'elenco DACL deve consentire al thread chiamante FILE_CREATE_PIPE_INSTANCE l'accesso alla named pipe.

Analogamente, quando un client chiama la funzione CreateFile o CallNamedPipe per connettersi alla fine del client di una named pipe, il sistema esegue un controllo di accesso prima di concedere l'accesso al client.

L'handle restituito dalla funzione CreateNamedPipe ha sempre l'accesso SYNCHRONIZE. Ha anche GENERIC_READ, GENERIC_WRITE o entrambi, a seconda della modalità aperta della pipe. Di seguito sono riportati i diritti di accesso per ogni modalità aperta.

Modalità aperta Diritti di accesso
PIPE_ACCESS_DUPLEX (0x00000003) FILE_GENERIC_READ, FILE_GENERIC_WRITE e SYNCHRONIZE
PIPE_ACCESS_INBOUND (0x00000001) FILE_GENERIC_READ e SYNCHRONIZE
PIPE_ACCESS_OUTBOUND (0x00000002) FILE_GENERIC_WRITE e SYNCHRONIZE

 

FILE_GENERIC_READ l'accesso per una named pipe combina i diritti per leggere i dati dalla pipe, leggere gli attributi della pipe, leggere gli attributi estesi e leggere l'elenco DACL della pipe.

FILE_GENERIC_WRITE l'accesso per una named pipe combina i diritti per scrivere dati nella pipe, accodare i dati, scrivere attributi pipe, scrivere attributi estesi e leggere l'elenco DACL della pipe. Poiché FILE_APPEND_DATA e FILE_CREATE_PIPE_INSTANCE hanno la stessa definizione, FILE_GENERIC_WRITE quindi consente di creare la pipe. Per evitare questo problema, usare i diritti individuali anziché usare FILE_GENERIC_WRITE.

È possibile richiedere il diritto di accesso ACCESS_SYSTEM_SECURITY a un oggetto named pipe se si desidera leggere o scrivere l'elenco SACL dell'oggetto. Per altre informazioni, vedere Access-Control Lists (ACL) e SACL Access Right.For more information, see Access-Control Lists (ACL) and SACL Access Right.

Per impedire a utenti remoti o utenti in una sessione di servizi terminal diversa di accedere a una named pipe, usare il SID di accesso nell'elenco DACL per la pipe. Il SID di accesso viene usato anche negli accessi run-as; si tratta del SID usato per proteggere lo spazio dei nomi dell'oggetto per sessione. Per altre informazioni, vedere Recupero del SID di accesso in C++.