• Hallo liebe Userinnen und User,

    nach bereits längeren Planungen und Vorbereitungen sind wir nun von vBulletin auf Xenforo umgestiegen. Die Umstellung musste leider aufgrund der Serverprobleme der letzten Tage notgedrungen vorverlegt werden. Das neue Forum ist soweit voll funktionsfähig, allerdings sind noch nicht alle der gewohnten Funktionen vorhanden. Nach Möglichkeit werden wir sie in den nächsten Wochen nachrüsten. Dafür sollte es nun einige der Probleme lösen, die wir in den letzten Tagen, Wochen und Monaten hatten. Auch der Server ist nun potenter als bei unserem alten Hoster, wodurch wir nun langfristig den Tank mit Bytes vollgetankt haben.

    Anfangs mag die neue Boardsoftware etwas ungewohnt sein, aber man findet sich recht schnell ein. Wir wissen, dass ihr alle Gewohnheitstiere seid, aber gebt dem neuen Board eine Chance.
    Sollte etwas der neuen oder auch gewohnten Funktionen unklar sein, könnt ihr den "Wo issn da der Button zu"-Thread im Feedback nutzen. Bugs meldet ihr bitte im Bugtracker, es wird sicher welche geben die uns noch nicht aufgefallen sind. Ich werde das dann versuchen, halbwegs im Startbeitrag übersichtlich zu halten, was an Arbeit noch aussteht.

    Neu ist, dass die Boardsoftware deutlich besser für Mobiltelefone und diverse Endgeräte geeignet ist und nun auch im mobilen Style alle Funktionen verfügbar sind. Am Desktop findet ihr oben rechts sowohl den Umschalter zwischen hellem und dunklem Style. Am Handy ist der Hell-/Dunkelschalter am Ende der Seite. Damit sollte zukünftig jeder sein Board so konfigurieren können, wie es ihm am liebsten ist.


    Die restlichen Funktionen sollten eigentlich soweit wie gewohnt funktionieren. Einfach mal ein wenig damit spielen oder bei Unklarheiten im Thread nachfragen. Viel Spaß im ngb 2.0.

Verzeichnisberechtigung auf Webserver mit mehreren Usern

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
Ich habe auf einem Webserver, auf dem Seiten von mehreren Usern gehostet sind, diese Verzeichnisstruktur gesehen.

[src=bash]
user@host:/var/www/sites/# ls -ahl
drwxr-xr-x 5 root root .
drwxr-xr-x 5 root root ..
drwxr-xr-x 2 user1 user1 seite1
drwxr-xr-x 2 user2 user2 seite2
drwxr-xr-x 2 userX userX seiteX

user@host:/var/www/sites/seiteX/# ls -ahl
drwxr-xr-x 2 userX userX public_html
[/src]

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.

[src=bash]
user@host:/var/www/sites/# ls -ahl
drwxr-x--x 5 root root .
drwxr-xr-x 5 root root ..
drwxr-x--x 2 user1 user1 seite1
drwxr-x--x 2 user2 user2 seite2
drwxr-x--x 2 userX userX seiteX

user@host:/var/www/sites/seiteX/# ls -ahl
drwxr-xr-x 2 userX userX public_html
[/src]

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
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
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.
 

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
  • Thread Starter Thread Starter
  • #3
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:

[src=bash]
user@host:/var/www/sites/# chmod o-x seiteX
user@host:/var/www/sites/# ls -ahl
drwxr-x--x 5 root root .
drwxr-xr-x 5 root root ..
drwxr-x--- 2 userX userX seiteX

user@host:/var/www/sites/seiteX/# ls -ahl
drwxr-xr-x 2 userX userX public_html
[/src]

Forbidden
You don't have permission to access / on this server.
 

drfuture

Zeitreisender
Teammitglied

Registriert
14 Juli 2013
Beiträge
8.730
Ort
in der Zukunft
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 :uglyngb:
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
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/mod/mod_userdir.html#userdir
 
Zuletzt bearbeitet:

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
  • Thread Starter Thread Starter
  • #6
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.core.php#ini.open-basedir
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
@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.
 
Zuletzt bearbeitet:

Metal_Warrior

Defender of Freedom
Teammitglied

Registriert
10 Aug. 2013
Beiträge
6.830
Ort
/dev/mapper/home
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.
 

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
  • Thread Starter Thread Starter
  • #9
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.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
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.
 

electric.larry

\''; DROP TABLE user; --
Teammitglied

Registriert
13 Dez. 2014
Beiträge
4.549
Ort
Raum 43
  • Thread Starter Thread Starter
  • #11
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.
 

theSplit

1998
Veteran Barkeeper

Registriert
3 Aug. 2014
Beiträge
28.561
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.
 
Oben