Dieser Artikel wurde speziell für die Atlassian Server Plattform geschrieben. Aufgrund von eingeschränkten Funktionalitäten in Atlassian Cloud Applikationen, können diese Inhalte nicht auf Atlassian Cloud Applikationen angewendet werden.
Die Ausgangslage
Sie versuchen die Verbindung zu einem Port auf einer Linux-Umgebung herzustellen und erhalten die Fehlermeldung, dass Sie keine Rechte dazu besitzen. Typischerweise ist es entweder der Port 80 oder 443.
Folgendes erscheint im catalina.out:
Die Ursache
Die Ports unterhalb von 1024 werden privilegierte Ports genannt und diese Ports dürfen unter Linux (sowie den meisten Unix Systemen und Unix ähnlichen Systemen) nicht von anderen Benutzern als dem Root-User geöffnet werden. Dieses Sicherheitsfeature wurde ursprünglich implementiert um böswillige Benutzer daran zu hindern schädliche Dienste auf bekannten Ports aufzuspielen.
Die Lösung
Es gibt unterschiedliche Lösungen das zu umgehen:
- Installieren und konfigurieren Sie Apache oder nginx als Reverse Proxy Server als Root-User und setzen Sie danach die Rechte auf den normalen Nutzer herab.
- Konfigurieren Sie eine Firewall auf dem Server und verwenden Sie dabei iptables oder eine andere alternative, damit die unteren Ports, die von Confluence verwendet werden, automatisch höher eingestuft werden.
- Benutzen Sie jsvc, öffnen Sie es zunächst als Root-User und reduzieren Sie anschließend die Zugriffsrechte auf den normalen User.
- Benutzen Sie authhbind um Nicht-Root-Usern Zugriffsrechte zum Öffnen eines privilegierten Ports zu geben.
- Wenn Sie Linux 2.6.24 oder höher verwenden, können Sie eine Datei-Fähigkeit auf der Java Executable aufsetzen, um das Recht zu vergeben privilegierte Ports öffnen zu können, ohne sonstige Superuser-Rechte zu haben:
Nachdem Sie diese Änderung ausgeführt haben könnten Sie beim Start von Java Fehlermeldungen wie diese erhalten:
Das bedeutet, dass die Library aus einem dynamischen Pfad importiert wurde, anstatt aus dem vertrauenswürdigen ld.so Pfad. Lesen Sie http://bugs.sun.com/view_bug.do?bug_id=7157699 für weitere Informationen dazu. Um das zu fixen müssen Sie die Library lokalisieren und den Pfad zur ld.so Konfiguration hinzufügen. Beachten Sie, dass das Untenstehende nur ein Beispiel ist und sich das je nach Linux-Distribution unterscheiden kann. Ersetzen Sie JAVA_HOME mit dem korrekten Ort:
Nachdem Sie das alles umgesetzt haben müssen Sie noch sicherstellen, dass Confluence Java nur mit dem direkten Binärpfad startet und nicht über einen symbolischen Link, ansonsten wird die Fähigkeit nicht mit aufgenommen.
Durch diese Änderungen kann jeder Benutzer privilegierte Ports mithilfe von Java öffnen. Unter Umständen könnte das nicht sinnvoll für Sie sein.
Selbst wenn dadurch vieles funktioniert wird es nicht empfohlen Confluence als Root auszuführen. Denn wenn ein Angreifer eine Sicherheitslücke für seine Schadsoftware ausnutzt und das über den aktuellen Benutzer, dann hat dieser auch den Root-Zugriff.