Weisen Sie Apache an, error.log / access.log als anderen Benutzer zu erstellen

7

Wenn Sie Apache anweisen, CustomLog-Dateien zu verwenden, erstellt Apache2 diese Dateien beim Start. Und es gibt sie immer an den Benutzer root: root. Wie kann ich dieses Verhalten ändern ?

Hintergrund

Apache läuft mit

SuexecUserGroup www-data www-data

Gleichzeitig verwende ich ein CustomLog, das die Ausgabe an ein Skript weiterleitet. Das Skript entfernt zwei Bytes von der IP und dann Wirtes an die Protokolldatei. Da Sie Apache nicht anweisen können, die IP aus dem error.log wegzulassen, ist diese Weiterleitung wichtig (in Bezug auf das deutsche Datenschutzgesetz).

Das Skript kann nicht auf mein benutzerdefiniertes Protokoll zugreifen, wenn dieses nicht zu www-data gehört .

Wenn ich den Besitzer wechsle, funktioniert alles einwandfrei.

Ich weiß auch, wie man den Dateieigentümer ändert, wenn logrotate die Protokolldatei umbenennt und neu erstellt.

Wenn ich jedoch den Apache-Prozess stoppe, die Protokolldateien lösche und dann den Apache-Prozess neu starte, werden neue Dateien erstellt, die zu root: root gehören.

Wie kann ich Apache anweisen, die neuen, ungültigen Dateien beim Start als / für www-Daten zu erstellen ?

BurninLeo
quelle

Antworten:

1

Dieser Satz:

Das Skript kann nicht auf mein benutzerdefiniertes Protokoll zugreifen, wenn dieses nicht zu www-data gehört.

Steht in direktem Widerspruch zu http://httpd.apache.org/docs/current/logs.html#piped :

Piped-Protokollprozesse werden vom übergeordneten Apache-httpd-Prozess erzeugt und erben die Benutzer-ID dieses Prozesses. Dies bedeutet, dass Pipeline-Protokollprogramme normalerweise als Root ausgeführt werden. Es ist daher sehr wichtig, die Programme einfach und sicher zu halten.

Wenn das von Ihnen beschriebene Szenario irgendwie korrekt ist, können Sie das Problem dennoch umgehen, indem Sie es umgehen

  1. Ignorieren des in der Konfigurationsdatei angegebenen Protokolldateinamens
  2. Erstellen Sie Ihren eigenen Protokolldateinamen im Skript
  3. Umleiten von stdout in die Datei Ihrer Wahl wie in (2)
Alien Lebensform
quelle
Hmm - guter Punkt. Danke für diesen Rat! Es scheint, dass das Problem auf die Tatsache zurückzuführen ist, dass das Protokollierungsskript dem falschen Benutzer gehörte! Nachdem es auch root gegeben wurde, funktioniert alles :)
BurninLeo
0

Ich bin auf dasselbe Problem gestoßen, konnte jedoch das Skript, das das Protokoll schreibt, nicht ändern. Ich konnte das Skript ändern, das es interpretierte.

Installieren:

  1. Apache startet und erstellt die Protokolldateien als root:rootanstelle von www-data:www-data. Dies liegt an der in der OP-Frage erwähnten Situation.
  2. Ich möchte ein Analyseskript für die Protokolldatei als Nicht-Root-Benutzer ( www-data) ausführen , kann die Datei jedoch nicht lesen. Ich mache das als Cron von Roots Crontab
  3. Bevor das Analyseskript ausgeführt wird, führe ich rootden Befehl (as ) aus chown www-data:www-data /var/log/apache2/*.log. Dadurch wird der Besitz der Protokolldateien (jedoch nicht des übergeordneten Verzeichnisses) www-datawie beabsichtigt geändert , und das Analyseskript kann die Datei dann lesen.

Nicht die schönste Lösung und definitiv nicht das, was Sie sich von einem ausgelasteten Server wünschen würden, aber bei einer kleinen Installation ist es gut genug.

gpjod erwähnt, dass dies ein Sicherheitsproblem sein könnte. Die Apache-Dokumentation besagt, dass das Verzeichnis für die Protokolle nicht für andere beschreibbar sein sollte.

Dies gilt jedoch höchstwahrscheinlich für alle Situationen, in denen die OP-Frage gelöst wird, und Sie möchten möglicherweise die Sicherheitstipps in der verknüpften Dokumentation lesen. Da in diesem speziellen Fall das Eigentum von rootzu geändert wird , www-datawie es beabsichtigt ist (siehe die ursprüngliche Frage), sehe ich keinen zusätzlichen Thread, der sich aus meiner Lösung ergibt.

Angelo Fuchs
quelle
2
Dies kann ein Sicherheitsrisiko sein. Aus der Apache-Dokumentation : "Jeder, der in das Verzeichnis schreiben kann, in dem Apache httpd eine Protokolldatei schreibt, kann mit ziemlicher Sicherheit auf die UID zugreifen, unter der der Server gestartet wird, die normalerweise root ist. Geben Sie den Benutzern KEINEN Schreibzugriff auf das Verzeichnis Die Protokolle werden gespeichert, ohne sich der Konsequenzen bewusst zu sein. Weitere Informationen finden Sie im Dokument mit den Sicherheitstipps. "
Gpojd
@gpojd Mein Befehl ändert nicht das Verzeichnis des Pfads, sondern die Dateien selbst.
Angelo Fuchs
@gpojd - Korrigieren Sie, dass dies ein Sicherheitsproblem darstellt und definitiv erwähnenswert ist. Ich denke jedoch, dass dies eine geeignete Lösung im Szenario einer lokalen Entwicklungsmaschine wäre.
James Jones
@ JamesJones Ich denke, die Situation ist komplexer. Das Sicherheitsrisiko liegt in dem grundlegenden Ansatz, der von Apache selbst entwickelt wurde (siehe die Standardversuche des OP, um die Rechte der Datei festzulegen). Wenn es sich also um ein Sicherheitsproblem handelt, ist es allen Lösungen inhärent und der Kommentar sollte zur Frage gehen. - Trotzdem habe ich den Kommentar von gpojds und meine Situationsanalyse in die Antwort aufgenommen.
Angelo Fuchs