Privilèges

Un privilège est le droit d’un compte, tel qu’un compte d’utilisateur ou de groupe, d’effectuer diverses 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 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 ACÉ dans la liste DACL 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 l’utilisateur appartient. 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 détient les privilèges nécessaires et, dans l’affirmative, 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 les privilèges 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îne, 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 à l’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 fonction LookupPrivilegeName pour convertir un LUID en sa constante de chaîne correspondante.

Le système fournit un ensemble de noms complets qui décrivent chacun des privilèges. Celles-ci 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 d’affichage 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 principalement utile 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 d’autorité de sécurité locale (LSA) pour travailler avec des privilèges. Les fonctions LsaAddAccountRights et LsaRemoveAccountRights ajoutent ou suppriment 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++