Results 1 to 5 of 5

Wie Rechte für Verzeichnis auf lokalem Linux Server richtig setzten?

  1. #1 Reply With Quote
    Veteran Feuerstern's Avatar
    Join Date
    Sep 2007
    Posts
    669
    Hallo zusammen,
    ich habe mir in Virtualbox ein Ubuntu System eingerichtet und xampp installiert um lokal eine Testumgebung für mein Webprojekt einzurichten.
    Das hat auch soweit erstmal alles geklappt. PHP funktioniert, ich kann Daten per FTP auf den Testserver laden und Datenbanken etc einrichten.
    Dann habe ich MyOssDumper per FTP auf das Lokale System geladen, um später mein Datenbank Backup einzuspielen und bekam beim Installationsprozess die Meldung, dass die Rechte nicht ausreichen würden und ich dem Verzeichniss über FTP die Rechte 0777 geben soll. Das funktionierte allerdings nicht, Filezille meldet "Permission denied".
    Was hingegen funktioniert hat:
    sudo chmod -R 777 /opt/lampp/htdocs/myossdumper/
    Ich habe schon öfters gelesen das es eine schlechte Idee ist einem Verzeichnis einfach alle Rechte zu geben. Auf einer rein lokalen Testumgebung sollte das kein Problem sein denke ich, aber trotzdem Frage ich mich, was wäre der richtige Weg gewesen?
    Feuerstern is offline

  2. #2 Reply With Quote
    Tieftöner Lookbehind's Avatar
    Join Date
    Dec 2007
    Posts
    14,795
    Hallo Feuerstern,

    ich nehme an auf XAMPP bist du gekommen, weil du es als Test-Umgebung für deinen Windows-Rechner kennst? Ein vernünftiger Grund, warum man sich auf einem Ubuntu mit dieser Krücke abquälen sollte, fällt mir jedenfalls nicht ein. Apache, MySQL (oder vielleicht lieber MariaDB? MySQL is irgendwie so 90er) und PHP gibts ganz normal in der Ubuntu-Paketverwaltung. Und dann hast du einen richtigen LAMP-Stack. (UbuntuUsers-Wiki - LAMP)
    Aber das nur am Rande. Wenn es für dich funktioniert soll das für eine lokale Test-Umgebung sicher reichen.

    Jetzt kenn ich MyOssDumper nicht, google findet MyOosDumper, was sich wie ein PHP-Script zum sichern und wiederherstellen von Datenbanken liest. Ich benutze dafür eigentlich lieber die DatenBank-CLI selbst. Aber das ist vielleicht für den Anfang etwas abschreckend. Früher hab ich für sowas gerne phpMyAdmin genommen. Das hat den Vorteil, dass es nicht nur die Datenbank sichern und wiederherstellen kann, sondern auch ein hilfreiches WebFrontend bietet um einfach mal in die DB rein zu schauen. Das kann während der Entwicklung schon ganz praktisch sein.
    ... auch das nur so als Hinweis. Wir nähern uns deinem Rechte-Problem.

    Ich weiß nicht, was du konkret versucht hast, und wie du dabei genau vorgegangen bist. Aber vielleicht mal allgemein was zu Rechten auf Unixoiden Systemen:
    Code:
    $ mkdir /tmp/demo
    $ touch /tmp/demo/foo /tmp/demo/bar
    $ ls -lh /tmp/demo/
    insgesamt 0
    -rw-r--r-- 1 lookbehind lookbehind 0 10. Jan 00:12 bar
    -rw-r--r-- 1 lookbehind lookbehind 0 10. Jan 00:12 foo
    Hier sehen wir die beiden Dateien foo und bar im Verzeichnis /tmp/demo/. Schauen wir uns die angezeigten Informationen von rechts nach links einmal an. Ganz rechts ist der Dateiname, bar, bzw. foo. Dann kommt Uhrzeit und Datum wann die Datei erstellt wurde. In diesem Fall der 10. Januar um 00:12 Uhr. Dann folgt die Größe der Datei. Die ist hier 0, weil die Dateien leer sind. Dann kommt zweimal "lookbehind". Das ist einmal die Gruppe zu der die Datei gehört und der Besitzer (also links der Besitzer, rechts die Gruppe). Die heißen in diesem Beispiel blöderweise beide gleich (was aber nicht so ungewöhnlich ist), das macht zunächst mal die Unterscheidung etwas schwierig. Dann haben wir die Anzahl der HardLinks auf die Datei ... auch ein interessantes Thema, hat mit den Rechten aber nur wenig zu tun. Der Block ganz links, das sind dann die eigentlichen Rechte. Bevor wir uns die genauer anschauen, machen wir die Sache doch mal ein wenig interessanter.
    Code:
    $ chmod g+x /tmp/demo/foo 
    $ chmod o+w /tmp/demo/bar 
    $ sudo chown nobody /tmp/demo/foo 
    $ sudo chown :nogroup /tmp/demo/bar 
    $ ls -lh /tmp/demo/
    insgesamt 0
    -rw-r--rw- 1 lookbehind nogroup    0 10. Jan 00:12 bar
    -rw-r-xr-- 1 nobody     lookbehind 0 10. Jan 00:12 foo
    Ich habe bei foo den Besitzer gewechselt. Die Datei gehört nicht mehr mir, sondern nobody. Bei der Datei bar habe ich die Gruppe gewechselt. Sie gehört jetzt nicht mehr zur Gruppe "lookbehind" sondern "nogroup".
    Warum ist das wichtig? Wollten wir nicht über Rechte reden?
    Schauen wir uns mal die Rechte für foo an. Da steht was von -rw-r-xr--. Die Buchstaben haben dabei eine recht einfache Bedeutung: r steht für das Recht die Datei zu lesen (Read), w für das Recht ihren Inhalt zu verändern (Write) und x für das Recht die Datei als Programm aus zu führen (eXecute). Aber warum steht das mehrfach da?
    Der erste Schpiegelstrich ist eine kleine Besonderheit, der gehört eigentlich nicht zu den Berechtigungen (jedenfalls nicht auf der Ebene, die uns hier interessiert). Der wird z.B. zu einem d, wenn das keine Datei, sondern ein Verzeichnis ist.
    Aber danach haben wir genau 9 Stellen, und die lassen sich in 3 Gruppen zu 3 Stellen unterteilen. In dem Besipiel von foo sind das "rw-", "r-x" und "r--". Die gehören zu den jeweiligen Bezugsgruppen.
    Der erste Block, "rw-" gibt die Berechtigungen des Besitzers der Datei an. Der Besitzer von foo ist nobody und hat das Recht die Datei zu lesen und ihren Inhalt zu ändern, nicht aber sie aus zu führen (rw-).
    Der zweite Block gibt die Berechtigungen für alle an, die in der Gruppe lookbehind sind. Die User in der Gruppe dürfen den Inhalt der Datei lesen, und sie als Programm ausführen, sie aber nicht verändern.
    Der dritte Block gibt die Rechte für alle anderen an, die weder Besitzer der Datei sind, noch zur Gruppe lookbehind gehören. Die dürfen die Datei in diesem Fall nur lesen.
    Die Rechte sind hier mit Buchstaben dargestellt, lassen sich aber auch in einer oktalen Schreibweise mit Ziffern darstellen. Dabei bekommt das Lese-Recht den Wert 4, das Schreibrecht den Wert 2 und das Ausführungsrecht den Wert 1. Die lassen sich dann kombinieren. Hat also jemand das Recht eine Datei zu lesen (4) und zu schreiben (2), macht das in Summe eine 6. Und das kann man dann mit allen 3 Gruppen machen. Die Datei foo hat in diesem Beispiel also die Rechte 654. Quizfrage: Was macht dann chmod 777?

    Wie findet man jetzt die passenden Rechte? Wie wir gemerkt haben, ist sowas immer auch abhängig von Besitzer und Gruppe der Datei. In deinem Fall möchte MyOssDump (oder MyOosDump?) auf die Datei zugreifen.
    Dann ist die erste Frage: Als welcher Benutzer läuft dieser Prozess? Da das eine PHP-Anwendung zu sein scheint, sehr wahrscheinlich mit dem Benutzer des Webservers. Bei einem klassischen LAMP-Stack auf einem Ubuntu wäre das "www-data" (der Benutzer heißt so), ob das bei XAMPP auch so ist, weiß ich nicht.
    Die nächste Frage ist: Was möchte der Prozess mit der Datei machen? Lesen? Schreiben? Ausführen? Eine Kombination daraus? (Und will ich ihm das erlauben?)
    Dann schaut man sich an, wem die Datei gehört, und zu welcher Gruppe die Datei gehört, und gegebenenfalls auch in welchen Gruppen der Benutzer ist, der darauf zugreifen soll.
    Jetzt kann man versuchen einen Schnittpunkt zu finden, oder zu erstellen. Manchmal ist es einfacher, den Benutzer in eine Gruppe mit auf zu nehmen, um ihm die Zugriffsrechte zu gewähren, oder einfach den Besitzer der Datei zu ändern, als die eigentlichen Rechte an zu passen.

    Beliebter Fehler bei Webseiten, die über FTP bespielt werden. Der Webserver läuft als www-data, dieser ist in der Gruppe www-data (Benutzer und Gruppe heißen gleich) und nur in der. Der eigene FTP-Benutzer heißt feuerstern und ist in der Gruppe feuerstern. Man will jetzt Bilder hoch laden. Die haben nach dem hochladen den Benutzer "feuerstern" und die Gruppe "feuerstern" und die Rechte 640. Jetzt soll der Webserver die Bilder darstellen. Das klappt aber nicht, weil der Webserver die Dateien nicht lesen darf.
    Die Lösung, die man dann häufig ergoogelt ist "chmod 777" ... also alle dürfen alles. Dabei ist das doch gar nicht nötig. Lesen für den Web-Server würde doch genügen.
    Die schnellste Möglichkeit wäre, die Rechte auf 644 zu setzen. Dann dürfen alle die Datei lesen, also auch der Webserver und er kann die Datei anzeigen. Da sie über den Webserver eh öffentlich im Netz steht, ist es auch egal, wenn andere User auf dem System die Datei auch lesen können.
    Noch eleganter ist, nicht die Rechte der Datei zu ändern, sondern sie der Gruppe www-data zu zu ordnen. Der Besitzer kann ja feuerstern bleiben. Zusammen mit den Rechten 640 heißt das, du selbst kannst die Datei lesen und bearbeiten, der Webserver kann sie darstellen, und alle anderen gucken in die Röhre.
    Alternativ kann man auch den Nutzer "www-data" in die Gruppe "feuerstern" mit aufnehmen. Dann muss man an der Datei gar nichts ändern.

    So, und jetzt bin ich mal gespannt, ob man mein wirres Geschwafel überhaupt versteht, und ob foobar das nicht in der Zwischenzeit viel eleganter erklärt hat.

    Edith meint, foobar wäre nicht schneller gewesen als ich, aber ich könnte doch mal auf die UbuntUsers-Artikel zu den Themen Rechte und Benutzer und Gruppen hinweisen ... und das ich mir das ganze Geschripsel hätte sparen können, wenn ich das gleich getan hätte.
    Lookbehind is offline Last edited by Lookbehind; 10.01.2021 at 01:09.

  3. #3 Reply With Quote
    Veteran Feuerstern's Avatar
    Join Date
    Sep 2007
    Posts
    669
    Hallo Lookbehind,
    vielen Dank für deine ausführliche Antwort.

    Quote Originally Posted by Lookbehind View Post
    ich nehme an auf XAMPP bist du gekommen, weil du es als Test-Umgebung für deinen Windows-Rechner kennst? Ein vernünftiger Grund, warum man sich auf einem Ubuntu mit dieser Krücke abquälen sollte, fällt mir jedenfalls nicht ein. Apache, MySQL (oder vielleicht lieber MariaDB? MySQL is irgendwie so 90er) und PHP gibts ganz normal in der Ubuntu-Paketverwaltung. Und dann hast du einen richtigen LAMP-Stack. (UbuntuUsers-Wiki - LAMP)
    Mein Host System ist auch Ubuntu. Xampp hatte ich verwendet, da ich gelesen habe, dass es wohl relativ einfach sein soll damit mehrere verschiedene PHP Versionen gleichzeitig zu verwenden. Mittelfristig werde ich mich aber daran machen einen richtigen LAMP-Stack einzurichten. Ich kann mir vorstellen, dass der Lerneffeckt dabei noch ein ganzes Stück größer ist. Xampp scheint mir etwas "komisch" vor konfiguriert zu sein.


    Deine Erklärungen waren sehr hilfreich. Und ich habe mal etwas rumprobiert.
    Nachdem ich die Rechte von htdocs testweise auf 777 gesetzt hatte, sah das Verzeichnis so aus:
    drwxrwxrwx 23 feuerstern feuerstern 4096 Jan 10 18:01 htdocs

    Ich habe dann mal die Rechte des htdocs Verzeichniss auf 770 gesetzt und bekam dann beim Aufruf im Browser Erwartungsgemäß die Meldung das der Zugriff verweigert wurde.
    Daraufhin habe ich den Benutzer www-data in die Gruppe feuerstern hinzugefügt über:
    sudo usermod -aG feuerstern www-data
    danach war die Seite aber noch immer nicht aufrufbar. Ich denke das liegt daran das unter xampp apache usw garnicht mit dem www-data Benutzer ausgeführt wird, denn in der Prozessliste mit top -b gab es nur folgende Benutzer:
    Code:
    feuerstern
    root
    systemd+
    avahi
    message+
    syslog
    colord
    whoopsie
    kernoops
    mysql
    daemom
    xampp selbst wird mit dem Befehl "sudo /opt/lampp/lampp start" gestartet. Kann es sein, dass PHP, apache etc über denn root Benutzer laufen?
    Wenn das der Fall wäre, müsste die Seite dann nicht auch mit den Rechten 700 aufrufbar sein, da root alles darf?
    Feuerstern is offline

  4. #4 Reply With Quote
    Tieftöner Lookbehind's Avatar
    Join Date
    Dec 2007
    Posts
    14,795
    Quote Originally Posted by Feuerstern View Post
    ...
    Mein Host System ist auch Ubuntu. Xampp hatte ich verwendet, da ich gelesen habe, dass es wohl relativ einfach sein soll damit mehrere verschiedene PHP Versionen gleichzeitig zu verwenden.
    Das war vor 15 Jahren bestimmt auch mal richtig. Heute gibts Docker.

    Quote Originally Posted by Feuerstern View Post
    Mittelfristig werde ich mich aber daran machen einen richtigen LAMP-Stack einzurichten. Ich kann mir vorstellen, dass der Lerneffeckt dabei noch ein ganzes Stück größer ist. Xampp scheint mir etwas "komisch" vor konfiguriert zu sein.
    Ja XAMPP ist darauf ausgelegt Webentwicklern, die keine Ahnung von der Technik haben, eine einfache und schnelle Möglichkeit zum Hosten eines Webservers zu geben. Vor allem auf Systemen, die das nicht mit 3-4 Befehlen selbst können (aka Windows). Entsprechend ist die Konfiguration oft etwas anders, als man sie in einer Produktivumgebung findet.

    An dieser Stelle übrigens auch der Hinweis, dass XAMPP ab Werk nicht besonders sicher konfiguriert ist. (Jedenfalls war das vor 10 Jahren so, als ich das letzte mal eins vor der Nase hatte.)

    Quote Originally Posted by Feuerstern View Post
    Deine Erklärungen waren sehr hilfreich. Und ich habe mal etwas rumprobiert.
    Nachdem ich die Rechte von htdocs testweise auf 777 gesetzt hatte, sah das Verzeichnis so aus:
    drwxrwxrwx 23 feuerstern feuerstern 4096 Jan 10 18:01 htdocs

    Ich habe dann mal die Rechte des htdocs Verzeichniss auf 770 gesetzt und bekam dann beim Aufruf im Browser Erwartungsgemäß die Meldung das der Zugriff verweigert wurde.
    Daraufhin habe ich den Benutzer www-data in die Gruppe feuerstern hinzugefügt über:
    sudo usermod -aG feuerstern www-data
    danach war die Seite aber noch immer nicht aufrufbar. Ich denke das liegt daran das unter xampp apache usw garnicht mit dem www-data Benutzer ausgeführt wird,
    Das ist naheliegend, ja. Allerdings weiß ich auch nicht, als welcher User es standardmäßig ausgeführt wird. Aber wenn die sich einigermaßen an die Standards halten, müsst irgendwo in /opt/lampp/etc/, oder einem der Unterverzeichnisse eine httpd.conf, oder apache.conf oder sowas liegen. Die könnte man sich mal anschauen, vielleicht gibts da einen Hinweis auf den verwendeten User.

    Quote Originally Posted by Feuerstern View Post
    ...
    xampp selbst wird mit dem Befehl "sudo /opt/lampp/lampp start" gestartet. Kann es sein, dass PHP, apache etc über denn root Benutzer laufen?
    Unwahrscheinlich. Für so unfähig halte ich die Entwickler von XAMPP nicht, die dürften wissen, dass das ein No-Go ist. Du startest das zwar mit sudo, also mit root rechten, aber der wird wahrscheinlich sehr bald einen Privilege-Drop machen und den User wechseln. Nur weiß ich eben nicht wo hin. www-data ist der Standard-User für Apache auf Ubuntu, aber da XAMPP nicht nur für Ubuntu gemacht ist, müssen die sich nicht daran halten.

    Quote Originally Posted by Feuerstern View Post
    Wenn das der Fall wäre, müsste die Seite dann nicht auch mit den Rechten 700 aufrufbar sein, da root alles darf?
    Richtig. Für root müsste es sogar mit 000 gehen
    Lookbehind is offline

  5. #5 Reply With Quote
    Serima Fisk2033's Avatar
    Join Date
    Dec 2010
    Location
    Dresden
    Posts
    5,637
    Quote Originally Posted by Lookbehind View Post
    Das war vor 15 Jahren bestimmt auch mal richtig. Heute gibts Docker.
    Du hast lxc falsch geschrieben.

    Ansonsten kann ich dem Look wie immer nur zustimmen.
    Fisk2033 is online now

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •