debian apache Verwirrung

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

debian apache Verwirrung

ternaryd
Hallo,

>> Ich mache gerade ein paar Experimente mit
>> Apache und CGI (in C). Da das noch nicht so
>> tut, wie ich das vorgestellt hatte und ich
>> noch nicht verstehe, was ich falsch mache,
>> wollte ich mit fprintf() Meldungen in eine
>> Datei unter /tmp/ schreiben.

>> Da ich einen gültigen FILE Zeiger zurück
>> bekomme, gehe ich davon aus, daß die Datei
>> tatsächlich erzeugt wird. Wie kann ich nun
>> diese Datei finden?

> Der Apache2 unter Debian 9 verwendet den
> PrivateTmp Mechanismus von Systemd.
> Vgl. /lib/systemd/system/apache2 und darin den
> Eintrag PrivateTmp=true, falls vorhanden.

Wow. Es gibt tatsächlich einen Mechanismus, der
fopen ("/tmp/mytest.log", "a"); in ein nicht
auffindbares Verzeichnis verschiebt?! In den
Dateien

  /lib/systemd/system/apache2@.service
  /lib/systemd/system/apache2.service

existiert dieses PrivateTmp.

> Das bedeutet, dass das /tmp Verzeichnis des
> Apachen und seiner Unterprozesse, zu denen
> auch ein CGI Skript gehört, irgendwo
> unter /var/tmp/systemd-private* zu finden ist.

Das war's. Ich muß ein eigenes dir verwenden,
dann geht es wieder. Ich habe systemd nie
verstanden und werde es auch nie verstehen. Und
mit dem UUID, oder was das ist, ist es
unmöglich in meinem Programm meine Datei wieder
zu finden. systemd verbietet also /tmp zu
verwenden. Dann darf ich wohl nicht vergessen,
die temporären Dateien manuell wieder zu
löschen.

Besonders seltsam finde ich, daß der
verschobene Dateiname nicht unter /proc
erscheint.

Naja, Windows verstehe ich ja auch nicht...


Vielen Dank

Reply | Threaded
Open this post in threaded view
|

Re: debian apache Verwirrung

Jochen Spieker
ternaryd:
>
> Wow. Es gibt tatsächlich einen Mechanismus, der
> fopen ("/tmp/mytest.log", "a"); in ein nicht
> auffindbares Verzeichnis verschiebt?! In den
> Dateien

Da wird nichts verschoben, der Prozess kriegt einfach seine eigene
Version des Dateisystems (Stichwort "filesystem namespace"). Das ist ein
von systemd grundsätzlich unabhängiges Feature von Linux. Systemd bietet
nur an, dass "man" (in diesem Fall: ein Maintainer) es für Dienste
konfigurieren kann.

Wenn Dir die Entscheidung des Maintainers nicht gefällt, kannst Du das
auch überschreiben ("override"). Das ist eine der schönen Seiten von
systemd.

> Das war's. Ich muß ein eigenes dir verwenden,
> dann geht es wieder. Ich habe systemd nie
> verstanden und werde es auch nie verstehen.

Man muss sicher nicht alles gut finden, was systemd macht, aber es hat
schon einige sinnvolle Features. Und wenn man sich damit beschäftigt,
kann man es in vielen Fällen auch dazu bringen, sich so zu verhalten,
wie man das will (s.o.)

> Und
> mit dem UUID, oder was das ist, ist es
> unmöglich in meinem Programm meine Datei wieder
> zu finden.

?

> systemd verbietet also /tmp zu verwenden.

Das ist falsch.

> Dann darf ich wohl nicht vergessen,
> die temporären Dateien manuell wieder zu
> löschen.

Die im PrivateTmp würde systemd für Dich löschen.

> Besonders seltsam finde ich, daß der
> verschobene Dateiname nicht unter /proc
> erscheint.

Du suchst /proc/$PID/ns. Siehe namespaces(7).

> Naja, Windows verstehe ich ja auch nicht...

¯\_(ツ)_/¯

J.
--
My memories gild my life with rare transcendance.
[Agree]   [Disagree]
                 <http://archive.slowlydownward.com/NODATA/data_enter2.html>

signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: debian apache Verwirrung

ternaryd
On Tue, 30 Apr 2019 20:49:35 +0200
Jochen Spieker <[hidden email]> wrote:

> Da wird nichts verschoben, der Prozess kriegt
> einfach seine eigene Version des Dateisystems
> (Stichwort "filesystem namespace"). Das ist
> ein von systemd grundsätzlich unabhängiges
> Feature von Linux.

Relativ neues feature, denn davon hatte ich
noch nichts gehört (und kann die Nützlichkeit
nicht so richtig sehen). Aber so lange ich rund
herum arbeiten kann (dank Herrn Weigert kann
ich das nun), soll es mir auch egal sein.

> Wenn Dir die Entscheidung des Maintainers
> nicht gefällt, kannst Du das auch
> überschreiben ("override").

Ist nicht mein Thema, so misch ich mich nicht
ein. Ist halt unbequem, wenn man 20 Jahre
etwas macht und dann sieht, wie der Boden unter
den Füßen verschwindet. Ich vermisse halt die
Stabilität der grundlegenden Sachen. MS
everywhere.

