EXEC und php.ini

Status
Für weitere Antworten geschlossen.

MaTriX

Benutzer
Mitglied seit
23. Dez 2008
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

habe mir vor ein paar tagen die DS107+ gehollt und bin soweit damit recht zufrieden.
Nun wollte ich ein Script schreiben als PHP um daten von einem anderen Server zu laden, als locales Backup.

Das erste problem ist aber dass ich beim exec sofort diese meldung bekommen:
Warning: exec() [function.exec]: PHP exec disable.

Nun habe ich mal gelesen das ich in der php.ini etwas ändern soll, wobei nichts von exec, shell_exec oder ähnlichem zu finden ist. Abgesehen davon steht unter: vi php.ini [read-only].

Kann mir da jemand helfen, bin auf der linux /unix ebene das erste mal zu gang und würde gerne einen kleinen einstieg machen, nun habe ich den fang =) Hilft mit bitte hjemand hierbei ein ende zu finden.

Danke ;)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Nun habe ich mal gelesen das ich in der php.ini etwas ändern soll, wobei nichts von exec, shell_exec oder ähnlichem zu finden ist. Abgesehen davon steht unter: vi php.ini [read-only].
Bist du denn auch als root angemeldet? Nicht als admin.
Ist bei dir der Safe Mode in der php.ini eingeschaltet? Der schränkt sehr viele Funktionen von PHP ein. Ansonsten gibt es noch die Direktive disable_functions Dort können ebenfalls Funktionen aufgelistet werden, die nicht aufgerufen werden können
 

MaTriX

Benutzer
Mitglied seit
23. Dez 2008
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
Jo Danke, da kommen wir schon einen Schritt näher, dachte das ich als admin auch alle rechte habe.
Also als root ist es schonmal nicht read-only :)

Aber in der ini steht in der disable_functions nichts drin, ist leer.
Und Safe Mode ist ist off.


EDIT:
ich glaube es tut sich was, nachdem ich open_basedir und safe_mode_exec_dir leer gelasen habe
 
Zuletzt bearbeitet:

dewoob

Benutzer
Mitglied seit
16. Jan 2010
Beiträge
8
Punkte für Reaktionen
0
Punkte
0
Kann mir jemand einen plausiblen Grund nennen, warum bei *ausgeschaltetem* Safe Mode das Setting safe_mode_exec_dir überhaupt relevant ist?

Ich bin seit Stunden am Googeln, aber finde nix dazu! Wo man auch hinschaut, findet man immer nur Erklärungen, was safe_mode_exec_dir bei *eingeschaltetem* Safe Mode für Auswirkungen hat - das leuchtet ja auch ein...

Aber: nirgendwo (außer an diversen Stellen in Synology-Foren) konnte ich einen einzigen Fall finden, in dem beschrieben wird, dass exec() selbst bei *ausgeschaltetem* Safe Mode erst nach Löschen des Werts von safe_mode_exec_dir funktioniert. Mit XAMPP unter Windows konnte ich dieses Verhalten ebenfalls nicht reproduzieren.

... hat dazu jemand eine Idee?
 

MaTriX

Benutzer
Mitglied seit
23. Dez 2008
Beiträge
51
Punkte für Reaktionen
0
Punkte
0
genau das weiss ich auch nicht, hab es aber auch schon aufgegeben, hauptsache es funktioniert. Jedoch würde ich keinen http account für fremde zur verfügung stellen, da man jetzt eigenlich auf die ganze DS kommt.

Ich hab es eigentlich nur für mich in benutzung, idr. nur für ein kleines WakeUpOnLan Script.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
hat dazu jemand eine Idee?

Ich habe bislang nicht bemerkt, dass sich die Apache-Server auf der DS anders verhalten als die von XAMMP. Mir und dir sollte aber auch klar sein, dass es nicht einen Apachen gibt, sondern viele Apache-Versionen, die auch noch sehr unterschiedlich kompiliert sein können. Das ist ja das Schöne am Apache, dass man ihn für seine Zwecke herrichten kann ...

Da an 3 Stellen auf der DS die Konfiguration der Web-Server stattfindet, müsste man nun auch an allen 3 Stellen nachschauen, was da passiert:

1] in der jeweiligen http.conf und den dazugehörigen include-Files
2] im Start-Skript
3] in der php.ini

Und dann müsste man sich auch nicht darüber unterhalten, welcher Apache nun gemeint ist (und auch ob du z. B. mein Init_3rdparty.spk installiert hast, welche sich ja massiv mit solchen Konfigurations-Variablen auseinandersetzt)

Itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
SafeMode fliegt in php 6 eh raus
 

Brian!

Benutzer
Mitglied seit
29. Mrz 2009
Beiträge
147
Punkte für Reaktionen
0
Punkte
0
genau das weiss ich auch nicht, hab es aber auch schon aufgegeben, hauptsache es funktioniert. Jedoch würde ich keinen http account für fremde zur verfügung stellen, da man jetzt eigenlich auf die ganze DS kommt.

Wo ich das gerade lesen mal eine konkrete Frage dazu:
Gibt es keine Möglichkeit über die php.ini oder irgendwie anders ganz konkret und explizit php "Freigaben" für verschiedene Ordner zu erstellen?

Wenn ich da nichts falsch verstanden habe kann ja JEDES php-skript in einem öffentlich zugänglichen User-Apache Web Ordner auf ALLE unter open_basedir angegebenen Ordner (oder eben auf die ganze DS wenn nix angegeben wurde) zugreifen.

Vor allem bei eingeschaltetem User-Home WWW Zugang halte ich das für ziemlich bedenklich.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Du musst open basedir so setzen, dass nur diejenigen Verzeichnisse betroffen sind, die du auch erlauben willst
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Wenn ich da nichts falsch verstanden habe kann ja JEDES php-skript in einem öffentlich zugänglichen User-Apache Web Ordner auf ALLE unter open_basedir angegebenen Ordner (oder eben auf die ganze DS wenn nix angegeben wurde) zugreifen.

Deswegen sollte man den user-Apache auch nicht an dieser Stelle aufbohren. Es reicht in den meisten Fällen, dass der sys-Apache das darf. Leider gibt es eine gemeinsame php.ini ... deswegen ist es besser, wenn man diese PHP-Optionen nicht in der php.ini sodern direkt in der jeweiligen httpd.conf steuert. Damit ist immer klar, welcher Apache was darf Auszug aus meiner /usr/syno/apache/conf/http.conf-sys:

Rich (BBCode):
php_admin_flag  safe_mode off
php_admin_value safe_mode_exec_dir none
php_admin_value safe_mode_include_dir none
php_admin_value open_basedir none
php_admin_value doc_root none
php_admin_flag  allow_url_fopen on
php_admin_flag  magic_quotes_gpc off

Itari
 

Brian!

Benutzer
Mitglied seit
29. Mrz 2009
Beiträge
147
Punkte für Reaktionen
0
Punkte
0
Du musst open basedir so setzen, dass nur diejenigen Verzeichnisse betroffen sind, die du auch erlauben willst

Schon klar, nur wenn ich Beispielsweise einigen meiner Nutzer eigene Webseiten anbiete, so könnten diese, wenn sie denn wollten, über PHP auf alle Verzeichnisse der anderen Nutzer und meiner eigenen zugreifen.
Das es dafür (anscheinend) keine weiteren Einschränkungen für Apache/PHP gibt finde ich sehr schade.

Deswegen sollte man den user-Apache auch nicht an dieser Stelle aufbohren. Es reicht in den meisten Fällen, dass der sys-Apache das darf. Leider gibt es eine gemeinsame php.ini ... deswegen ist es besser, wenn man diese PHP-Optionen nicht in der php.ini sodern direkt in der jeweiligen httpd.conf steuert. Damit ist immer klar, welcher Apache was darf Auszug aus meiner /usr/syno/apache/conf/http.conf-sys:

Rich (BBCode):
php_admin_flag  safe_mode off
php_admin_value safe_mode_exec_dir none
php_admin_value safe_mode_include_dir none
php_admin_value open_basedir none
php_admin_value doc_root none
php_admin_flag  allow_url_fopen on
php_admin_flag  magic_quotes_gpc off

Itari

Das ist doch schon mal eine sehr gute Anregung für ein zumindest etwas gesteigertes Sicherheitsempfinden, danke. :)

