Benötige Hilfe bei der Berechtigung im Apache WebRoot

  • Hallo zusammen,


    ich benötige eure Hilfe bei der korrekten Berechtigung eines Verzeichnisses im Apache WebRoot.


    Ich möchte auf meinem Server ein kleines privates Soziales Netzwerk betreiben in dem Familie und Freunde Bilder, Videos usw. austauschen können.

    Die Seite ist nur mit Login erreichbar und es gibt keine offene Registrierung. Es kann nur per Einladung teilgenommen werden.

    Das Script ist in PHP geschrieben und habe ich über Envato/codecanyon gekauft.


    Ich habe dazu ein neues Verzeichnis in /var/www angelegt - > /var/www/mysite


    Die Berechtigung habe ich wie folgt gesetzt:

    /var/www/mysite -> owner: root group: www-data -> Berechtigung 750


    Alle Dateien und Unterordner haben ebenso "owner: root" und "group: www-data".

    Die Verzeichnisse sind mit 750 berechtigt, alle Dateien mit 640.


    Nun die erste Frage. Ist das soweit korrekt berechtigt?

    1. sollte ich den owner von root zu einem andren User ändern? Ich bin der einzige, der den User administriert.

    2. ist es problematisch meinen User mit in die www-data Gruppe aufzunehmen, damit ich in den Verzeichnissen lesen kann?



    Nun kommen wir zum 2. Punkt.

    Da die User natürlich auch Bilder und Videos hochladen sollen, gibt es einen Ordner uploads (in /var/www/mysite/uploads).

    Darunter befinden sich dann die Ordner für Bilder, Videos, Sounds usw.

    Hier können die User im Moment nichts hochladen, da die Berechtigung wie oben beschrieben gilt und somit www-data nicht schreiben darf.


    Die Frage lautet nun, wie vergebe ich hier die Berechtigung korrekt, dass www-data schreiben darf aber die Sicherheit nicht leider.

    Ich hätte jetzt für jeden Unterordner unter "uploads" (also Bilder, Videos, Sounds) mit der Berechtigung 770 ausgestattet. Damit darf auch www-data in diese Verzeichnisse schreiben.


    Nun klappt auch das hochladen von Bildern usw. über die Webseite. Allerdings werden dann Unterordner angelegt

    /var/www/mysite/uploads

    ---- Bilder

    ---- 2018

    ----- 02


    Diese Verzeichnisse werden vom Webserver angelegt und haben dann folgende Berechtigung:

    Verzeichnisse: www-data:www-data (anstatt root:www-data) mit 755 Berechtigung

    Dateien: www-data:www-data (anstatt root:www-data) mit 644 Berechtigung


    Ist das in Ordnung? Wie würde ich es hinbekommen, dass neue Unterordner und DAteien auch mit root:www-data und den Berechtigungen 750 (Verzeichnisse) und 640 (Dateien) angelegt werden?


    Ich hatte schon mit setfacl und getfacl gearbeitet und versucht mit umask die Berechtigung für neue Ordner und Dateien zu realisieren. Bin aber leider gescheitert.

    Für Hilfe wäre ich sehr dankbar.

    Gruß

    Steffen

  • Hallo, du musst auf jeden Fall unterscheiden zwischen dem Benutzern, die sich auf deiner Seite anmelden können und dem Benutzer, unter dem Apache ausgeführt wird. Das eine hat mit dem anderen nichts zu tun! Normalerweise wird der Owner für deine auszuliefernden Dokumente, sprich die PHP Dateien deines Portals, also alles im WebRoot auf www-user:www-user gesetzt. www-user ist der Systembenutzer zur Ausführung von Apache und muss die PHP Dateien lesen und z. B. in Uploadverzeichnisse schreiben können, kein anderer Nutzer! Wenn nur DU Zugriff auf den Server hast, ist die Vergabe der Lese und Schreibrechte auch eher nebensächlich, solange der www-user alle Dateien nur lesen kann und Schreibzugriff nur auf die Ordner/Dateien besteht, wo er dies auch soll. Ein Postfix user z. B. hat in dem Falle ja dann sowieso keine Rechte irgendwas dort zu lesen oder zu schreiben, solange der chmod für other auf 0 gesetzt wird.


    Natürlich kann es auch sein, dass deine Portalbenutzer auf Systemaccounts basieren (und nicht z. B. in einer Datenbank bestehen). Dann fügst du sie der Gruppe www-user hinzu und gibst der Gruppe Schreibrechte auf den Upload Ordner, das sollte dann auch schon alles gewesen sein.

  • Danke Oliver,


    also ich rede hier von Usern die nicht auf den Server Zugriff haben.Es geht hier nur um User die sich auf der Webseite anmelden können und in einer Mariadb angelegt werden.

    Ich habe jetzt schon mehrere Seiten gelesen und überall wird etwas anderes erzählt. Mein letzter Stand war jetzt, dass es aus Sicht der Sicherheit am besten ist den Owner nicht als www-data laufen zu lassen und nur die Gruppe als www-data zu setzen. Oder ich habe das komplett falsch verstanden.


    Wenn ich dich richtig verstehe ist die grundsätzliche Berechitung von Ordnern 750 und Dateien 640 aber soweit erstmal richtig.

    Dann wäre jetzt die Frage ob man das mit www-data:www-data laufen läßt.

    Verstehe ich das richtig?


    Meinst du mit www-user den auch www-data? Oder ist www-user eine manuell erstelle Gruppe/User?

    Ich nutze Ubuntu und hier ist die Apache Systemgruppe/User www-data

  • Wenn du das unter einem eigenen Benutzer laufen lassen möchtest, brauchst du suexec/php-fpm. Damit kann man jedes Web (als vHost ) unter einem eigenen Benutzer laufen lassen. Netz paar hat mit den Froxlor Images ein einigermaßen brauchbares System, womit man so etwas verwalten kann. Du kannst auch alles von Hand aufsetzen.

    Egal aber was du mit deinem Root machst, denke immer daran, dass der Admin im Zweifelsfall Stress kriegen kann, wenn der Server missbraucht wird.

  • Normalerweise wird der Owner für deine auszuliefernden Dokumente, sprich die PHP Dateien deines Portals, also alles im WebRoot auf www-user:www-user gesetzt.

    solange der www-user alle Dateien nur lesen kann und Schreibzugriff nur auf die Ordner/Dateien besteht, wo er dies auch soll

    Das verstehe ich dann aber nicht - einmal sagst du, dass im WebRoot alles auf www-user:www-user gesetzt wird.

    Das würde ja bedeuten das www-user auf alle Dateien auch schreibrehcte hat (wenn man diese auf 640 setzt).

    Das aber soll ja dann laut deiner eigenen Aussage aber nur auf Dateien passieren, wo das auch passieren soll.


    Irgendwie stehe ich noch auf dem Schlauch :(

  • Alles klar, wenn die Nutzer alle aus der MariaDB kommen, spielen die für dein "Problem" keine Rolle.

    Den einzigen Benutzer, den du betrachten musst, ist der Systemnutzer www-data (ja war ein Gedankenfehler meinerseits mit dem www-user, ich meinte www-data ;) ), unter dem der Apache ausgeführt wird.

    Um das ganze noch etwas zu klarifizieren:

    www-data muss Dateien lesen können (4), Verzeichnisse öffnen können (5), ins Upload-Dir schreiben können (7), jeder andere Nutzer soll keine Rechte haben (0).

    Du hast 2 Möglichkeiten:


    1. chown root:www-data

    Dann einfach 750 für Verzeichnisse und 640 für Dateien


    2. chown www-data:www-data

    Dann einfach 550 für Verzeichnisse und 440 für Dateien


    Ich finde die 2. Variante übersichtlicher beim Filelisting, Schreibzugriff auf die Dateien hast du als root ja sowieso.

  • Möglichkeit 3: Die Ordnerrechte (755) und Dateirechte (644) nicht anrühren, alles auf root:www-data chown'en und nur den obersten Ordner der Webverzeichnisse (z.B. /var/www) auf 750 chmod'en, damit niemand sonst rein kann. Warum sollte man für jeden Ordner und jede Datei andauernd etwas an den Standardrechten ändern, wenn es auch deutlich einfacher geht? ;)


    Wo der Webserver Schreibzugriff braucht, erweitert man die Ordner-/Dateirechte oder setzt den Besitzer auf www-data. Das würde ich übersichtlich finden… :)

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Danke euch! Das hilft mir schon sehr weiter.

    Wie es scheint gibt es hier einfach viele Wege die nach Rom führen :)


    Da ich auf dem Server auch schon eine Nextcloud Instanz laufen haben, würde ich jetzt ungern die ganze Struktur ändern.

    Daher würde ich wohl Lösung 1 bevorzugen. So wie ich euch verstehe sind alle 3 Lösungen "sicher" - nur eben etwas anders aufgebaut.


    Die Berechtigungen machen dann ja auch erst Sinn bzw. schützen den Server, wenn jemand über eine Sicherheitslücke oder Fehler im Script Zugriff auf meinen Server erhält. Dann könnte er bei einer Berechtigung, z.B. von 770, auch Daten schreiben, da er dann als www-data Schreibzugriff hat. Das verstehe ich doch richtig, oder?


    Die Grundsätzliche Frage hat sich somit geklärt. Nun habe ich eine Frage dich sich dem anschließt. Vielleicht könnt ihr mir hier auch noch einen Denkanstoß geben.

    Die User laden Daten in das Verzeichnis "Upload" hoch. Das heißt der www-data muss hier Schreibrechte haben.

    Ich habe somit root:www-data auf den Ordner Upload 770 Rechte gegeben. User können nun Daten hochladen.

    Die Ordner und Dateien die erstellt werden erhalten automatisch die Berechtigung www-data:www-data mit 755 für Ordner und 644 für Dateien. Das wäre dann ja soweit in Ordnung, oder?