> Man muss sicher nicht alles gut finden, was
> systemd macht,

Ich prügle kein totes Pferd. Außerdem würde ich
eine Diskussion über die Entwicklung von Linux
an einer anderen Ecke beginnen (wäre sie nicht
so aussichtslos).

>> Und mit dem UUID,
>> oder was das ist, ist es unmöglich in
> meinem Programm meine Datei wieder zu
>> finden.

> ?

Ich schreibe

     fopen ("/tmp/mytest.log", "w");

Die Datei wird dann unter
/var/tmp/systemd-private-c197dfbbd58040fdbc06da99d4f74dfe-apache2.service-C7QbVC/tmp/mytest.log
erzeugt. Wenn ich in einem mein CGI
überwachenden Prozess (der nicht von apache
gestartet wird) lesen will, was da ausgegeben
wurde, schreibe ich

    fopen (XYZ, "r");

wobei XYZ was genau ist?

Das heißt, ich kann eine von mir
geschriebene Datei nicht mehr lesen.

>> systemd verbietet also /tmp zu verwenden.

> Das ist falsch.

Das ist nur Semantik. Verbieten und unmöglich
oder extrem aufwendig machen kommt sich auf das
Gleiche heraus. Aber ohne die Konfiguration von
Apache zu ändern wüßte ich nicht, wie ich
trotzdem unter /tmp (das echte, meine ich),
eine Datei schreiben oder lesen könnte.
Vielleicht über einen symlink. Juckt mich auch
nicht (mehr).

> Die im PrivateTmp würde systemd für Dich
> löschen.

Bin mir nicht sicher wann. Ich habe eben im
obigen Verzeichnis nachgesehen. Da ist noch
eine Datei von vorgestern drin. Das CGI lebt
ein paar Millisekunden. Vielleicht so wie /tmp
wenn ich ein reboot mache? Das passiert selten,
aber von Zeit zu Zeit säubere ich /tmp manuell.
Ist ja nur ein dir...

Reply | Threaded
Open this post in threaded view
|

Re: debian apache Verwirrung

Harald Weidner
Hallo,

> > Da wird nichts verschoben, der Prozess kriegt
> > einfach seine eigene Version des Dateisystems
> > (Stichwort "filesystem namespace"). Das ist
> > ein von systemd grundsätzlich unabhängiges
> > Feature von Linux.
>
> Relativ neues feature, denn davon hatte ich
> noch nichts gehört (und kann die Nützlichkeit
> nicht so richtig sehen).

Der Sinn des PrivateTmp Mechanismus ist, Symlink-Angriffe
zu vermeiden. Viele CGI-Skripte sind dafür anfällig, daher
ist das prinzipiell eine gute Sache.

https://de.wikipedia.org/wiki/Symlink-Schwachstelle

Wenn man tatsächlich Dateien zwischen einem CGI-Programm und
einem außerhalb des Apache laufenden Programmes austauschen
möchte, sollte man dafür ein eigenes Verzeichnis erstellen
und nicht /tmp verwenden, wo jeder schreiben kann.

Die Dokumentation von Systemd finde ich allerdings suboptimal.

Gruß, Harald

Reply | Threaded
Open this post in threaded view
|

Re: debian apache Verwirrung

ternaryd
On Wed, 1 May 2019 10:57:24 +0200
Harald Weidner <[hidden email]> wrote:

> Der Sinn des PrivateTmp Mechanismus ist,
> Symlink-Angriffe zu vermeiden. Viele
> CGI-Skripte sind dafür anfällig, daher ist
> das prinzipiell eine gute Sache.

Der Idee kann ich natürlich zustimmen. Da ich
aber spontan an Symlinks gedacht habe, um darum
herum zu kommen, ist hat die Ausführung
vielleicht doch noch Luft nach oben.

> Wenn man tatsächlich Dateien zwischen einem
> CGI-Programm und einem außerhalb des Apache
> laufenden Programmes austauschen möchte,
> sollte man dafür ein eigenes Verzeichnis
> erstellen und nicht /tmp verwenden, wo jeder
> schreiben kann.

Ich kann zustimmen, daß mit /tmp Mißbrauch
gemacht wird. Denn dies ist eben temporär und
nicht für langlaufende Prozesse gedacht. Und
die überlangen Namen, wenn man schnell etwas
kurzfristig auf /tmp abgelegtes in der shell
sucht, sind ein guter Hinweis darauf. Es soll
noch Linux User geben, die nicht Gnome/Kde et
al., sondern die Shell verwenden.

Die Autoren der Lösung sollten sich jedoch
überlegen, ob sie die Lösung wirklich erreicht
haben, und ob das erzeugte Ärgernis tatsächlich
mit den Vorteilen aufgewogen werden kann.

> Die Dokumentation von Systemd finde ich
> allerdings suboptimal.

Ich versuche systemd so gut als möglich zu
ignorieren, denn bislang hat es mir nur Gram
verursacht. Und dieser beginnt definitiv beim
Versuch, aus der Dokumentation schlau zu
werden.

> Gruß, Harald

