Ergebnis 1 bis 12 von 12

Thema: Verzeichnisberechtigung auf Webserver mit mehreren Usern

  1. #1
    \''; DROP TABLE user; --

    Administrator

    Avatar von electric.larry
    Registriert seit
    Dec 2014
    Ort
    Raum 43
    Beiträge
    1.357
    ngb:news Artikel
    79

    Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Ich habe auf einem Webserver, auf dem Seiten von mehreren Usern gehostet sind, diese Verzeichnisstruktur gesehen.

    Code (Bash):
    1.  
    2. user@host:/var/www/sites/# ls -ahl
    3. drwxr-xr-x  5 root     root      .
    4. drwxr-xr-x  5 root     root      ..
    5. drwxr-xr-x  2 user1    user1     seite1
    6. drwxr-xr-x  2 user2    user2     seite2
    7. drwxr-xr-x  2 userX    userX     seiteX
    8.  
    9. user@host:/var/www/sites/seiteX/# ls -ahl
    10. drwxr-xr-x  2 userX     userX     public_html
    11.  
    Apache mit PHP/FPM, jede Seite hat einen eigenen User, dessen Homedir nach /var/www/sites gemountet ist. Dateitransfer über vsftpd, der beim Upload Files mit chmod userX:userX 755 ablegt.

    Bei diesem Setup kann ich mit einem PHP Script problmlos das /var/www/sites Verzeichnis durchlaufen und sämtliche Files und Configs der anderen Seiten lesen. Also z. B. aus dem Config File eines CMS die Datenbank-Zugangsdaten auslesen.

    Wie sollte bei so einem Setup die Verzeichnisstruktur bzw. Rechte korrekt gesetzt sein, um soetwas zu verhindern?

    Ich habe versucht das Read Flag von /var/www/sites sowie /var/www/sites/userX zu entfernen. So könnte jemand zwar noch immer auf die einzelnen public_html Unterverzeichnisse (die 755 brauchen um vom Apache ausgeliefert werden zu können) der jeweiligen User zugreifen, müsste aber die Namen der User-Verzeichnisse zumindest erraten oder kennen.

    Code (Bash):
    1.  
    2. user@host:/var/www/sites/# ls -ahl
    3. drwxr-x--x 5 root root .
    4. drwxr-xr-x 5 root root ..
    5. drwxr-x--x 2 user1 user1 seite1
    6. drwxr-x--x 2 user2 user2 seite2
    7. drwxr-x--x 2 userX userX seiteX
    8.  
    9. user@host:/var/www/sites/seiteX/# ls -ahl
    10. drwxr-xr-x 2 userX userX public_html
    11.  
    Ich habe gesehen, dass auch /etc/apache2/sites/enabled world readable ist, somit könnte man sich von hier die Pfade zu den jeweiligen Public Html Dirs holen. Könnte man ohne Probleme für den Webserver auch von /etc/apache2/ das read Flag für World entfernen, ohne dass Apache ein Problem bekommt?

    Danke
    ~❤~

  2. #2
    Zeitreisender

    Administrator

    Avatar von drfuture
    Registriert seit
    Jul 2013
    Ort
    in der Zukunft
    Beiträge
    5.154
    ngb:news Artikel
    16

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Da du über sftp kommunizierst hast du vermutlich für jedens Webdir / jeden Kunden schon einen eigenen System-User?
    Du kannst dann für jeden kunden einen eigenen php-pool über php-fpm laufen lassen - der hat einen user mit dem er läuft (der Kunde selber)
    Das home Verzeichnis gehört dann dem Kunden und wird auf 700 gesetzt.
    |_|D *`~{ Ich kenne deine Zukunft }~´* |_|D

  3. #3
    \''; DROP TABLE user; --

    Administrator

    (Threadstarter)

    Avatar von electric.larry
    Registriert seit
    Dec 2014
    Ort
    Raum 43
    Beiträge
    1.357
    ngb:news Artikel
    79

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Ja, jedes Webdir hat einen eigenen User. /var/www/sites/username ist sein Homedir. Darin sind alle Files auf ihn und seine Gruppe gechownt.

    Das 750 für sein Homedir habe ich versucht, aber der www-data User ist offenbar auch irgendwie involviert. Wenn bei diesen Rechten das Homedir nicht o+x hat, gibts Forbidden:

    Code (Bash):
    1.  
    2. user@host:/var/www/sites/# chmod o-x seiteX
    3. user@host:/var/www/sites/# ls -ahl
    4. drwxr-x--x 5 root root .
    5. drwxr-xr-x 5 root root ..
    6. drwxr-x--- 2 userX userX seiteX
    7.  
    8. user@host:/var/www/sites/seiteX/# ls -ahl
    9. drwxr-xr-x 2 userX userX public_html
    10.  
    Forbidden
    You don't have permission to access / on this server.
    ~❤~

  4. #4
    Zeitreisender

    Administrator

    Avatar von drfuture
    Registriert seit
    Jul 2013
    Ort
    in der Zukunft
    Beiträge
    5.154
    ngb:news Artikel
    16

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Ja da fehlt der eigene php Pool der unter dem jeweiligen User läuft, PHP Scripte laufen dann in jedem Fall aber mir fällt gerade auf ich weiß nicht wie dann Apache am statischen Inhalt kommt... Muss mir das noch mal überlegen
    |_|D *`~{ Ich kenne deine Zukunft }~´* |_|D

  5. #5

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    electric_larry, was du suchst, sollte hier stehen: https://wiki.ubuntu.com/UserDirectoryPHP

    Wenn ich den Artikel richtig interpretiere, wird damit verhindert das PHP aus dem eigenen Benutzerverzeichnis ausbricht.

    Edit: Also ändert man nicht die Verzeichnis Permissions, sondern beschränkt den PHP Prozess auf das "public_html" Verzeichnis des jeweiligen UserDir's.

    Edit2: Hier steht auch noch etwas zur UserDir Directive von Apache:
    https://httpd.apache.org/docs/2.4/mo...r.html#userdir
    Für diesen Beitrag bedankt sich electric.larry
    Geändert von theSplit (28.04.18 um 09:21 Uhr)
    Gruß theSplit
    @ I might be sober. The good things... the bad things... all I ever know is here! @
    +++ Pi-Thread +++ IT-Talents Code Competitions +++ WICKED - XML/WIKI Parser +++ NGB-Statistik Opt-Out/Anonymisierung +++ KISS Ebook Starter [Linux] +++ Browser Add-on: Flag cookies +++ weitere Projekte auf Github +++ Get in touch +++

  6. #6
    \''; DROP TABLE user; --

    Administrator

    (Threadstarter)

    Avatar von electric.larry
    Registriert seit
    Dec 2014
    Ort
    Raum 43
    Beiträge
    1.357
    ngb:news Artikel
    79

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Danke, aber auf einen ersten Blick - glaube ich - ist das nicht, was ich suche. Liest sich so, als ob es hier darum geht, wo die Ausführung von PHP Scripts erlaubt ist. Mir geht es darum, dass ein PHP Script nicht außerhalb seiner Webroot lesen können soll. Also, dass die User nicht gegenseitig die Webroots des anderen Users einsehen können.

    Ich denke, open_basedir ist, wonach ich gesucht habe. http://www.php.net/manual/en/ini.cor...i.open-basedir
    Für diesen Beitrag bedankt sich theSplit
    ~❤~

  7. #7

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    @electric.larry: Ich glaube da hast du Recht, wobei das ja ein "user.ini" Setting ist dann, also pro Account einzustellen?

    Apaches Userdir sah irgendwie so aus, als ob Apache chrooted was wie abgerufen werden kann, also alles relativ zum USER/public_html/ Verzeichnis.
    Geändert von theSplit (28.04.18 um 14:38 Uhr)
    Gruß theSplit
    @ I might be sober. The good things... the bad things... all I ever know is here! @
    +++ Pi-Thread +++ IT-Talents Code Competitions +++ WICKED - XML/WIKI Parser +++ NGB-Statistik Opt-Out/Anonymisierung +++ KISS Ebook Starter [Linux] +++ Browser Add-on: Flag cookies +++ weitere Projekte auf Github +++ Get in touch +++

  8. #8
    Defender of Freedom

    Administrator

    Avatar von Metal_Warrior
    Registriert seit
    Aug 2013
    Ort
    /dev/mapper/home
    Beiträge
    2.808
    ngb:news Artikel
    6

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Würde ich so versuchen zu regeln: Gib den Ordnern die Gruppenzugehörigkeit zu www-data, das muss wahrscheinlich für apache2 eh sein, und dann chmod 750. Damit dir irgendwelche PHPs nicht Amok laufen, müsstest du wahrscheinlich mittels htaccess einen Sprung nach ../ verhindern.

    Bzw. ich meinte, es gab irgendwo eine Apache2-Config-Flag, mit der man das Arbeiten außerhalb der jeweiligen Root verhindern konnte, ich komm grad nur nicht drauf.
    GCM/IT/S/O d-(--) s+:- a? C++(+++) UL+++(++++)$ P L+++>++++ W++ w@$ M--$ PS+(++) PE(-) Y+(++) PGP++(+++) t+ 5(+) R* !tv b+(++++) DI(++) G++ e+>++++ h(--) y?
    Das Ende ist nahe: Dem Harleyschen Kometen folgt der Gammablitz beim Scheißen.

  9. #9
    \''; DROP TABLE user; --

    Administrator

    (Threadstarter)

    Avatar von electric.larry
    Registriert seit
    Dec 2014
    Ort
    Raum 43
    Beiträge
    1.357
    ngb:news Artikel
    79

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Die Variante mit open_basedir bringt leider nur bedingt etwas, weil dadurch zwar PHP Funktionen wie fopen "eingesperrt" werden, wenn man sich eine PHP Shell eintritt, kann diese aber weiterhin z. B. über exec("ls -l /") andere Dirs sehen.

    Wir haben das jetzt so gelöst, dass jede Instanz chrooted läuft.
    ~❤~

  10. #10

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Es ist schon tragisch, dass eine Sprache sich selbst nicht isolieren lässt, gerade mit so etwas wie "exec", "eval" was ever evil... and silence was golden.

    Ich hab es aber auch so gelesen, dass das "open_basedir" alle executie relativ bzw. in dem Ordner behält, bzw. hab ich das dabei hineininterpretiert. Merkwürdig das dies nicht so ist, dann ist die Empfehlung schlichtweg falsch.
    Gruß theSplit
    @ I might be sober. The good things... the bad things... all I ever know is here! @
    +++ Pi-Thread +++ IT-Talents Code Competitions +++ WICKED - XML/WIKI Parser +++ NGB-Statistik Opt-Out/Anonymisierung +++ KISS Ebook Starter [Linux] +++ Browser Add-on: Flag cookies +++ weitere Projekte auf Github +++ Get in touch +++

  11. #11
    \''; DROP TABLE user; --

    Administrator

    (Threadstarter)

    Avatar von electric.larry
    Registriert seit
    Dec 2014
    Ort
    Raum 43
    Beiträge
    1.357
    ngb:news Artikel
    79

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Wenn du exec & co. ausschalten kannst, sollte die open_basedir Variante eh guter Weg sein. Ich seh exec aber leider oft auch in unverzichtbaren Libraries.
    ~❤~

  12. #12

    Re: Verzeichnisberechtigung auf Webserver mit mehreren Usern

    Aber dynamischen Code ausführen ist etwas böses...

    Weil es "vermutlich" auf User Input aufbaut, und das wird vom Server/PHP/Framework ausgeführt...

    Und da ist, vermute ich auch, keine Sicherheitsprüfung was genau dort wie ausgeführt wird.
    Deshalb sollte man so etwas meiden.

    Oder man muß nen eigenes Framework schreiben, das alle möglichen Befehle sichert und abdeckt, aber nicht einfach Code blind ausführt.
    Gruß theSplit
    @ I might be sober. The good things... the bad things... all I ever know is here! @
    +++ Pi-Thread +++ IT-Talents Code Competitions +++ WICKED - XML/WIKI Parser +++ NGB-Statistik Opt-Out/Anonymisierung +++ KISS Ebook Starter [Linux] +++ Browser Add-on: Flag cookies +++ weitere Projekte auf Github +++ Get in touch +++

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •