Présentation

Sous Windows, l'accès aux ressources système et aux tâches liées au système peut être contrôlé à l'aide de privilèges contenus dans un objet appelé jeton d'accès. Lorsque le Wrapper est exécuté pour le compte d'un utilisateur, le processus reçoit une copie du jeton d'accès contenant les privilèges de l'utilisateur.

L'édition Professionnelle du Wrapper permet d'ajuster ces privilèges à différents niveaux :

  • Lors de l'installation du Wrapper en tant que service avec des identifiants Administrateur (ou lors de la mise à jour du service avec les autorisations appropriées), il est possible de redéfinir complètement sa liste de privilèges requis. Plus tard, lorsque le Gestionnaire de contrôle des services (SCM) démarre le service, il mettra à jour le jeton du processus avec les privilèges spécifiés.

  • À l'exécution, n'importe lequel des privilèges existant dans le jeton du processus Wrapper peut être activé ou désactivé. De plus, il est possible de supprimer complètement un privilège. Cependant, cette action n'est pas réversible pendant la durée de vie du processus Wrapper. Un privilège qui n'est pas présent dans le jeton d'accès ne peut pas être ajouté.

  • Par défaut, un processus démarré à partir d'une session utilisateur et tous ses processus enfants partagent le même jeton d'accès. Par conséquent, si un privilège est modifié par un processus, la modification s'appliquera à tous les processus de la hiérarchie parent-enfant.

    Le Wrapper permet toutefois de configurer séparément les privilèges de certains de ses processus enfants. C'est le cas du processus Java et des commandes d'événements. Pour que cela fonctionne, un duplicata du jeton d'accès du Wrapper sera créé exclusivement pour le processus enfant. Cela permet au processus enfant de s'exécuter dans un nouveau contexte de sécurité, dont les privilèges peuvent ensuite être ajustés sans affecter les autres processus.

Pour des raisons de sécurité, il est recommandé qu'une application n'active que les privilèges dont elle a besoin. Si un privilège peut être utilisé occasionnellement, ou s'il doit être utilisé par certains de ses processus enfants, il peut être désactivé afin de conserver la possibilité de le réactiver ultérieurement. Cependant, pour empêcher qu'un privilège soit réactivé par l'application ou l'un de ses processus enfants, la solution la plus sûre consiste à supprimer complètement le privilège.

Si aucun privilège requis n'est spécifié pour un service Windows, le SCM ne modifiera pas le jeton d'accès du service au démarrage, le laissant avec les privilèges attribués par défaut, c'est-à-dire ceux détenus par l'utilisateur et les groupes auxquels appartient le compte de service.

Les privilèges suivants sont couramment attribués aux utilisateurs exécutant des services :

  • Les privilèges SeCreateGlobalPrivilege et SeImpersonatePrivilege sont accordés via le groupe SERVICE auquel tous les utilisateurs exécutant des services devraient appartenir.

  • SeIncreaseWorkingSetPrivilege est accordé via le groupe Users.

  • SeChangeNotifyPrivilege est activé par défaut pour tous les utilisateurs.

En général, les privilèges ci-dessus sont appropriés (et parfois nécessaires) pour le processus Wrapper, de sorte que dans la plupart des situations, vous n'aurez pas besoin de les modifier. Cependant, selon l'utilisation de votre application, il peut être préférable, pour des raisons de sécurité, de supprimer certains privilèges du jeton d'accès du processus Java ou des processus enfants s'exécutant en réponse à des événements.

NOTE

Depuis la version 3.7.0, l'emprunt d'identité (impersonation) est utilisé, lorsqu'il est disponible, pour vérifier le SID du processus Java se connectant lorsque le type de backend est PIPE (la valeur par défaut). Cela permet une confirmation rigoureuse de l'identité du processus Java, offrant le niveau d'authentification le plus robuste pour la communication inter-processus sous Windows. Bien que la vérification du SID offre une sécurité maximale, elle n'est pas strictement requise pour une communication sécurisée avec la JVM ; le système reste protégé par plusieurs couches indépendantes, notamment l'authentification par clé cryptographique et la vérification du PID.

AVERTISSEMENT

Une attention particulière doit être portée au privilège SeImpersonatePrivilege. Bien qu'activé par défaut pour les services Windows, ce privilège peut être utilisé de manière abusive pour passer d'un compte local à NT AUTHORITY\SYSTEM si l'application Java donne à l'utilisateur la possibilité d'exécuter des commandes arbitraires. Dans de tels cas, il est fortement recommandé de supprimer SeImpersonatePrivilege du processus Java.

Il en va de même pour les commandes d'événements. Il convient toujours de s'assurer que le programme ou le script cible dispose des autorisations de fichiers appropriées afin qu'il ne puisse pas être modifié ou replaced. De plus, si la commande configurée donne à l'utilisateur la possibilité d'exécuter ses propres commandes ou d'ouvrir une console, le privilège SeImpersonatePrivilege devrait également être supprimé.

NT AUTHORITY\SYSTEM est un compte puissant qui possède encore plus de privilèges qu'un Administrateur sous Windows. Y accéder constitue un réel problème de sécurité, car cela permettrait un contrôle presque total de la machine.

Veuillez consulter la description de la propriété wrapper.ntservice.impersonation pour plus de détails sur la façon de contrôler l'emprunt d'identité pour le processus Wrapper.


Les propriétés suivantes sont disponibles pour configurer les privilèges :

Privilèges requis pour un service Windows

wrapper.ntservice.required_privileges

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée lors de l'installation du Wrapper en tant que service Windows ou lors de la mise à jour d'un service existant. Elle spécifie une liste de privilèges requis qui sera insérée dans la configuration du service. Le Gestionnaire de contrôle des services (SCM) utilise ensuite cette liste pour déterminer quels privilèges sont pris en charge et, le cas échéant, les attribuer au service à chaque démarrage. Les privilèges du jeton d'accès du service qui ne sont pas présents dans la liste des privilèges requis seront supprimés par le SCM. Il existe toutefois une exception, le privilège SeChangeNotifyPrivilege qui n'est jamais supprimé pour des raisons de compatibilité.

La valeur NONE, ou une valeur vide, peut être utilisée pour spécifier qu'aucun privilège requis ne doit être utilisé pour le service. Si aucun privilège requis n'est spécifié, le SCM ne modifiera pas le jeton d'accès du service au démarrage, le laissant avec les privilèges attribués par défaut, c'est-à-dire ceux détenus par l'utilisateur et les groupes auxquels le service appartient.

La valeur par défaut est UNCHANGED. Lors de l'installation d'un service, cela signifie qu'aucun privilège requis ne sera utilisé pour le service. Lors de la mise à jour d'un service, cela signifie que les privilèges requis configurés ne seront pas mis à jour.

NOTE

L'utilisation de wrapper.ntservice.required_privileges=SeChangeNotifyPrivilege restreindra les privilèges du service au minimum. Cela entraînera la suppression de tous les privilèges au démarrage, à l'exception de SeChangeNotifyPrivilege.

La propriété doit être définie avec une liste de noms de privilèges séparés par des virgules, chacun commençant par « Se » et se terminant par « Privilege ».

Exemple :
wrapper.ntservice.required_privileges=SeChangeNotifyPrivilege, SeIncreaseWorkingSetPrivilege

La commande « whoami /priv » peut être utilisée pour afficher les noms de privilèges de l'utilisateur actuel.

Dans une invite de commandes exécutée en tant que NT AUTHORITY\SYSTEM, « whoami /priv » renverra la sortie suivante :
whoami /priv

PRIVILEGES INFORMATION
----------------------

Privilege Name                            Description                                                        State
========================================= ================================================================== ========
SeAssignPrimaryTokenPrivilege             Replace a process level token                                      Disabled
SeLockMemoryPrivilege                     Lock pages in memory                                               Enabled
SeIncreaseQuotaPrivilege                  Adjust memory quotas for a process                                 Disabled
SeTcbPrivilege                            Act as part of the operating system                                Enabled
SeSecurityPrivilege                       Manage auditing and security log                                   Disabled
SeTakeOwnershipPrivilege                  Take ownership of files or other objects                           Disabled
SeLoadDriverPrivilege                     Load and unload device drivers                                     Disabled
SeSystemProfilePrivilege                  Profile system performance                                         Enabled
SeSystemtimePrivilege                     Change the system time                                             Disabled
SeProfileSingleProcessPrivilege           Profile single process                                             Enabled
SeIncreaseBasePriorityPrivilege           Increase scheduling priority                                       Enabled
SeCreatePagefilePrivilege                 Create a pagefile                                                  Enabled
SeCreatePermanentPrivilege                Create permanent shared objects                                    Enabled
SeBackupPrivilege                         Back up files and directories                                      Disabled
SeRestorePrivilege                        Restore files and directories                                      Disabled
SeShutdownPrivilege                       Shut down the system                                               Disabled
SeDebugPrivilege                          Debug programs                                                     Enabled
SeAuditPrivilege                          Generate security audits                                           Enabled
SeSystemEnvironmentPrivilege              Modify firmware environment values                                 Disabled
SeChangeNotifyPrivilege                   Bypass traverse checking                                           Enabled
SeUndockPrivilege                         Remove computer from docking station                               Disabled
SeManageVolumePrivilege                   Perform volume maintenance tasks                                   Disabled
SeImpersonatePrivilege                    Impersonate a client after authentication                          Enabled
SeCreateGlobalPrivilege                   Create global objects                                              Enabled
SeIncreaseWorkingSetPrivilege             Increase a process working set                                     Enabled
SeTimeZonePrivilege                       Change the time zone                                               Enabled
SeCreateSymbolicLinkPrivilege             Create symbolic links                                              Enabled
SeDelegateSessionUserImpersonatePrivilege Obtain an impersonation token for another user in the same session Enabled

Veuillez consulter la page Microsoft MSDN pour la liste complète des privilèges (seules les constantes se terminant par « Privilege » peuvent être utilisées).

Privilèges d'exécution pour le processus Wrapper

Les propriétés suivantes sont utilisées pour ajuster les privilèges du processus Wrapper. Seuls les privilèges qui existent dans le jeton d'accès du processus Wrapper peuvent être ajustés.

Par défaut, le jeton d'accès contient les privilèges détenus par l'utilisateur sous lequel le Wrapper s'exécute ainsi que les privilèges des groupes auxquels cet utilisateur appartient.

Pour les services Windows, les privilèges par défaut peuvent être remplacés en définissant une liste de privilèges requis. Si un privilège est manquant, il est possible de l'ajouter à la liste wrapper.ntservice.required_privileges et de réinstaller ou de mettre à jour le service. Au prochain démarrage, le jeton d'accès du Wrapper devrait alors contenir le privilège.

Notez que ces propriétés ne prendront effet qu'au premier chargement de la configuration et seront ignorées si la configuration est rechargée.

wrapper.privileges.enable

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour spécifier une liste de privilèges à activer lorsque le Wrapper démarre en tant que console ou en tant que service. Les privilèges listés doivent être séparés par des virgules.

Exemple (activer SeIncreaseWorkingSetPrivilege et SeCreateGlobalPrivilege) :
wrapper.privileges.enable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

La valeur ALL peut être utilisée pour activer tous les privilèges présents dans le jeton d'accès du processus Wrapper.

wrapper.privileges.enable=ALL peut également être utilisé en combinaison avec wrapper.privileges.disable pour activer tous les privilèges sauf quelques-uns.

Exemple (activer tous les privilèges sauf SeIncreaseWorkingSetPrivilege) :
wrapper.privileges.enable=ALL
wrapper.privileges.disable=SeIncreaseWorkingSetPrivilege

wrapper.privileges.disable

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour spécifier une liste de privilèges à désactiver lorsque le Wrapper démarre en tant que console ou en tant que service. Les privilèges listés doivent être séparés par des virgules.

Exemple (désactiver SeIncreaseWorkingSetPrivilege et SeCreateGlobalPrivilege) :
wrapper.privileges.disable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

La valeur ALL peut être utilisée pour désactiver tous les privilèges présents dans le jeton d'accès du processus Wrapper.

wrapper.privileges.disable=ALL peut également être utilisé en combinaison avec wrapper.privileges.enable pour désactiver tous les privilèges sauf quelques-uns.

Exemple (désactiver tous les privilèges sauf SeIncreaseWorkingSetPrivilege) :
wrapper.privileges.disable=ALL
wrapper.privileges.enable=SeIncreaseWorkingSetPrivilege

AVERTISSEMENT

  • Si un privilège est présent à la fois dans la liste wrapper.privileges.enable et dans la liste wrapper.privileges.disable, un avertissement sera consigné et le privilège sera désactivé (sauf dans les cas où l'une des propriétés est définie sur ALL).

  • L'utilisation simultanée de wrapper.privileges.enable=ALL et de wrapper.privileges.disable=ALL n'est pas valide.

wrapper.privileges.remove

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour spécifier une liste de privilèges à supprimer lorsque le Wrapper démarre en tant que console ou en tant que service. Les privilèges listés doivent être séparés par des virgules.

Exemple (supprimer SeIncreaseWorkingSetPrivilege et SeCreateGlobalPrivilege) :
wrapper.privileges.remove=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

La valeur ALL peut être utilisée pour supprimer tous les privilèges présents dans le jeton d'accès du processus Wrapper.

Exemple (supprimer tous les privilèges) :
wrapper.privileges.remove=ALL

AVERTISSEMENT

Une fois qu'un privilège a été supprimé du jeton d'accès d'un processus, il ne peut plus être rajouté pendant la durée de vie du processus. La suppression d'un privilège le rend également indisponible pour tous les processus enfants qui partagent le même jeton d'accès, ainsi que pour les futurs processus enfants qui seront lancés en dupliquant le jeton d'accès du Wrapper.

Si le Wrapper est lancé à partir d'un autre processus et que les deux processus partagent le même jeton d'accès, la modification du jeton d'accès du Wrapper affecterait également le processus parent. Cependant, lors d'un démarrage en console ou en tant que service Windows, qui sont les scénarios les plus courants, cela ne pose pas de problème car Windows attribuera un nouveau jeton au processus Wrapper.

NOTE

wrapper.privileges.remove peut être utilisé à l'exécution pour supprimer un ou plusieurs privilèges. Cependant, il est généralement préférable de supprimer le(s) privilège(s) de la valeur de wrapper.ntservice.required_privileges et de réinstaller ou de mettre à jour le service.

wrapper.ntservice.impersonation

Compatibilité :3.5.58
Éditions :Édition ProfessionnelleÉdition StandardÉdition Community
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété contrôle si l'emprunt d'identité (impersonation) doit être supprimé pour le processus Wrapper et tous ses processus enfants (y compris les processus de l'application Java).

Lorsqu'un service Windows démarre, le Gestionnaire de contrôle des services (SCM) ajoute automatiquement le groupe SERVICE au compte utilisé par le service. C'est le cas pour la plupart des comptes que vous pouvez utiliser pour les services Windows, y compris les comptes intégrés et les comptes locaux personnalisés. Par défaut, le groupe SERVICE possède le privilège SeImpersonatePrivilege, qui est un droit utilisateur permettant d'« Emprunter l'identité d'un client après l'authentification ». Bien que ce privilège soit nécessaire à de nombreux services système pour des raisons de compatibilité, la plupart des applications Java n'en ont pas réellement besoin.

Il s'agit d'un problème de sécurité connu : SeImpersonatePrivilege peut être utilisé de manière abusive par du code malveillant pour s'élever jusqu'au compte LocalSystem, qui possède le niveau de privilège le plus élevé sur un système Windows. Personne ne peut garantir que son programme ne sera jamais affecté par des vulnérabilités permettant l'exécution de code indésirable, la solution la plus sûre consiste donc simplement à ne pas accorder ce privilège lorsqu'il n'est pas nécessaire.

Suivant le principe du moindre privilège, il a été décidé que le Wrapper supprimerait ce privilège par défaut pour les services s'exécutant avec un compte autre que NT AUTHORITY\SYSTEM (lors de l'exécution avec le compte SYSTEM, les processus Java posséderaient déjà les privilèges les plus élevés possibles, il n'y a donc aucun risque d'élévation supplémentaire). Cela s'applique à toutes les versions du Wrapper postérieures à 3.5.58. Seuls les services qui ont besoin de SeImpersonatePrivilege devraient l'activer.

La propriété wrapper.ntservice.impersonation peut être configurée avec les valeurs suivantes :

  • UNCHANGED :

    pour ne jamais supprimer SeImpersonatePrivilege du processus Wrapper.

  • DEFAULT :

    pour supprimer SeImpersonatePrivilege lors de l'exécution en tant que service avec un compte autre que NT AUTHORITY\SYSTEM.

  • REMOVE :

    pour toujours supprimer SeImpersonatePrivilege du processus Wrapper.

La valeur par défaut est DEFAULT.

NOTE

SeImpersonatePrivilege ne sera pas supprimé si des privilèges requis sont spécifiés pour le service. En effet, si SeImpersonatePrivilege n'est pas présent dans la liste des privilèges requis, il sera supprimé par le SCM. En revanche, s'il est présent, cela signifie qu'il doit être conservé. Un contrôle fin des privilèges requis peut être effectué avec l'édition Professionnelle.

L'édition Professionnelle peut également surcharger wrapper.ntservice.impersonation en spécifiant SeImpersonatePrivilege avec la propriété wrapper.privileges.remove.

Si SeImpersonatePrivilege est requis pour une commande d'événement (édition Professionnelle), pour l'application Java, ou pour l'un de ses processus enfants, wrapper.ntservice.impersonation doit être défini sur UNCHANGED. Ensuite, l'édition Professionnelle du Wrapper peut affiner quels processus doivent supprimer ce privilège et quels processus doivent le conserver.

Exemple :
# Do not remove impersonation for services
wrapper.ntservice.impersonation=UNCHANGED

# Remove impersonation for the Java process
wrapper.java.privileges.remove=SeImpersonatePrivilege

# Remove impersonation for all event commands by default
wrapper.event.default.command.privileges.remove=SeImpersonatePrivilege

# Enable SeImpersonatePrivilege for only one specific command
wrapper.event.user1.command.argv.1=./myscript.bat
wrapper.event.user1.command.privileges.enable=SeImpersonatePrivilege

NOTE

wrapper.ntservice.impersonation n'est utilisé que lorsque le Wrapper s'exécute en tant que service Windows. Cependant, pour les autres propriétés de privilèges, si vous devez appliquer des paramètres différents selon que vous vous exécutez en tant que service ou en tant qu'application console, vous pouvez envisager d'utiliser un fichier d'inclusion dont le chemin référence la variable %WRAPPER_RUN_MODE%. Vous pouvez alors avoir deux fichiers de configuration distincts, avec des chemins (ou noms de fichiers) contenant soit le mot « service » soit le mot « console » selon le mode auquel la configuration doit s'appliquer.

Exemple (configurations différentes pour les modes service et console) :
@include ../conf/wrapper-privileges-%WRAPPER_RUN_MODE%.conf

Privilèges d'exécution pour le processus Java

Les propriétés suivantes sont utilisées pour ajuster les privilèges du processus Java. Si l'une de ces propriétés est définie, le jeton d'accès du processus Wrapper sera dupliqué et les privilèges spécifiés seront ajustés dans la copie du jeton. Le processus Java sera alors lancé dans le contexte de sécurité représenté par ce nouveau jeton.

Seuls les privilèges qui existent dans le jeton d'accès du processus Java (et qui existent donc également dans le jeton du processus Wrapper) peuvent être ajustés.

Gardez à l'esprit que la liste des privilèges peut être modifiée à deux niveaux avant le lancement du processus Java : lors de l'installation d'un service Windows si des privilèges requis ont été spécifiés, ou si un ou plusieurs privilèges ont été supprimés au démarrage du Wrapper.

Les privilèges seront réajustés à chaque lancement d'une nouvelle JVM. Si le rechargement du fichier de configuration est autorisé, ces propriétés peuvent être modifiées afin d'utiliser des paramètres de privilèges différents lors de la prochaine invocation de la JVM.

wrapper.java.privileges.enable

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour spécifier une liste de privilèges à activer lorsque le processus Java est lancé. Les privilèges listés doivent être séparés par des virgules.

Exemple (activer SeIncreaseWorkingSetPrivilege et SeCreateGlobalPrivilege) :
wrapper.java.privileges.enable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

La valeur ALL peut être utilisée pour activer tous les privilèges présents dans le jeton d'accès du processus Wrapper.

wrapper.java.privileges.enable=ALL peut également être utilisé en combinaison avec wrapper.java.privileges.disable pour activer tous les privilèges sauf quelques-uns.

Exemple (activer tous les privilèges sauf SeIncreaseWorkingSetPrivilege) :
wrapper.java.privileges.enable=ALL
wrapper.java.privileges.disable=SeIncreaseWorkingSetPrivilege

wrapper.java.privileges.disable

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour spécifier une liste de privilèges à désactiver lorsque le processus Java est lancé. Les privilèges listés doivent être séparés par des virgules.

Exemple (désactiver SeIncreaseWorkingSetPrivilege et SeCreateGlobalPrivilege) :
wrapper.java.privileges.disable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

La valeur ALL peut être utilisée pour désactiver tous les privilèges présents dans le jeton d'accès du processus Wrapper.

wrapper.java.privileges.disable=ALL peut également être utilisé en combinaison avec wrapper.java.privileges.enable pour désactiver tous les privilèges sauf quelques-uns.

Exemple (désactiver tous les privilèges sauf SeIncreaseWorkingSetPrivilege) :
wrapper.java.privileges.disable=ALL
wrapper.java.privileges.enable=SeIncreaseWorkingSetPrivilege

AVERTISSEMENT

  • Si un privilège est présent à la fois dans la liste wrapper.java.privileges.enable et dans la liste wrapper.java.privileges.disable, un avertissement sera consigné et le privilège sera désactivé (sauf dans les cas où l'une des propriétés est définie sur ALL).

  • L'utilisation simultanée de wrapper.java.privileges.enable=ALL et de wrapper.java.privileges.disable=ALL n'est pas valide.

wrapper.java.privileges.remove

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour spécifier une liste de privilèges à supprimer lorsque le processus Java est lancé. Les privilèges listés doivent être séparés par des virgules.

Exemple (supprimer SeIncreaseWorkingSetPrivilege et SeCreateGlobalPrivilege) :
wrapper.java.privileges.remove=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

La valeur ALL peut être utilisée pour supprimer tous les privilèges présents dans le jeton d'accès du processus Wrapper.

Exemple (supprimer tous les privilèges) :
wrapper.java.privileges.remove=ALL

AVERTISSEMENT

Une fois qu'un privilège a été supprimé du jeton d'accès d'un processus, il ne peut plus être rajouté pendant la durée de vie du processus. La suppression d'un privilège le rend également indisponible pour tous les processus enfants lancés par Java.

NOTE

wrapper.privileges.remove peut être utilisé pour exécuter le processus Java avec des privilèges inférieurs à ceux du processus Wrapper.

Privilèges d'exécution pour les commandes d'événements

Les propriétés suivantes sont utilisées pour ajuster les privilèges des commandes lancées en réponse à certains événements. Si l'une de ces propriétés est définie, le jeton d'accès du processus Wrapper sera dupliqué et les privilèges spécifiés seront ajustés dans la copie du jeton. La commande d'événement sera alors lancée dans le contexte de sécurité représenté par ce nouveau jeton.

Seuls les privilèges qui existent dans le jeton d'accès de la commande d'événement (et qui existent donc également dans le jeton du processus Wrapper) peuvent être ajustés.

Gardez à l'esprit que la liste des privilèges peut être modifiée à deux niveaux avant le lancement d'une commande d'événement : lors de l'installation d'un service Windows si des privilèges requis ont été spécifiés, ou si un ou plusieurs privilèges ont été supprimés au démarrage du Wrapper.

NOTE

La possibilité de contrôler les privilèges à différents niveaux lors du lancement des processus permet des configurations comme la suivante : Afin d'activer un certain privilège pour une commande d'événement, celui-ci doit également exister pour le processus Wrapper. Cependant, le processus Java peut supprimer complètement ce privilège, garantissant ainsi qu'il ne sera utilisé ni par l'application Java ni par aucun de ses processus enfants.

Exemple :
# install the service with the following privileges
wrapper.ntservice.required_privileges=SeChangeNotifyPrivilege, SeImpersonatePrivilege, SeIncreaseWorkingSetPrivilege

# disable SeImpersonatePrivilege privilege as it is not needed for the Wrapper itself
# (but keep it in the access token so that event commands can still enable it)
wrapper.privileges.disable=SeImpersonatePrivilege

# remove SeImpersonatePrivilege for the Java application and all of its child processes
wrapper.java.privileges.remove=SeImpersonatePrivilege

# by default, also remove SeImpersonatePrivilege to all event commands
wrapper.event.default.command.privileges.remove=SeImpersonatePrivilege

# override the above default property for a specific event command
wrapper.event.user1.command.privileges.remove=NONE

# enable SeImpersonatePrivilege for a specific event command
wrapper.event.user1.command.privileges.enable=SeImpersonatePrivilege

wrapper.event.<event_name>.command.privileges.enable

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour spécifier une liste de privilèges à activer lorsque la commande d'événement est lancée. Les privilèges listés doivent être séparés par des virgules.

Comme plusieurs des propriétés de commande d'événement, elle peut être définie :

  • Globalement pour tous les événements : propriété wrapper.event.default.command.privileges.enable, ou
  • Pour un événement spécifique : propriété wrapper.event.<event_name>.command.privileges.enable.

Exemple (activer SeIncreaseWorkingSetPrivilege et SeCreateGlobalPrivilege) :
wrapper.event.user1.command.privileges.enable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

La valeur ALL peut être utilisée pour activer tous les privilèges présents dans le jeton d'accès du processus Wrapper.

wrapper.event.<event_name>.command.privileges.enable=ALL peut également être utilisé en combinaison avec wrapper.event.<event_name>.command.privileges.disable pour activer tous les privilèges sauf quelques-uns.

Exemple (activer tous les privilèges sauf SeIncreaseWorkingSetPrivilege) :
wrapper.event.user1.command.privileges.enable=ALL
wrapper.event.user1.command.privileges.disable=SeIncreaseWorkingSetPrivilege

La valeur par défaut NONE est utile pour wrapper.event.<event_name>.command.privileges.enable afin de remplacer la valeur de wrapper.event.default.command.privileges.enable.

Exemple (SeTimeZonePrivilege est activé pour les commandes de tous les événements sauf l'événement user1) :
wrapper.event.default.command.privileges.enable=SeTimeZonePrivilege
wrapper.event.user1.command.privileges.enable=NONE

wrapper.event.<event_name>.command.privileges.disable

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour spécifier une liste de privilèges à désactiver lorsque le Wrapper démarre en tant que console ou en tant que service. Les privilèges listés doivent être séparés par des virgules.

Comme plusieurs des propriétés de commande d'événement, elle peut être définie :

  • Globalement pour tous les événements : propriété wrapper.event.default.command.privileges.disable, ou
  • Pour un événement spécifique : propriété wrapper.event.<event_name>.command.privileges.disable.

Exemple (désactiver SeIncreaseWorkingSetPrivilege et SeCreateGlobalPrivilege) :
wrapper.event.user1.command.privileges.disable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

La valeur ALL peut être utilisée pour désactiver tous les privilèges présents dans le jeton d'accès du processus Wrapper.

wrapper.event.<event_name>.command.privileges.disable=ALL peut également être utilisé en combinaison avec wrapper.event.<event_name>.command.privileges.enable pour désactiver tous les privilèges sauf quelques-uns.

Exemple (désactiver tous les privilèges sauf SeIncreaseWorkingSetPrivilege) :
wrapper.event.user1.command.privileges.disable=ALL
wrapper.event.user1.command.privileges.enable=SeIncreaseWorkingSetPrivilege

La valeur par défaut NONE est utile pour wrapper.event.<event_name>.command.privileges.disable afin de remplacer la valeur de wrapper.event.default.command.privileges.disable.

Exemple (SeImpersonatePrivilege est désactivé pour les commandes de tous les événements sauf l'événement user1) :
wrapper.event.default.command.privileges.disable=SeImpersonatePrivilege
wrapper.event.user1.command.privileges.disable=NONE

AVERTISSEMENT

  • Si un privilège est présent à la fois dans la liste wrapper.event.<event_name>.command.privileges.enable et dans la liste wrapper.event.<event_name>.command.privileges.disable, un avertissement sera consigné et le privilège sera désactivé (sauf dans les cas où l'une des propriétés est définie sur ALL).

  • L'utilisation simultanée de wrapper.event.<event_name>.command.privileges.enable=ALL et de wrapper.event.<event_name>.command.privileges.disable=ALL n'est pas valide.

wrapper.event.<event_name>.command.privileges.remove

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour spécifier une liste de privilèges à supprimer lorsque le Wrapper démarre en tant que console ou en tant que service. Les privilèges listés doivent être séparés par des virgules.

Comme plusieurs des propriétés de commande d'événement, elle peut être définie :

  • Globalement pour tous les événements : propriété wrapper.event.default.command.privileges.remove, ou
  • Pour un événement spécifique : propriété wrapper.event.<event_name>.command.privileges.remove.

Exemple (supprimer SeIncreaseWorkingSetPrivilege et SeCreateGlobalPrivilege) :
wrapper.event.user1.command.privileges.remove=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

La valeur ALL peut être utilisée pour supprimer tous les privilèges présents dans le jeton d'accès du processus Wrapper.

Exemple (supprimer tous les privilèges) :
wrapper.event.user1.command.privileges.remove=ALL

La valeur par défaut NONE est utile pour wrapper.event.<event_name>.command.privileges.remove afin de remplacer la valeur de wrapper.event.default.command.privileges.remove.

Exemple (SeImpersonatePrivilege est supprimé pour les commandes de tous les événements sauf l'événement user1) :
wrapper.event.default.command.privileges.remove=SeImpersonatePrivilege
wrapper.event.user1.command.privileges.remove=NONE

AVERTISSEMENT

Une fois qu'un privilège a été supprimé du jeton d'accès d'un processus, il ne peut plus être rajouté pendant la durée de vie du processus. La suppression d'un privilège le rend également indisponible pour tous les processus enfants qui partagent le même jeton d'accès, ainsi que pour les futurs processus enfants qui seront lancés en dupliquant le jeton d'accès du Wrapper.

NOTE

wrapper.event.<event_name>.command.privileges.remove peut être utilisé à l'exécution pour supprimer un ou plusieurs privilèges. Cependant, il est généralement préférable de supprimer le(s) privilège(s) de la valeur de wrapper.ntservice.required_privileges puis de réinstaller ou de mettre à jour le service.

Journalisation

wrapper.privileges.status.loglevel

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Cette propriété est utilisée pour contrôler le niveau de journalisation auquel les informations sur les privilèges sont imprimées dans les journaux du Wrapper.

Modifier le niveau de journalisation peut être utile à des fins de débogage afin de visualiser comment les privilèges sont modifiés. Pour chaque processus, la liste des privilèges effectifs, ainsi que leur état, seront également imprimés.

La valeur par défaut est NONE, ce qui signifie qu'aucune information n'est imprimée dans le journal. En production, l'utilisation de NONE est recommandée afin de ne pas laisser d'informations sur l'état des privilèges dans les journaux.

Exemple (modification du niveau de journalisation de l'état des privilèges) :
wrapper.privileges.status.loglevel=STATUS

La sortie du journal ressemblera à ceci :

Exemple (sortie de l'état des privilèges du processus Java) :
...
STATUS | wrapper  | Launching a JVM...
STATUS | wrapper  | Java process: Privilege 'SeUndockPrivilege' was changed from DISABLED to ENABLED.
STATUS | wrapper  | Java process: Privilege 'SeTimeZonePrivilege' was removed.
STATUS | wrapper  | Java process: Effective privileges:
STATUS | wrapper  | Java process:   SeShutdownPrivilege (DISABLED)
STATUS | wrapper  | Java process:   SeUndockPrivilege (ENABLED)
STATUS | wrapper  | Java process:   SeIncreaseWorkingSetPrivilege (DISABLED)
...

Interroger les privilèges d'un service Windows

Compatibilité :3.5.57
Éditions :Édition ProfessionnelleÉdition Standard (non prise en charge)Édition Community (non prise en charge)
Plateformes :WindowsMac OSX (Non pris en charge)Linux (Non pris en charge)Alpine Linux (Non pris en charge)FreeBSD (Non pris en charge)Solaris (Non pris en charge)IBM z/Linux (Non pris en charge)

Il est possible d'interroger les privilèges requis d'un service Windows, ainsi que les privilèges d'exécution du processus Wrapper et de ses processus enfants, avec une seule commande : .\wrapper.exe -qr ../conf/wrapper.conf

Exemple (configuration) :
wrapper.ntservice.required_privileges=SeIncreaseWorkingSetPrivilege, SeUndockPrivilege, SeImpersonatePrivilege

wrapper.event.jvm_prelaunch.command.privileges.disable=ALL
wrapper.event.jvm_prelaunch.command.privileges.remove=SeIncreaseWorkingSetPrivilege

wrapper.java.privileges.enable=SeUndockPrivilege, SeTimeZonePrivilege
wrapper.java.privileges.remove=SeImpersonatePrivilege

Exemple (sortie) :
.\wrapper.exe -qr ..\conf\wrapper.conf
STATUS | wrapperm | Required privileges for the testwrapper3 service:
STATUS | wrapperm |   SeChangeNotifyPrivilege (DEFAULT, ENABLED)
STATUS | wrapperm |   SeIncreaseWorkingSetPrivilege (DISABLED)
STATUS | wrapperm |   SeUndockPrivilege (DISABLED)
STATUS | wrapperm |   SeImpersonatePrivilege (DEFAULT, ENABLED)
STATUS | wrapperm |
STATUS | wrapperm | Child processes:
STATUS | wrapperm |   myscript.bat: Effective privileges:
STATUS | wrapperm |   myscript.bat:   SeChangeNotifyPrivilege (DISABLED)
STATUS | wrapperm |   myscript.bat:   SeUndockPrivilege (DISABLED)
STATUS | wrapperm |   myscript.bat:   SeImpersonatePrivilege (DISABLED)
STATUS | wrapperm |
STATUS | wrapperm |   java.exe: Effective privileges:
STATUS | wrapperm |   java.exe:   SeChangeNotifyPrivilege (DEFAULT, ENABLED)
STATUS | wrapperm |   java.exe:   SeUndockPrivilege (ENABLED)
STATUS | wrapperm |   java.exe:   SeIncreaseWorkingSetPrivilege (DISABLED)


Il est également possible d'interroger les privilèges d'un autre service en ajoutant « = », suivi du nom du service, à l'option -qr (« -qr=serviceName »).

Interroger les privilèges en utilisant le nom du service :
.\wrapper.exe -qr=myservice ../conf/wrapper-license.conf