Docker - Apache - Fehlende Schreibrechte innerhalb /var/www/html

  • Runde 2!

    Nachdem ich bereits einen debian:bookworm Container mit nachinstallierten Apache Webserver inkl. CLI Shell Script Unterstützung erfolgreich zum laufen gebracht habe (siehe auch diesen Thread), gerate ich bei meinem nächsten Schritt auch schon wieder ins Stocken. Leider konnten mir einschlägige Suchmaschinen bisher nicht dabei helfen, eine Lösung zu erarbeiten. Daher hoffe ich, das mir jemand von euch weiterhelfen kann oder mir zumindest den entscheidenden Tipp geben kann.

    Worum geht es. Nun, ich möchte gerne die Key/Value Werte aus den übergebenen GET- bzw. POST-REQUESTS auffangen und in einer Datei für die spätere Verwendung als Variable(n) zwischen speichern. Das Auslesen und Auswerten ist dabei weniger mein Problem, sondern das Anlegen einer Datei, geschweige denn, das spätere Abspeichern von Daten in diese Datei. Ich versuche also, über die index.cgi mittels Shell Befehlen eine neue Datei zu erstellen um diese mit Inhalten zu füllen. Da dies nicht funktioniert habe ich wohl ein Berechtigungsproblem, was ich aber nicht gelöst bekomme.

    Was ich bisher herausgefunden habe ist, das das Arbeitsverzeichnis /var/www/html des Apachen, worin sich neben meiner index.cgi noch weitere Dateien befinden, als root:root deklariert ist, der Apache selbst aber keine Root-Rechte besitzt. Ich habe im Internet den Hinweis gefunden, das man dieses Arbeitsverzeichnis einem anderen Benutzer sowie einer anderen Gruppe übertragen muss, damit sich darin schreiben lässt. Daher habe ich im Dockerfile u.a. das hier eingetragen…

    Code
    # Create a non-root user and group to run Apache with
    RUN groupadd -r apache && \
        useradd -r -g apache apache
    
    # Change ownership of directories that Apache needs to write to
    RUN chown -R apache:apache /var/www/html
    
    # Set permissions to cgi-shell-script content
    RUN chmod -R 755 /var/www/html
    RUN chmod -R 755 /var/www/html/*

    … wobei Namen zunächst nur Schall und Rauch sind. Im Ergebnis wird mir das Arbeitsverzeichnis /var/www/html rekursiv entsprechend umgebaut. Das funktioniert also schon mal. Trotzdem habe ich immer noch nicht das Recht, über die index.cgi eine neue Datei zu erstellen. Hat also jemand eine Idee, wie ich das hinbekommen könnte?

    Warum will ich das überhaupt haben? Nun, auf einem Synology NAS laufen meine Apps genau nach diesem Prinzip und unter dem DSM läuft ein System-Apache, der CGI Shell Scripte verarbeiten kann und worüber sich auch Dateien erstellen, ändern und wieder löschen lassen und genau das will ich in diesem Docker Container auch können dürfen.

    Ich möchte auch nochmal unterstrichen, das ich von der Webserver Konfiguration so gut wie keine Ahnung habe, sondern nur auf dem aufbauen kann, was mir der Webserver an Funktionen anbietet.

    Ich hoffe, ich konnte mein Problem bzw. meine Anforderung einigermaßen verständlich beschreiben und hoffe, das mir jemand helfen kann, dieses Rätsel zu enträtseln.

    Tommes

    FRITZ!Box 5590 Fiber | UniFi Express 7 | 2,5-GBit-LAN & Wi-Fi 7
    DXP2800 - 1TB Crucial P310 NVMe RAID1 - 2TB Crucial MX500 SSD RAID1 - 16 GB Crucial CT16G56C46S5 (5600Mhz)
    DS224+ 3TB WD Red HDD RAID1 18GB Ram | DS124 1TB Samsung 870 EVO SSD
    Linux Mint | Ubuntu-Server | Windows | iOS | iPadOS
    UGREEN.FORUM/Filebase | Synology-forum/Add-ons | GitHub.com/toafez

  • Moin!

    Nachdem ich mich gestern Abend aus lauter Verzweiflung in den Schlaf geweint habe, bin ich das Problem heute Morgen nochmal angegangen und siehe da... es läuft! Das Problem saß dabei mal wieder, wie sollte es anders sein, 50 cm vor dem Bildschirm und ich werde wohl eher im Boden versinken wollen, als euch zu erzählen, was genau ich falsch gemacht habe. Jedenfalls...

    Im Grunde genommen benötigt man die von mir im Eingangsbeitrag vorgenommenen Anpassungen, bis auf das Setzten der Ordner- und Dateirechte überhaupt nicht. Wichtig ist scheinbar nur, das die Dateien, in die man im späteren Verlauf schreiben möchte, bereits existieren und die Rechte 777 erhalten. Im Dockerfile würde das so aussehen...

    Code
    # Set permissions to cgi-shell-script content
    RUN chmod -R 755 /var/www/html; \
        chmod -R 755 /var/www/html/*; \
        chmod 777 /var/www/html/tmp/get_request; \
        chmod 777 /var/www/html/tmp/post_request

    Somit wurde ein weiteres Rätsel, enträtselt.

    Tommes

    FRITZ!Box 5590 Fiber | UniFi Express 7 | 2,5-GBit-LAN & Wi-Fi 7
    DXP2800 - 1TB Crucial P310 NVMe RAID1 - 2TB Crucial MX500 SSD RAID1 - 16 GB Crucial CT16G56C46S5 (5600Mhz)
    DS224+ 3TB WD Red HDD RAID1 18GB Ram | DS124 1TB Samsung 870 EVO SSD
    Linux Mint | Ubuntu-Server | Windows | iOS | iPadOS
    UGREEN.FORUM/Filebase | Synology-forum/Add-ons | GitHub.com/toafez

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!