Sécurité du canal nommé et droits d’accès
La sécurité Windows vous permet de contrôler l’accès aux canaux nommés. Pour plus d’informations sur la sécurité, consultez Modèle de contrôle d’accès.
Vous pouvez spécifier un descripteur de sécurité pour un canal nommé lorsque vous appelez la fonction CreateNamedPipe . Le descripteur de sécurité contrôle l’accès aux extrémités client et serveur du canal nommé. Si vous spécifiez NULL, le canal nommé obtient un descripteur de sécurité par défaut. Les listes de contrôle d’accès dans le descripteur de sécurité par défaut d’un canal nommé accordent un contrôle total au compte LocalSystem, aux administrateurs et au propriétaire du créateur. Ils accordent également l’accès en lecture aux membres du groupe Tout le monde et au compte anonyme.
Pour récupérer le descripteur de sécurité d’un canal nommé, appelez la fonction GetSecurityInfo . Pour modifier le descripteur de sécurité d’un canal nommé, appelez la fonction SetSecurityInfo .
Lorsqu’un thread appelle CreateNamedPipe pour ouvrir un handle à l’extrémité du serveur d’un canal nommé existant, le système effectue une case activée d’accès avant de renvoyer le handle. Le case activée d’accès compare le jeton d’accès du thread et les droits d’accès demandés à la liste de contrôle d’accès dacl dans le descripteur de sécurité du canal nommé. En plus des droits d’accès demandés, la liste dacl doit autoriser le thread appelant FILE_CREATE_PIPE_INSTANCE l’accès au canal nommé.
De même, lorsqu’un client appelle la fonction CreateFile ou CallNamedPipe pour se connecter à l’extrémité cliente d’un canal nommé, le système effectue une case activée d’accès avant d’accorder l’accès au client.
Le handle retourné par la fonction CreateNamedPipe dispose toujours d’un accès SYNCHRONe. Il a également GENERIC_READ, GENERIC_WRITE ou les deux, selon le mode ouvert du canal. Voici les droits d’accès pour chaque mode ouvert.
Mode Ouvert | Droits d’accès |
---|---|
PIPE_ACCESS_DUPLEX (0x00000003) | FILE_GENERIC_READ, FILE_GENERIC_WRITE et SYNCHRONIZE |
PIPE_ACCESS_INBOUND (0x00000001) | FILE_GENERIC_READ et SYNCHRONIZE |
PIPE_ACCESS_OUTBOUND (0x00000002) | FILE_GENERIC_WRITE et SYNCHRONIZE |
FILE_GENERIC_READ accès pour un canal nommé combine les droits de lecture des données à partir du canal, de lecture des attributs de canal, de lecture d’attributs étendus et de lecture de la liste DACL du canal.
FILE_GENERIC_WRITE accès pour un canal nommé combine les droits d’écrire des données dans le canal, d’y ajouter des données, d’écrire des attributs de canal, d’écrire des attributs étendus et de lire la liste de contrôle d’accès du canal. Étant donné que FILE_APPEND_DATA et FILE_CREATE_PIPE_INSTANCE ont la même définition, FILE_GENERIC_WRITE autorise la création du canal. Pour éviter ce problème, utilisez les droits individuels au lieu d’utiliser FILE_GENERIC_WRITE.
Vous pouvez demander le droit d’accès ACCESS_SYSTEM_SECURITY à un objet de canal nommé si vous souhaitez lire ou écrire la saCL de l’objet. Pour plus d’informations, consultez Listes de contrôle d’accès (ACL) et Droit d’accès SACL.
Pour empêcher les utilisateurs distants ou les utilisateurs d’une autre session de services Terminal Server d’accéder à un canal nommé, utilisez le SID d’ouverture de session sur la LISTE de contrôle d’accès pour le canal. Le SID d’ouverture de session est également utilisé dans les connexions d’exécution ; il s’agit du SID utilisé pour protéger l’espace de noms d’objet par session. Pour plus d’informations, consultez Obtention du SID de connexion en C++.