Partager via


Privilèges

Un privilège est le droit d’un compte, tel qu’un compte d’utilisateur ou de groupe, d’effectuer différentes opérations liées au système sur l’ordinateur local, telles que l’arrêt du système, le chargement des pilotes de périphérique ou la modification de l’heure du système. Les privilèges diffèrent des droits d’accès de deux façons :

  • Les privilèges contrôlent l’accès aux ressources système et aux tâches liées au système, tandis que les droits d’accès contrôlent l’accès aux objets sécurisables .
  • Un administrateur système attribue des privilèges aux comptes d’utilisateur et de groupe, tandis que le système accorde ou refuse l’accès à un objet sécurisable en fonction des droits d’accès accordés dans les ACL de l’objet.

Chaque système dispose d’une base de données de compte qui stocke les privilèges détenus par les comptes d’utilisateur et de groupe. Lorsqu’un utilisateur se connecte, le système produit un jeton d’accès qui contient une liste des privilèges de l’utilisateur, y compris ceux accordés à l’utilisateur ou aux groupes auxquels appartient l’utilisateur. Notez que les privilèges s’appliquent uniquement à l’ordinateur local ; un compte de domaine peut avoir des privilèges différents sur différents ordinateurs.

Lorsque l’utilisateur tente d’effectuer une opération privilégiée, le système vérifie le jeton d’accès de l’utilisateur pour déterminer si l’utilisateur contient les privilèges nécessaires et, le cas échéant, il vérifie si les privilèges sont activés. Si l’utilisateur échoue à ces tests, le système n’effectue pas l’opération.

Pour déterminer les privilèges détenus dans un jeton d’accès, appelez la fonction GetTokenInformation, qui indique également quels privilèges sont activés. La plupart des privilèges sont désactivés par défaut.

L’API Windows définit un ensemble de constantes de chaînes, telles que SE_ASSIGNPRIMARYTOKEN_NAME, pour identifier les différents privilèges. Ces constantes sont identiques sur tous les systèmes et sont définies dans Winnt.h. Pour obtenir une table des privilèges définis par Windows, consultez constantes de privilèges. Toutefois, les fonctions qui obtiennent et ajustent les privilèges dans un jeton d’accès utilisent le type LUID pour identifier les privilèges. Les valeurs LUID d’un privilège peuvent différer d’un ordinateur à un autre et d’un démarrage à un autre sur le même ordinateur. Pour obtenir le LUID actuel qui correspond à l’une des constantes de chaîne, utilisez la fonction LookupPrivilegeValue. Utilisez la fonctionLookupPrivilegeNamepour convertir une LUID en constante de chaîne correspondante.

Le système fournit un ensemble de noms d’affichage qui décrivent chacun des privilèges. Ces éléments sont utiles lorsque vous devez afficher une description d’un privilège à l’utilisateur. Utilisez la fonction LookupPrivilegeDisplayName pour récupérer une chaîne de description qui correspond à la constante de chaîne d’un privilège. Par exemple, sur les systèmes qui utilisent l’anglais américain, le nom complet du privilège SE_SYSTEMTIME_NAME est « Modifier l’heure système ».

Vous pouvez utiliser la fonction PrivilegeCheck pour déterminer si un jeton d’accès contient un ensemble de privilèges spécifié. Cela est utile principalement pour les applications serveur qui empruntent l’identité d’un client.

Un administrateur système peut utiliser des outils d’administration, tels que Le Gestionnaire d’utilisateurs, pour ajouter ou supprimer des privilèges pour les comptes d’utilisateur et de groupe. Les administrateurs peuvent utiliser par programmation les fonctions l’autorité de sécurité locale (LSA) pour travailler avec des privilèges. Les fonctions LsaAddAccountRights et LsaRemoveAccountRights ajouter ou supprimer des privilèges d’un compte. La fonction LsaEnumerateAccountRights énumère les privilèges détenus par un compte spécifié. La fonction LsaEnumerateAccountsWithUserRight énumère les comptes qui contiennent un privilège spécifié.

constantes d’autorisation

activation et désactivation des privilèges en C++