php-fpm chdir und chroot sinnvoll?

stefkey

Member
Hallo

in der www.conf von php-fpm steht:
Code:
; Chroot to this directory at the start. This value must be defined as an
; absolute path. When this value is not set, chroot is not used.
; Note: you can prefix with '$prefix' to chroot to the pool prefix or one
; of its subdirectories. If the pool prefix is not set, the global prefix
; will be used instead.
; Note: [COLOR="Red"]chrooting is a great security feature and should be used whenever
;       possible. [/COLOR]However, all PHP paths will be relative to the chroot
;       (error_log, sessions.save_path, ...).
; Default Value: not set
;chroot =

; Chdir to this directory at the start.
; Note: relative path can be used.
; Default Value: current directory or / when chroot
;chdir = /var/www

ist chroot nicht das gleiche wie open_basedir? mit openbase_dir sperre ich doch auch ein?
Und warum chdir?

Kann mir dazu jemand etwas sagen?
 
Bei chroot wird das chroot-Verzeichnis zum Root-Verzeichnis, d.h. alles außerhalb von diesem Verzeichnis (z.B: /var/www) ist für PHP nach dem chrooten nicht mehr sichtbar.
Bei open_basedir wird hingegen nur der Zugriff auf die Verzeichnisse gesperrt, die außerhalb der Verzeichnisse liegen, die bei open_basedir angegeben sind.
Willst du z.B. eine systemweite PEAR-Installation nutzen, ist dies bei open_basedir machbar, indem du z.B. /usr/share/php (bei Debian) dort mit aufnimmst. Beim chroot ist dieses Verzeichnis nicht sichtbar, da es außerhalb des chroot-Verzeichnisses (also z.B. /var/www) liegt.
Bei beiden Methoden solltest du auch noch bedenken, dass sie nur Auswirkungen auf PHP-Scripte haben. Solltest du in deinem Webserver auch noch andere Scriptsprachen zulassen (wie Perl, Python oder Lua), dann mußt du für diese vergleichbare Maßnahmen ergreifen, da sich die Beschränkungen sonst mit Hilfe der anderen Sprachen recht einfach umgehen lassen.
 
ah danke danton!

okay ich glaube ich verstehe. Also bei open_basedir kann ich quasi gezielt mehrere/weitere Verzeichnisse zulassen. Bei chroot kann man keine weiteren sichtbare Verzeichnisse angeben, richtig?
 
chroot ist eine Funktionalität des Linux-Kernels, da wird das Root-Verzeichnis für den gechrooteten Prozess (und seine Unterprozesse) auf das angegebene Unterverzeichnis verschoben. Das bedeutet auch, dass wirklich alles, was dieser Prozess benötigt, innerhalb der chroot-Umgebung vorhanden sein muß.
open_basedir ist eine Funktion von PHP und die sorgt nur dafür, dass bestimmte PHP-Befehle nicht mehr auf Dateien zugreifen können, die außerhalb der dafür festgelegten Verzeichnisse liegen.
Bezüglich chroot findest du auch einiges an Infos mit einer einfache Google-Suche, so z.B. dass es nicht als Sicherheitsfeature entwickelt wurde - siehe Wikipedia.
 
Bei chroot kann man keine weiteren sichtbare Verzeichnisse angeben, richtig?
Üblicherweise bind-mountet man notwendige Verzeichnisse dann dort rein. Okay, man kann sie auch für jedes chroot kopieren, aber das ist nicht immer sinnvoll :)

Wichtig, da es immer wieder missverstanden wird: open_basedir sperrt _nur_ PHP selbst ein. Wenn du in PHP z.B. exec() erlaubst oder der Nutzer sogar weitere Skriptsprachen nutzen darf, bringt dir das gar nichts. Meines Erachtens sollte open_basedir immer nur "oben" eine gewisse zusätzliche Sicherheit bieten, aber einen Administrator auf keinen Fall von der korrekten Vergabe von Owner-, Group- und chmod-Rechten befreien. In einem sauber eingerichteten System sorgen diese "Komponenten" bereits dafür, dass ein Nutzer keine fremden Daten einsehen kann. chroots benutzt man dann ja üblicherweise eher, um dem Nutzer eben keinen vollwertigen Linux-Systemnutzer zu geben, der (quasi) alles ausführen darf, sondern einen Account, der entsprechend eingeschränkt wurde.
 
Back
Top