Vielen Dank, deine Antwort hat tatsächlich
weiter geholfen.

Reply | Threaded
Open this post in threaded view
|

Re: debian apache Verwirrung

Jochen Spieker
In reply to this post by ternaryd
ternaryd:

> On Tue, 30 Apr 2019 20:49:35 +0200
> Jochen Spieker <[hidden email]> wrote:
>
>> Da wird nichts verschoben, der Prozess kriegt
>> einfach seine eigene Version des Dateisystems
>> (Stichwort "filesystem namespace"). Das ist
>> ein von systemd grundsätzlich unabhängiges
>> Feature von Linux.
>
> Relativ neues feature,
*hust*

Laut Wikipedia fing die Arbeit an Namespaces, insbesondere für Mounts,
schon in 2.4 im Jahre 2002 an. :) Aber ja, richtig prominent benutzt
wird das nach meinem Eindruck erst so seit vielleicht fünf Jahren. Ist
allerdings auch schon eine recht lange Zeit.

>> Wenn Dir die Entscheidung des Maintainers
>> nicht gefällt, kannst Du das auch
>> überschreiben ("override").
>
> Ist nicht mein Thema, so misch ich mich nicht
> ein.

Du sollst Dich nicht einmischen, Du sollst Dein System mit den
vorhandenen Mitteln administrieren, anstatt hier uninformiert über
systemd zu lästern. :)

>> Man muss sicher nicht alles gut finden, was
>> systemd macht,
>
> Ich prügle kein totes Pferd.

:)

>>> Und mit dem UUID,
>>> oder was das ist, ist es unmöglich in
>>> meinem Programm meine Datei wieder zu
>>> finden.
>
>> ?
>
> Ich schreibe
>
>      fopen ("/tmp/mytest.log", "w");
>
> Die Datei wird dann unter
> /var/tmp/systemd-private-c197dfbbd58040fdbc06da99d4f74dfe-apache2.service-C7QbVC/tmp/mytest.log
> erzeugt.
Jein. Aus Sicht des erzeugenden Prozesses (wo Du fopen machst) ist der
Pfad /tmp/. Von außerhalb liegt es woanders, richtig. Wenn Du von
verschiedenen Prozessen auf diese Dateien zugreifen willst, dann nimmt
man kein PrivateTmp.

Das alles wusste ich bis gestern übrigens auch nicht, lässt sich aber
wunderbar googeln / in der Doku nachlesen:

| PrivateTmp=
|
| Takes a boolean argument. If true, sets up a new file system namespace
| for the executed processes and mounts private /tmp and /var/tmp
| directories inside it that is not shared by processes outside of the
| namespace. This is useful to secure access to temporary files of the
| process, but makes sharing between processes via /tmp or /var/tmp
| impossible. If this is enabled, all temporary files created by a service
| in these directories will be removed after the service is stopped.
| Defaults to false.

>>> systemd verbietet also /tmp zu verwenden.
>
>> Das ist falsch.
>
> Das ist nur Semantik.

Naja, Aussagen über den Wahrheitsgehalt einer Behauptung sind immer
"Semantik", oder nicht?

Korrekt ist: systemd erlaubt es, einen Dienst so zu konfigurieren, dass
von diesem Dienst in /tmp/ geschriebene Dateien außerhalb der
Prozessgruppe dieses Dienstes nicht sichtbar sind. Das ist ein Feature.
Und kein Bug, denn es ist abschaltbar. Insbesondere durch den lokalen
Admin, auch wenn die Distribution es anders ausliefert.

Das ist doch cool, man muss es nur lernen. Wir machen doch hier IT, da
kann man sich nicht darauf verlassen, dass solches Detailwissen länger
als 5-10 Jahre hält.

> Verbieten und unmöglich oder extrem aufwendig machen kommt sich auf
> das Gleiche heraus.

Beides ist ja nicht der Fall.

> Aber ohne die Konfiguration von
> Apache zu ändern wüßte ich nicht, wie ich
> trotzdem unter /tmp (das echte, meine ich),
> eine Datei schreiben oder lesen könnte.

Du brauchst nur "systemctl edit apache2.service" aufrufen und im Editor
das hier pasten:

[Service]
PrivateTmp=false

Dann noch

systemctl daemon-reload
systemctl restart apache2.service

>> Die im PrivateTmp würde systemd für Dich
>> löschen.
>
> Bin mir nicht sicher wann.

Doku, siehe oben.

J.
--
I worry about people thinking I have lost direction.
[Agree]   [Disagree]
                 <http://archive.slowlydownward.com/NODATA/data_enter2.html>

signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: debian apache Verwirrung

ternaryd
On Wed, 1 May 2019 20:07:38 +0200
Jochen Spieker <[hidden email]> wrote:

>> Relativ neues feature,
>
> *hust*
>
> Laut Wikipedia fing die Arbeit

Kinder, wie die Zeit vergeht!

In meinem vorigen Post habe ich doch gesagt,
daß das Problem behoben ist und mich dafür
herzlich bedankt. Auch habe ich geschrieben,
daß ich mich in nirgendwo hin führende Debatten
nicht einmische.

peace and out.