Best Practice für die Zugriffsberechtigung für Benutzer von Apache Tomcat

22

Ich habe eine Linux-Box, die von verschiedenen Entwicklern geteilt wird. Sie möchten ihre Kriegsdateien in Apache Tomcat bereitstellen, das sich an einem gemeinsam genutzten Speicherort befindet (/ opt / tomcat).

Da sie keinen sudo-Zugriff haben, muss ich die Ordnerberechtigung für das Tomcat-Verzeichnis ändern.

Verzeichnisstruktur unter /opt/tomcatist -

bin/

conf/

lib/

logs/

temp/

webapps/

work/

Was sind die Best Practices in der oben genannten Situation - Am besten geeignete Zugriffsberechtigung für Benutzer? Zur Zeit habe ich die Berechtigung für Webapps und Protokolle auf 777 geändert.

Vielen Dank

Kunal
quelle

Antworten:

32

Ich mache es so:

Wir legen den Benutzer tomcat als Eigentümer des Ordners tomcat fest:

# chown -R tomcat:tomcat /opt/tomcat

Benutzer können die Konfiguration von Tomcat nicht ändern:

# chmod -R g+r /opt/tomcat/conf

Benutzer können die anderen Ordner ändern:

# chmod -R g+w /opt/tomcat/logs
# chmod -R g+w /opt/tomcat/temp
# chmod -R g+w /opt/tomcat/webapps
# chmod -R g+w /opt/tomcat/work

Aktivieren Sie das Sticky-Bit für neue Dateien und behalten Sie die definierten Berechtigungen bei:

# chmod -R g+s /opt/tomcat/conf
# chmod -R g+s /opt/tomcat/logs
# chmod -R g+s /opt/tomcat/temp
# chmod -R g+s /opt/tomcat/webapps
# chmod -R g+s /opt/tomcat/work

Schließlich fügen wir die Tomcat-Gruppe hinzu, die Benutzer benötigen, die den Tomcat verwenden können:

# usermod -a -G tomcat MIUSER
intropedro
quelle
4
Wenn Sie ohne das -a-Tag auskommen, fügen Sie den Benutzer der Katergruppe hinzu, entfernen jedoch MIUSER aus allen anderen Gruppen, zu denen sie gehören (dies bedeutet, dass keine sudo-Gruppe mehr vorhanden ist). Ich musste nur schnell handeln, um meine Gruppen auf dem Hauptkonto auf einem meiner Server wiederherzustellen und sie aus einer alten Sitzung abzurufen, in der ich diese Gruppen noch hielt. Ein Wort der Warnung an andere Benutzer, die diese Antwort lesen.
Axoren
Ich habe der Antwort die Option hinzugefügt. Vielen Dank
intropedro
Wie kann Tomcat als Tomcat-Benutzer gestartet werden? Meins wird als Deamon gestartet und läuft ab sofort als Root.
Stephane
1
Hallo Stephane, In Ubuntu wird Tomcat mit einem Tomcat-Benutzer ausgeführt und befindet sich in der Datei / etc / default / tomcat8 mit den Variablen TOMCAT8_USER und TOMCAT8_GROUP. In anderen Linux weiß ich nicht.
Intropedro
Ist +sdie Benutzer- / Gruppen-ID nicht festgelegt? Die Manpage sagt, das +tist etwas klebrig.
Bmaupin
13

Der Non-Tomcat settingsAbschnitt des Tomcat-Sicherheitshandbuchs enthält nützliche Informationen zu diesem Thema. Siehe hier:

Tomcat sollte nicht unter dem Root-Benutzer ausgeführt werden. Erstellen Sie einen dedizierten Benutzer für den Tomcat-Prozess und geben Sie diesem Benutzer die erforderlichen Mindestberechtigungen für das Betriebssystem. Beispielsweise sollte es nicht möglich sein, sich mit dem Tomcat-Benutzer remote anzumelden.

Dateiberechtigungen sollten ebenfalls angemessen eingeschränkt werden. Am Beispiel der Tomcat-Instanzen in der ASF (bei der die automatische Bereitstellung deaktiviert ist und Webanwendungen als explodierte Verzeichnisse bereitgestellt werden) ist die Standardkonfiguration, dass alle Tomcat-Dateien im Besitz von root mit der Gruppe Tomcat sind und der Eigentümer Lese- / Schreibrechte besitzt , Gruppe hat nur gelesen und Welt hat keine Berechtigungen. Ausnahmen bilden die Protokolle, die temporären Dateien und das Arbeitsverzeichnis, die dem Tomcat-Benutzer und nicht dem Root-Benutzer gehören . Dies bedeutet, dass ein Angreifer, der den Tomcat-Prozess gefährdet, die Tomcat-Konfiguration nicht ändern, keine neuen Webanwendungen bereitstellen oder vorhandene Webanwendungen ändern kann. Der Tomcat-Prozess wird mit einer umask von 007 ausgeführt, um diese Berechtigungen beizubehalten.

Jack
quelle
Ich frage mich, ob der beschriebene Ansatz nicht nur in Tomcat, sondern auch in anderen Diensten (Datenbank, Reverse Proxy usw.) angewendet werden kann. Glaubst du, es ist machbar / klug?
Paolo
1

Sie müssen dem Grundsatz des geringsten Privilegs folgen . Der Server muss (wahrscheinlich www-data, aber Sie müssen es überprüfen) in der Lage sein, die meisten Dateien zu lesen (sagen wir alle) und nur in die Protokolle zu schreiben. Die Webentwickler dürfen schreiben, wo sie wollen. Setzen Sie das Sticky-Bit in den Verzeichnissen so, dass es nur der Eigentümer einer Datei löschen kann.

In der Praxis müssen Sie (zum Beispiel webdev) eine Gruppe erstellen und alle Entwickler und den Server hinzufügen ( usermod -aG webdev <user>oder usermod -A webdev <user>je nach Linux-Version). chownAlle Dateien und Verzeichnisse an den Webserver-Benutzer, chmod alle Verzeichnisse an 500 und alle Dateien an 400 (außer dort, binwo die ausführbaren Dateien ebenfalls 500 sein müssen).

Erteilen Sie /opt/tomcatder Gruppe Schreibberechtigungen (das wären 570) und setzen Sie das Sticky-Bit so, dass sie nur die Dateien entfernen können, deren Eigentümer sie sind (chmod 1570). Gewähren Sie dem Server die Schreibberechtigung für die Protokolle und die Leseberechtigungen für die Entwickler (0740 für den Ordner, 0640 für die Dateien, das Sticky-Bit ist wahrscheinlich nicht erforderlich, und gewähren Sie es niemals einer Datei, sondern nur den Ordnern, wie es eine hat) andere Bedeutung (mit den Berechtigungen des Eigentümers ausführen, wenn die Datei ausführbar ist)).

Dann müssen Sie webdeveinigen Verzeichnissen Schreibrechte (1570) erteilen . Sie benötigen hier einige Versuche und Fehler, und dies kann von der Anwendung abhängig sein. Diese Ordner müssen 1570 sein, während einige andere 0500 sein können.

Die Entwickler müssen der Gruppe Lesezugriff auf ihre Dateien gewähren, damit der Server sie lesen (das sind 640) und auch auf den Verzeichnissen ausführen kann (das sind 750).

Calimo
quelle
1

Ich denke, die von @ intropedro akzeptierte Antwort ist gut. Es ist erwähnenswert, dass die Verwendung eines Paketinstallationsprogramms eine Menge Kopfschmerzen ersparen kann - zumindest für Tomcat 7 unter Ubuntu sind apt-get install tomcat7die folgenden Installationsverzeichnisse "standardisiert":

  • /etc/tomcat7 für Konfigurationsdateien,
  • /var/lib/tomcat7 für Kernbibliotheken und
  • /usr/share/tomcat7 für gemeinsam genutzte Ressourcen.

Alle Berechtigungen werden ordnungsgemäß mit dem Prinzip der geringsten Berechtigung eingerichtet, sodass das Hinzufügen von Benutzern zur Gruppe tomcat7ausreicht, um die Bereitstellung zu ermöglichen. Ferner ist der Tomcat-Server als Dienst eingerichtet, der wie andere gestartet und gestoppt werden kann (z . B. sudo service tomcat startoder alternativ /etc/init.d/tomcat start). Tomcat startet beim Neustart automatisch und es gibt einen "Neustart" -Befehl. Ich bin mir sicher, dass es für RHEL / CentOS-Benutzer ein gleichwertiges yum-Paket gibt. (Und ja, es gibt ein Homebrew-Installationsprogramm für lokale OSX-Installationen).

Wenn Sie Probleme haben, gibt es ein nützliches Hilfsprogramm /usr/share/bin, configtest.shdas meldet, ob Berechtigungen oder andere Fehler vorliegen. Beachten Sie, dass es einen offenen Fehler gibt, der das Hinzufügen einiger symbolischer Links vorschlägt .

Wir betreiben immer noch Ubuntu trusty(14.04); Ich glaube, für diejenigen, die neuere Versionen verwenden, gibt es ein passendes Repo für Tomcat 8.

Tom Harrison Jr
quelle