Überblick

In Windows kann der Zugriff auf Systemressourcen und systembezogene Aufgaben mit Berechtigungen geregelt werden, die sich in einem Zugriffstoken befinden. Wenn der Wrapper für einen Benutzer ausgeführt wird, erhält der Prozess eine Kopie des Zugriffstokens, das die Nutzerberechtigungen enthält.

Die Professional Edition des Wrappers ermöglicht es, diese Berechtigungen auf verschiedenen Ebenen anzupassen:

  • Bei der Installation des Wrappers als Dienst mit Administratorberechtigungen (oder wenn der Dienst mit entsprechenden Berechtigungen aktualisiert wird), ist es möglich, seine Liste oder die erforderlichen Berechtigungen vollständig neu zu definieren. Wenn der Dienststeuerungsmanager (SCM) den Dienst später startet, aktualisiert er das Prozesstoken mit den angegebenen Berechtigungen.

  • Während der Laufzeit kann jede der im Wrapper-Prozesstoken existierenden Berechtigungen aktiviert oder deaktiviert werden. Es ist außerdem möglich, eine Berechtigung vollständig zu entfernen. Diese Aktion kann während der Lebensdauer des Wrapper-Prozesses nicht rückgängig gemacht werden. Eine Berechtigung, die nicht im Zugriffstoken enthalten ist, kann nicht hinzugefügt werden.

  • Standardmäßig teilen ein in einer Nutzersitzung gestarteter Prozess und alle seine Kindprozesse dasselbe Zugriffstoken. Daher werden Änderungen, die an einer Berechtigung eines Prozesses vorgenommen werden auf alle Prozesse in der Eltern-Kind-Hierarchie angewendet.

    Der Wrapper ermöglicht es jedoch, die Berechtigungen von manchen seiner Kindprozesse separat zu konfigurieren. Dies ist der Fall beim Java-Prozess und den Ereignisbefehlen. Damit dies funktioniert, wird exklusiv für den Kindprozess ein Duplikat des Wrapper-Zugriffstokens erzeugt. Dadurch kann der Kindprozess in einem neuen Sicherheitskontext ausgeführt werden, dessen Berechtigungen angepasst werden können, ohne andere Prozesse zu beinflussen.

Aus Sicherheitsgründen empfehlen wir, dass eine Anwendung nur die Berechtigungen aktiviert, die sie benötigt. Wird eine Berechtigung gelegentlich genutzt wird oder wenn sie von manchen ihrer Kindprozesse genutzt werden muss, kann sie deaktiviert werden, damit weiterhin die Möglichkeit besteht, sie zu einem späteren Zeitpunkt zu reaktivieren. Um zu verhindern, dass sie von der Anwendung oder einem ihrer Kindprozesse reaktiviert wird, ist es am sichersten, die Berechtigung vollständig zu entfernen.

Wenn keine erforderlichen Berechtigungen für einen Windows-Dienst angegeben sind, ändert der SCM das Zugriffstoken des Dienstes beim Starten nicht, sodass es bei den Standardberechtigungen bleibt, d. h. denjenigen, der Nutzer und Gruppen, denen das Servicekonto gehört.

Die folgenden Berechtigungen werden Nutzern häufig zugewiesen, die Dienste anwenden:

  • SeCreateGlobalPrivilege- und SeImpersonatePrivilege-Berechtigungen werden durch die Gruppe SERVICE gewährt, der alle Nutzer angehören sollten, die Dienste anwenden.

  • SeIncreaseWorkingSetPrivilege wird durch die Gruppe Benutzer festgelegt.

  • SeChangeNotifyPrivilege ist standardmäßig für alle Benutzer aktiviert.

Allgemein sind die oben stehenden Berechtigungen für den Wrapper-Prozess angemessen (und manchmal notwendig), daher ist es meistens nicht notwendig, dass Sie etwas daran ändern. Abhängig davon, wie Sie die Anwendung verwenden, kann es für die Sicherheit jedoch besser sein, wenn als Reaktion auf bestimmte Ereignisse, einige Berechtigungen aus dem Zugriffstoken des laufenden Java-Prozesses oder der laufenden Kindprozesse entfernt werden.

WARNING

Besondere Beachtung sollte der Berechtigung SeImpersonatePrivilege geschenkt werden. Zwar ist diese Berechtigung für Windows-Dienste standarmäßig aktiviert, sie kann jedoch missbraucht werden, um von einem lokalen Konto auf NT AUTHORITY\SYSTEM eskaliert werden, wenn die Java-Anwendung dem Benutzer die Möglichkeit gibt, willkürliche Befehle auszuführen. In solchen Fällen wird empfohlen, SeImpersonatePrivilege aus dem Java-Prozess zu entfernen.