Da es gerade zum Thema passt: letztens hatte sich PHP strickt geweigert ein Verzeichnis zu durchsuchen, welches unter open_basedir richtig eingetragen war. Die PHP Fehlermeldung sagte aber dennoch, dass für genau dieses Verzeichnis keine Zugriffsberechtigungen über PHP bestünden. Auch ein ändern der Zugriffsberechtigungen für den betreffenden Ordner auf den Apache Nutzer und gar ein chmod 777 haben dem nicht Abhilfe verschaffen können.
Erst ein open_basedir=none löste das Problem. Allerdings leider zu einem zu hohen Preis! :(

Hat dazu irgendwer eine Idee woran so was liegen könnte?

Brian

P.S.: sollte das abzweigen des original Threads hiermit zu weit gehen bitte meinen Beitrag entsprechend verschieben.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Schon klar, nur wenn ich Beispielsweise einigen meiner Nutzer eigene Webseiten anbiete, so könnten diese, wenn sie denn wollten, über PHP auf alle Verzeichnisse der anderen Nutzer und meiner eigenen zugreifen.
Das es dafür (anscheinend) keine weiteren Einschränkungen für Apache/PHP gibt finde ich sehr schade.
Das Problem ist, dass die Userhomepages auch unter dem User nobody laufen. Damit besteht grundsätzlich Zugriff wenn einerseits open_basedir das Verzeichnis erlaubt UND wenn Leserechte für nobody auf dem fraglichen Verzeichnis bestehen.



Das ist doch schon mal eine sehr gute Anregung für ein zumindest etwas gesteigertes Sicherheitsempfinden, danke. :)

Da es gerade zum Thema passt: letztens hatte sich PHP strickt geweigert ein Verzeichnis zu durchsuchen, welches unter open_basedir richtig eingetragen war. Die PHP Fehlermeldung sagte aber dennoch, dass für genau dieses Verzeichnis keine Zugriffsberechtigungen über PHP bestünden. Auch ein ändern der Zugriffsberechtigungen für den betreffenden Ordner auf den Apache Nutzer und gar ein chmod 777 haben dem nicht Abhilfe verschaffen können.
Erst ein open_basedir=none löste das Problem. Allerdings leider zu einem zu hohen Preis! :(

Hat dazu irgendwer eine Idee woran so was liegen könnte?
Da würden mich die originale Fehermeldung und die Rechte auf der Datei und deren Elternverzeichnis interessieren.

Brian

P.S.: sollte das abzweigen des original Threads hiermit zu weit gehen bitte meinen Beitrag entsprechend verschieben.
Also Lösung kannst du ja wie itari vorgeschlagen hat jedem User eine .htaccess Datei in dessen DocumentRoot schmeissen mit genau definierten open_basedir Pfaden. Zusätzlich die Schreibrechte auf diese htaccess so setzen, dass nur dein Superuser (root oder admin) diese Datei ändern darf
 

Brian!

Benutzer
Mitglied seit
29. Mrz 2009
Beiträge
147
Punkte für Reaktionen
0
Punkte
0
Das Problem ist, dass die Userhomepages auch unter dem User nobody laufen. Damit besteht grundsätzlich Zugriff wenn einerseits open_basedir das Verzeichnis erlaubt UND wenn Leserechte für nobody auf dem fraglichen Verzeichnis bestehen.

Verstehe ich dich da richtig? Ich kann für jeden Web-Ordner eigene open_basedir Einstellungen in der .htaccess vornehmen!? :eek:

Da würden mich die originale Fehermeldung und die Rechte auf der Datei und deren Elternverzeichnis interessieren.

Bis ich da konkret im System nochmal nach schauen kann wird wahrscheinlich noch bis zum WE warten müssen, aber ich kann dazu schon mal sagen, dass es sich um ein PHP Skript handelte welches im normalen Web Ordner super funktionierte, aber im homes/user/www nicht mehr.
Selbst nach einem gnadenlosen chown nobody:nobody -R * und einem chmod 777 -R * nicht...
Eben erst nachdem ich open_basedir komplett aufgemacht hab. Als Fehlermeldung kam jedenfalls, dass dieses (auch in der Fehlermeldung angegebene Verzeichnis) nicht für PHP zugrifftsberechtigt wäre. Selbst ein eins-zu-eins kopieren des in der Fehlermeldung angezeigten Verzeichnisses zur open_basedir hatte da nix gebracht... war sehr seltsam.

Brian
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Manchmal denkt man, dass die open_basedir-Option so etwas wie ein PATH-Variable ist und auch so funktioniert. Das ist leider nicht so. Es handelt sich nur um ein Text-Muster, gegen das geprüft wird. Da können manchmal einfach durch eine andere Funktionsvorstellung Fehleinschätzungen herrühren.

Ich empfehle, das PHP-Manual zu diesem Punkt genau zu lesen und auch auch zu probieren.

Itari
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Verstehe ich dich da richtig? Ich kann für jeden Web-Ordner eigene open_basedir Einstellungen in der .htaccess vornehmen!? :eek:
Sorry habe gerade mal ins Manual geschaut. Das geht leider nicht pro Verzeichnis (also nix .htaccess)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat