Privilèges
Un privilège est le droit d’un compte, tel qu’un utilisateur ou un compte 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 d’appareil 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 à des 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 la 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 dispose des privilèges nécessaires et, le cas échéant, 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îne, comme 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 fonction LookupPrivilegeName pour convertir un 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 pour 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 « Changer le temps 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 LSA ( Local Security Authority ) 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é.
Rubriques connexes