Das gleiche gilt für Ereignisbefehle. Es muss sorgfältig darauf geachtet werden, dass das Zielprogramm oder -Skript angemessene Dateiberechtigungen hat, sodass es nicht modifiziert oder ersetzt werden kann. Wenn der konfigurierte Befehl dem Benutzer die Fähigkeit gibt, seine eigenen Befehle auszuführen oder eine Konsole zu öffnen, muss zusätzlich auch die SeImpersonatePrivilege entfernt werden.

NT AUTHORITY\SYSTEM ist ein leistungsstarkes Konto, das noch mehr Berechtigungen hat als das Administratorkonto auf Windows. Zugang dazu zu erlangen ist ein ernstes Sicherheitsproblem, da es beinahe vollständige Kontrolle über das Gerät gewähren würde.

Informationen zur Kontrolle von Identitätswechseln im Wrapper-Prozess finden Sie in der Beschreibung des wrapper.ntservice.impersonation.


Die folgenden Berechtigungen sind verfügbar, um Berechtigungen zu konfigurieren:

Erforderliche Berechtigungen für einen Windows-Dienst

wrapper.ntservice.required_privileges

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, wenn der Wrapper als Windows-Dienst installiert ist oder ein bestehender Dienst aktualisiert wird. Sie gibt eine Liste der erforderlichen Berechtigungen an, die in die Konfiguration des Dienstes eingefügt werden. Der Service Control Manager (SCM) verwendet diese Liste dann, um festzulegen, welche Berechtigungen unterstützt werden und, diese ggf. jedesmal dem Dienst zuzuweisen, wenn dieser gestartet wird. Berechtigungen des Zugriffstokens des Dienstes, die nicht in der Liste der erforderlichen Berechtigungen enthalten sind, werden vom SCM entfernt. Es gibt jedoch eine Ausnahme, die Berechtigung SeChangeNotifyPrivilege, die aus Gründen der Kompatibilität niemals entfernt wird.

Der Wert NONE oder ein leerer Wert können verwendet werden, um anzugeben, dass für den Dienst keine erforderlichen Berechtigungen verwendet werden sollen. Sind keine erforderlichen Berechtigungen angegeben, ändert der SCM beim Starten des Dienstes das Zugriffstoken nicht, sondern lässt die Standardberechtigungen unverändert, d. h. denjeniges des Nutzers und der Gruppen, denen der Dienst gehört.

Der Standardwert ist UNCHANGED. Wenn ein Dienst installiert wird, bedeutet dies, dass keine erforderlichen Berechtigungen für den Dienst verwendet werden. Beim Aktualisieren eines Dienstes bedeutet dies, dass die konfigurierten erforderlichen Berechtigungen nicht aktualisiert werden.

NOTE

Die Verwendung von wrapper.ntservice.required_privileges=SeChangeNotifyPrivilege beschränkt die Berechtigungen des Dienstes auf ein Minimum. Sie sorgt dafür, dass beim Starten alle Berechtigungen entfernt werden, außer SeChangeNotifyPrivilege.

Die Eigenschaft muss eine durch Kommata getrennte Liste der Berechtigungsnamen definiert werden, die jeweils mit 'Se' beginnen und mit 'Privilege' enden.

Beispiel:
wrapper.ntservice.required_privileges=SeChangeNotifyPrivilege, SeIncreaseWorkingSetPrivilege

Der Befehl 'whoami /priv' kann verwendet werden, um den Berechtigungsnamen des aktuellen Nutzers anzuzeigen.

In einer Kommandozeile, die als NT AUTHORITY\SYSTEM läuft, gibt 'whoami /priv' Folgendes aus:
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

Die vollständige Liste der Berechtigungen finden Sie auf der Seite Microsoft MSDN (nur die Konstanten, die mit 'Privilege' enden, können verwendet werden).

Laufzeit-Berechtigungen für den Wrapper-Prozess

Die folgenden Eigenschaften werden verwendet, um die Berechtigungen für den Wrapper-Prozess anzupassen. Nur Berechtigungen, die im Zugriffstoken des Wrapper-Prozesses existieren, können angepasst werden.

Standardmäßig enthält das Zugriffstoken die Berechtigungen, die der Nutzer hat, der den Wrapper bedient, und die Berechtigungen der Gruppen, denen dieser Nutzer angehört.

Für Windows-Dienste können die Standardberechtigungen überschrieben werden, indem eine Liste erforderlicher Berechtigungen eingestellt wird. Fehlt eine Berechtigung, kann diese der Liste wrapper.ntservice.required_privileges hinzugefügt werden, um den Dienst neu zu installieren oder zu aktualisieren. Beim nächsten Start sollte das Zugriffstoken des Wrappers die Berechtigung enthalten.

Beachten Sie, dass diese Eigenschaften nur wirksam werden, wenn die Konfiguration zum ersten Mal geladen wird und ignoriert werden, wenn die Konfiguration neugeladen wird.

wrapper.privileges.enable

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um eine Liste der zu aktivierenden Berechtigungen festzulegen, wenn der Wrapper als eine Konsole oder als Dienst gestartet wird. Die aufgelisteten Berechtigungen müssen durch Kommata getrennt werden.

Beispiel (aktiviert SeIncreaseWorkingSetPrivilege and SeCreateGlobalPrivilege):
wrapper.privileges.enable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

Der Wert ALL kann verwendet werden, um alle im Zugriffstoken vorhandenen Berechtigungen des Wrapper-Prozesses zu aktivieren.

wrapper.privileges.enable=ALL kann auch in Kombination mit wrapper.privileges.disable verwendet werden, um alle bis auf ein paar Berechtigungen zu aktivieren.

Beispiel (aktiviert alle Berechtigungen außer SeIncreaseWorkingSetPrivilege):
wrapper.privileges.enable=ALL
wrapper.privileges.disable=SeIncreaseWorkingSetPrivilege

wrapper.privileges.disable

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um eine Liste der zu deaktivierenden Berechtigungen festzulegen, wenn der Wrapper als eine Konsole oder als Dienst gestartet wird. Die aufgelisteten Berechtigungen müssen durch Kommata getrennt werden.

Beispiel (deaktiviert SeIncreaseWorkingSetPrivilege and SeCreateGlobalPrivilege):
wrapper.privileges.disable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

Der Wert ALL kann verwendet werden, um alle im Zugriffstoken vorhandenen Berechtigungen des Wrapper-Prozesses zu deaktivieren.

wrapper.privileges.disable=ALL kann auch in Kombination mit wrapper.privileges.enable verwendet werden, um alle bis auf ein paar Berechtigungen zu deaktivieren.

Beispiel (deaktiviert alle Berechtigungen außer SeIncreaseWorkingSetPrivilege):
wrapper.privileges.disable=ALL
wrapper.privileges.enable=SeIncreaseWorkingSetPrivilege

WARNING

  • Ist eine Berechtigung sowohl in der Liste wrapper.privileges.enable als auch in der Liste wrapper.privileges.disable vorhanden, wird eine Warnmeldung geloggt und die Berechtigung wird deaktiviert (außer in Fällen, in denen eine der Eigenschaften auf ALL eingestellt ist).

  • Es ist nicht zulässig, sowohl wrapper.privileges.enable=ALL als auch wrapper.privileges.disable=ALL zu verwenden.

wrapper.privileges.remove

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um eine Liste der zu entfernenden Berechtigungen festzulegen, wenn der Wrapper als eine Konsole oder als Dienst gestartet wird. Die aufgelisteten Berechtigungen müssen durch Kommata getrennt werden.

Beispiel (entfernt SeIncreaseWorkingSetPrivilege and SeCreateGlobalPrivilege):
wrapper.privileges.remove=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

Der WertALL kann verwendet werden, um alle im Zugriffstoken vorhandenen Berechtigungen des Wrapper-Prozesses zu entfernen.

Beispiel (entfernt alle Berechtigungen):
wrapper.privileges.remove=ALL

WARNING

Sobald eine Berechtigung aus dem Zugriffstoken eines Prozesses entfernt wurde, kann sie für die Lebensdauer des Prozesses nicht mehr hinzugefügt werden. Durch das Entfernen einer Berechtigung ist diese auch für alle Kindprozesse nicht verfügbar, die dasselbe Zugriffstoken teilen, ebenso wie für alle zukünftigen Kindprozesse, die gestartet werden, indem das Zugriffstoken des Wrappers dupliziert wird.

Wird der Wrapper von einem anderen Prozess gestartet und beide Prozesse teilen dasselbe Zugriffstoken, würde eine Änderung des Wrapper-Zugriffstokens ebenfalls den Elternprozess beeinflussen. In den häufigsten Szenarien, wenn der Wrapper in einer Konsole oder als ein Windows-Dienst gestartet wird, ist dies jedoch kein Problem, da Windows dem Wrapper-Prozess ein neues Token zuweist.

NOTE

wrapper.privileges.remove kann während der Laufzeit verwendet werden, um Berechtigungen zu entfernen. Es ist in der Regel jedoch besser, die Berechtigung(en) aus dem Wert von wrapper.ntservice.required_privileges zu entfernen und den Dienst neu zu installieren oder zu aktualisieren.

wrapper.ntservice.impersonation

Kompatibel :3.5.58
Editionen :Professional EditionStandard EditionCommunity Edition
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft kontrolliert, ob der Identitätswechsel aus dem Wrapper und allen seinen Kindprozessen entfernt werden soll (einschließlich des Java-Anwendungsprozesses).

Wenn ein Windows-Dienst startet, fügt der Service Control Manager (SCM) dem Konto automatisch die vom Dienst verwendete Gruppe SERVICE hinzu. Dies ist für die meisten Konten, die in Windows-Diensten genutzt werden können, der Fall, einschließlich den internen Konten und individuellen lokalen Konten. Standardmäßig hat die Gruppe SERVICE die SeImpersonatePrivilege, welche ein Nutzerrecht ist: "Identität eines Clients nach der Authentifizierung annehmen". Zwar wird diese Berechtigung von vielen Systemdiensten zu Kompatibilitätszwecken benötigt, die meisten Java-Anwendungen brauchen sie jedoch nicht.

Es ist ein bekanntes Sicherheitsrisiko, dass SeImpersonatePrivilege von bösartigem Code missbraucht werden kann, um zum Konto LocalSystem zu eskalieren, welches in einem Windows-System die höchste Berechtigungsstufe hat. Niemand kann garantieren, dass sein Programm niemals die Ausführung von unerwünschtem Code zulässt, daher ist es am sichersten, diese Berechtigung nicht zu erteilen, wenn sie nicht benötigt wird.

Dem Least-Privilege-Prinzip folgend, wurde entschieden, dass der Wrapper diese Berechtigung standardmäßig für Dienste entfernt, die mit einem anderen Konto als NT AUTHORITY\SYSTEM laufen (wenn sie mit dem SYSTEM-Konto laufen, haben Java-Prozesse bereits die höchstmöglichen Berechtigungen, daher besteht kein Risiko für eine weitere Eskalation). Dies trifft auf alle Wrapper-Versionen nach 3.5.58 zu. Nur Dienste, die SeImpersonatePrivilege benötigen, sollten es aktivieren.

Die Eigenschaft wrapper.ntservice.impersonation kann mit den folgenden Werten konfiguriert werden:

  • UNCHANGED :

    Um SeImpersonatePrivilege niemals aus dem Wrapper-Prozess zu entfernen.

  • DEFAULT :

    Um SeImpersonatePrivilege zu entfernen, wenn es als Dienst mit einem anderen Konto als NT AUTHORITY\SYSTEM läuft.

  • REMOVE :

    Um SeImpersonatePrivilege immer aus dem Wrapper-Prozess zu entfernen.

Der Standardwert ist DEFAULT.

NOTE

SeImpersonatePrivilege wird nicht entfernt, wenn die erforderlichen Berechtigungen für den Dienst spezifiziert sind. Denn wenn SeImpersonatePrivilege nicht in der Liste erforderlicher Berechtigungen ist, wird es vom SCM entfernt. Wenn es jedoch vorhanden ist, bedeutet dies, dass es beibehalten werden muss. Die Feineinstellung der erforderlichen Berechtigungen kann mit der Professional Edition vorgenommen werden.

Die Professional Edition kannn auch wrapper.ntservice.impersonation überschreiben, indem SeImpersonatePrivilege mit der Eigenschaft wrapper.privileges.remove spezifiziert wird.

Wird SeImpersonatePrivilege für einen Ereignisbefehl (Professional Edition), für die Java-Anwendung oder einen der Kindprozesse benötigt, muss wrapper.ntservice.impersonation auf UNCHANGED eingestellt werden. Dann kann die Professional Edition der Wrapper die Feineinstellung vornehmen, welcher Prozess diese Berechtigung entfernen und welcher sie behalten soll.

Beispiel:
# Entfernen Sie Identitätswechsel für Dienste nicht
wrapper.ntservice.impersonation=UNCHANGED

# Entfernen Sie Identitätswechsel für den Java-Prozess
wrapper.java.privileges.remove=SeImpersonatePrivilege

# Entfernen Sie standardmäßig Identitätswechsel für alle Ereignisbefehle
wrapper.event.default.command.privileges.remove=SeImpersonatePrivilege

# Aktivieren Sie SeImpersonatePrivilege nur für einen spezifischen Befehl
wrapper.event.user1.command.argv.1=./myscript.bat
wrapper.event.user1.command.privileges.enable=SeImpersonatePrivilege

NOTE

wrapper.ntservice.impersonation wird nur verwendet, wenn der Wrapper als Windows-Dienst läuft. Wenn Sie jedoch für andere Berechtigungseigenschaften andere Einstellungen vornehmen müssen, abhängig davon, ob Sie ihn als einen Dienst oder als eine Konsolenanwendung ausführen, können Sie in Betracht ziehen, eine Include File zu verwenden, deren Pfad sich auf die Variable %WRAPPER_RUN_MODE% bezieht. So können Sie zwei unterschiedliche Konfigurationsdateien haben, mit Pfaden (oder Dateinamen), die entweder das Wort "service" (Dienst) oder "console" (Konsole) enthalten, abhängig davon, auf welchen Modus die Konfiguration angewendet werden soll.

Beispiel (unterschiedliche Konfigurationen für Dienst- und Konsolenmodus):
#include ../conf/wrapper-privileges-%WRAPPER_RUN_MODE%.conf

Laufzeit-Berechtigungen für den Java-Prozess

Die folgenden Eigenschaften werden verwendet, um Berechtigungen für den Java-Prozess anzupassen. Ist eine dieser Eigenschaften eingestellt, wird das Zugriffstoken des Wrapper-Prozesses dupliziert und die angegebenen Berechtigungen werden in der Kopie des Tokens angepasst. Der Java-Prozess wird dann im Sicherheitskontext des neuen Tokens gestartet werden.

Nur Berechtigungen, die im Zugriffstoken des Java-Prozesses existieren (und somit auch im Token des Wrapper-Prozesses), können angepasst werden.

Denken Sie daran, dass die Liste der Berechtigungen auf zwei Ebenen geändert werden kann, bevor der Java-Prozesss gestartet wird: Wenn ein Windows-Dienst installiert wird, wenn erforderliche Berechtigungen angegeben wurden, oder wenn ein oder mehr Berechtigungen entfernt wurden, wenn der Wrapper gestartet wird.

Die Berechtigungen werden jedes Mal angepasst, wenn eine neue JVM gestartet wird. Ist das erneute Laden der Konfigurationsdatei zugelassen, können diese Eigenschaften so geändert werden, dass beim nächsten Aufruf der JVM andere Berechtigungseinstellungen verwendet werden.

wrapper.java.privileges.enable

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um eine Liste zu aktivierender Berechtigungen zu spezifizieren, wenn der Java-Prozess gestartet wird. Die aufgelisteten Berechtigungen müssen durch Kommata getrennt werden.

Beispiel (aktiviere SeIncreaseWorkingSetPrivilege and SeCreateGlobalPrivilege):
wrapper.java.privileges.enable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

Der Wert ALL kann verwendet werden, um alle im Zugriffstoken des Wrapper-Prozesses vorhandenen Berechtigungen zu aktivieren.

wrapper.java.privileges.enable=ALL kann auch in Kombination mit wrapper.java.privileges.disable verwendet werden, um alle, bis auf einige wenige, Berechtigungen zu aktivieren.

Beispiel (aktiviert alle Berechtigungen bis auf SeIncreaseWorkingSetPrivilege):
wrapper.java.privileges.enable=ALL
wrapper.java.privileges.disable=SeIncreaseWorkingSetPrivilege

wrapper.java.privileges.disable

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um eine Liste zu deaktivierender Berechtigungen zu spezifizieren, wenn der Java-Prozess gestartet wird. Die aufgelisteten Berechtigungen müssen durch Kommata getrennt werden.

Beispiel (deaktiviere SeIncreaseWorkingSetPrivilege and SeCreateGlobalPrivilege):
wrapper.java.privileges.disable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

Der Wert ALL kann verwendet werden, um alle im Zugriffstoken des Wrapper-Prozesses vorhandenen Berechtigungen zu deaktivieren.

wrapper.java.privileges.disable=ALL kann auch in Kombination mit wrapper.java.privileges.enable verwendet werden, um alle, bis auf einige wenige, Berechtigungen zu deaktivieren.

Beispiel (deaktiviert alle Berechtigungen bis auf SeIncreaseWorkingSetPrivilege):
wrapper.java.privileges.disable=ALL
wrapper.java.privileges.enable=SeIncreaseWorkingSetPrivilege

WARNING

  • Ist eine Berechtigung sowohl in der Liste wrapper.java.privileges.enable als auch wrapper.java.privileges.disable vorhanden, wird eine Warnmeldung geloggt und die Berechtigung wird deaktiviert (außer eine der Eigenschaften ist auf ALL gestellt).

  • Es ist nicht zulässig, sowohl wrapper.java.privileges.enable=ALL als auch wrapper.java.privileges.disable=ALL zu verwenden.

wrapper.java.privileges.remove

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um eine Liste zu löschender Berechtigungen zu spezifizieren, wenn der Java-Prozess gestartet wird. Die aufgelisteten Berechtigungen müssen durch Kommata getrennt werden.

Beispiel (lösche SeIncreaseWorkingSetPrivilege and SeCreateGlobalPrivilege):
wrapper.java.privileges.remove=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

Der Wert ALL kann verwendet werden, um alle im Zugriffstoken des Wrapper-Prozesses vorhandenen Berechtigungen zu löschen.

Beispiel (lösche alle Berechtigungen):
wrapper.java.privileges.remove=ALL

WARNING

Wurde eine Berechtigung einmal aus dem Zugriffstoken eines Prozesses gelöscht, kann sie für die Lebensdauer des Prozesses nicht mehr hinzugefügt werden. Durch das Löschen einer Berechtigung, ist diese auch für alle Kindprozesse, die von Java gestartet werden, nicht verfügbar.

NOTE

wrapper.privileges.remove kann verwendet werden, um den Java-Prozess mit niedrigeren Berechtigungen auszuführen als den Wrapper-Prozess.

Laufzeit-Berechtigungen für Ereignisbefehle

Die folgenden Eigenschaften werden verwendet, um Berechtigungen für Befehle zu ändern, die als Antwort auf bestimmte Ereignisse ausgeführt werden. Ist eine dieser Eigenschaften eingestellt, wird das Zugriffstoken des Wrapper-Prozesses dupliziert und die spezifizierten Berechtigungen werden in der Tokenkopie angepasst. Der Ereignisbefehl wird dann in dem Sicherheitskontext ausgeführt, der durch dieses neue Token repräsentiert wird.

Nur Berechtigungen, die im Zugriffstoken des Ereignisbefehls existieren (und daher auch im Token des Wrapper-Prozesses existieren) können angepasst werden.

Denken Sie daran, dass die Liste der Berechtigungen auf zwei Ebenen geändert werden kann, bevor ein Ereignisbefehl ausgeführt wird: Wenn ein Windows-Dienst installiert wird, wenn erforderliche Berechtigungen angegeben wurden, oder wenn ein oder mehr Berechtigungen entfernt wurden, wenn der Wrapper gestartet wird.

NOTE

Die Möglichkeit, Berechtigungen auf unterschiedlichen Ebenen zu steuern, wenn Prozesse gestartet werden, ermöglicht Konfigurationen wie die folgenden: Um eine bestimmte Berechtigung für einen Ereignisbefehl zu aktivieren, muss sie auch für den Wrapper-Prozess existieren. Der Java-Prozess kann diese Berechtigung jedoch vollständig entfernen, wodurch sichergestellt wird, dass sie weder von der Java-Anwendung noch von einem ihrer Kindprozesse verwendet wird.

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

# deaktiviere die Berechtigung SeImpersonatePrivilege, da sie nicht direkt für den Wrapper benötigt wird
# (sie soll jedoch im Zugriffstoken verbleiben, damit sie durch Ereignisbefehle aktiviert werden kann)
wrapper.privileges.disable=SeImpersonatePrivilege

# entferne SeImpersonatePrivilege für die Java-Anwendung und alle ihre Kindprozesse
wrapper.java.privileges.remove=SeImpersonatePrivilege

# entferne standardmäßig außerdem SeImpersonatePrivilege für alle Ereignisbefehle
wrapper.event.default.command.privileges.remove=SeImpersonatePrivilege

# überschreibe die oben stehende Standardeigenschaft für einen bestimmten Ereignisbefehl
wrapper.event.user1.command.privileges.remove=NONE

# aktiviere SeImpersonatePrivilege für einen bestimmten Ereignisbefehl
wrapper.event.user1.command.privileges.enable=SeImpersonatePrivilege

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

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um eine Liste zu aktivierender Berechtigungen zu spezifizieren, wenn der Ereignisbefehl gestartet wird. Die aufgelisteten Berechtigungen müssen durch Kommata getrennt werden.

Wie einige der Ereignisbefehleigenschaften, kann sie definiert werden:

  • Global für alle Ereignisse: die Eigenschaft wrapper.event.default.command.privileges.enable, oder
  • für ein spezifisches Ereignis: die Eigenschaft wrapper.event.<event_name>.command.privileges.enable.

Beispiel (aktiviere SeIncreaseWorkingSetPrivilege and SeCreateGlobalPrivilege):
wrapper.event.user1.command.privileges.enable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

Der Wert ALL kann verwendet werden, um alle im Zugriffstoken des Wrapper-Prozesses vorhandenen Berechtigungen zu aktivieren.

wrapper.event.<event_name>.command.privileges.enable=ALL kann außerdem in Kombination mit wrapper.event.<event_name>.command.privileges.disable verwendet werden, um bis auf ein paar alle Berechtigungen zu aktivieren.

Beispiel (aktiviere alle Berechtigungen außer SeIncreaseWorkingSetPrivilege):
wrapper.event.user1.command.privileges.enable=ALL
wrapper.event.user1.command.privileges.disable=SeIncreaseWorkingSetPrivilege

Der Standardwert NONE ist nützlich für wrapper.event.<event_name>.command.privileges.enable, um den Wert von wrapper.event.default.command.privileges.enable zu überschreiben.

Beispiel (SeTimeZonePrivilege ist für Befehle aller Ereignisse aktiviert, außer dem user1-Ereignis):
wrapper.event.default.command.privileges.enable=SeTimeZonePrivilege
wrapper.event.user1.command.privileges.enable=NONE

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

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um eine Liste zu deaktivierender Berechtigungen zu spezifizieren, wenn der Wrapper als Konsole oder als Dienst startet. Die aufgelisteten Berechtigungen müssen durch Kommata getrennt werden.

Wie einige der Ereignisbefehleigenschaften, kann sie definiert werden:

  • Global für alle Ereignisse: die Eigenschaft wrapper.event.default.command.privileges.disable, oder
  • für ein spezifisches Ereignis: die Eigenschaft wrapper.event.<event_name>.command.privileges.disable.

Beispiel (deaktiviere SeIncreaseWorkingSetPrivilege and SeCreateGlobalPrivilege):
wrapper.event.user1.command.privileges.disable=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

Der Wert ALL kann verwendet werden, um alle im Zugriffstoken des Wrapper-Prozesses vorhandenen Berechtigungen zu deaktivieren.

wrapper.event.<event_name>.command.privileges.disable=ALL kann außerdem in Kombination mit wrapper.event.<event_name>.command.privileges.enable verwendet werden, um bis auf ein paar alle Berechtigungen zu deaktivieren.

Beispiel (deaktiviere alle Berechtigungen außer SeIncreaseWorkingSetPrivilege):
wrapper.event.user1.command.privileges.disable=ALL
wrapper.event.user1.command.privileges.enable=SeIncreaseWorkingSetPrivilege

Der Standardwert NONE ist nützlich für wrapper.event.<event_name>.command.privileges.disable, um den Wert von wrapper.event.default.command.privileges.disable zu überschreiben.

Beispiel (SeImpersonatePrivilege ist für Befehle aller Ereignisse aktiviert, außer dem user1-Ereignis):
wrapper.event.default.command.privileges.disable=SeImpersonatePrivilege
wrapper.event.user1.command.privileges.disable=NONE

WARNING

  • Ist eine Berechtigung sowohl in der Liste wrapper.event.<event_name>.command.privileges.enable als auch wrapper.event.<event_name>.command.privileges.disable vorhanden, wird eine Warnmeldung geloggt und die Berechtigung wird deaktiviert (außer eine der Eigenschaften ist auf ALL gestellt).

  • Es ist nicht zulässig, sowohl wrapper.event.<event_name>.command.privileges.enable=ALL als auch wrapper.event.<event_name>.command.privileges.disable=ALL zu verwenden.

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

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um eine Liste zu entfernender Berechtigungen zu spezifizieren, wenn der Wrapper als Konsole oder als Dienst startet. Die aufgelisteten Berechtigungen müssen durch Kommata getrennt werden.

