Dienstag, 19. September 2017

Apache /tmp Ordnerzugriff unter Debian Stretch (Systemd Service Override)

Nach dem Upgrade von Debian Jessie auf Stretch funktionierte plötzkich eine Webanwendung nicht mehr, die sich eine SQLite-Datenbank mit anderen Prozessen im /tmp-Verzeichnis teilt.

PHP gab mir immer nur den nichtsagenden Fehler (conferences lautet der Tabellename, auf den zugegriffen werden soll):

no such table "conferences"


Offensichtlich konnte ich neue Tabellen anlegen und in die Datenbank schreiben, nur in der /tmp/sqlite.db kam nichts an.
Also habe ich mich mit
find / -name sqlite.db

auf die Suche begeben und plötzlich gab es die Datenbank gleich doppelt:
/tmp/systemd-private-a0...df3-apache2.service-U..R/sqlite.db
/tmp/sqlite.db

Systemd legt in Debian Stretch private /tmp Verzeichnisse für jeden gestarteten Prozess an. Dies ist der Sicherheit dienlich, aber wenn man /tmp als Austauschlaufwerk verwendet, ist es eher hinderlich.

Daher habe ich eine Override Konfiguration für den Apache Dienst (apache2.service) erstellt:
mkdir /etc/systemd/system/apache2.service.d/
nano /etc/systemd/system/apache2.service.d/noPrivateTmp.conf

Mit folgendem Inhalt:
[Service]
PrivateTmp=false

Anschließend kann der Webserver neu gestartet werden
systemctl daemon-reload
systemctl restart apache2

und alles funktioniert wie zuvor.