Wie einige der Ereignisbefehleigenschaften, kann sie definiert werden:

  • Global für alle Ereignisse: die Eigenschaft wrapper.event.default.command.privileges.remove, oder
  • für ein spezifisches Ereignis: die Eigenschaft wrapper.event.<event_name>.command.privileges.remove.

Beispiel (entferne SeIncreaseWorkingSetPrivilege and SeCreateGlobalPrivilege):
wrapper.event.user1.command.privileges.remove=SeIncreaseWorkingSetPrivilege, SeCreateGlobalPrivilege

Der Wert ALL kann verwendet werden, um alle im Zugriffstoken des Wrapper-Prozesses vorhandenen Berechtigungen zu entfernen.

Beispiel (entferne alle Berechtigungen):
wrapper.event.user1.command.privileges.remove=ALL

Der Standardwert NONE ist nützlich für wrapper.event.<event_name>.command.privileges.remove, um den Wert von wrapper.event.default.command.privileges.remove zu überschreiben.

Beispiel (SeImpersonatePrivilege ist für Befehle aller Ereignisse entfernt, außer dem user1-Ereignis):
wrapper.event.default.command.privileges.remove=SeImpersonatePrivilege
wrapper.event.user1.command.privileges.remove=NONE

WARNING

Sobald eine Berechtigung aus dem Zugriffstoken eines Prozesses entfernt wurde, kann sie für die Lebensdauer des Prozesses nicht mehr hinzugefügt werden. Durch das Entfernen einer Berechtigung ist diese auch für alle Kindprozesse nicht verfügbar, die dasselbe Zugriffstoken teilen, ebenso wie für alle zukünftigen Kindprozesse, die gestartet werden, indem das Zugriffstoken des Wrappers dupliziert wird.

NOTE

wrapper.event.<event_name>.command.privileges.remove kann während der Laufzeit verwendet werden, um eine oder mehrere Berechtigungen zu entfernen. Es ist in der Regel jedoch besser, die Berechtigung(en) aus dem Wert von wrapper.ntservice.required_privileges zu entfernen und den Service danach erneut zu installieren oder zu aktualisieren.

Loggen

wrapper.privileges.status.loglevel

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Diese Eigenschaft wird verwendet, um die Logebene zu kontrollieren, auf der Informationen über Berechtigungen in den Wrapper-Logs gedruckt werden.

Zum Debuggen kann es hilfreich sein, die Logebene zu ändern, um zu visualisieren, wie Berechtigungen verändert werden. Für jeden Prozess wird ebenfalls eine Liste aktueller Berechtigungen sowie deren Status gedruckt.

Der Standardwert ist NONE, das bedeutet, dass keine Informationen im Log gedruckt werden. Während der Produktion wird NONE empfohlen, damit keine Informationen über Berechtigungsstatus in den Logs verbleiben.

Beispiel (Ändern des Loglevels des Berechtigungsstatus):
wrapper.privileges.status.loglevel=STATUS

Die Log-Ausgabe wird folgendermaßen aussehen:

Beispiel (Java-Prozess Berechtigungsstatus-Ausgabe):
...
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)
...

Abfragen der Berechtigungen eines Windows-Dienstes

Kompatibel :3.5.57
Editionen :Professional EditionStandard Edition (Not Supported)Community Edition (Not Supported)
Betriebssysteme :WindowsMac OSX (Not Supported)Linux (Not Supported)IBM AIX (Not Supported)FreeBSD (Not Supported)HP-UX (Not Supported)Solaris (Not Supported)IBM z/Linux (Not Supported)

Es ist möglich, die erforderlichen Berechtigungen eines Windows-Dienstes sowie die Laufzeit-Berechtigungen des Wrapper-Prozesses und seiner Kindprozesse abzufragen, und das mit einem einzigen Befehl: .\wrapper.exe -qr ../conf/wrapper.conf

Beispiel (Konfiguration):
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

Beispiel (Ausgabe):
.\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)


Es ist auch möglich, die Berechtigungen eines anderen Dienstes abzufragen, indem '=' zu der -qr-Option hinzugefügt wird, gefolgt von dem Namen des Dienstes ('-qr=serviceName').

Abfragen der Berechtigungen mithilfe des Namens des Dienstes:
.\wrapper.exe -qr=myservice ../conf/wrapper-license.conf