Shell Script per PHP ausführen

Alle weiteren Dienste, die nicht in die drei oberen Foren gehören.
Antworten
Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Shell Script per PHP ausführen

Beitrag von Pumaxs » 05.10.2005 12:00:19

Tach !

Ich versuche schon seit ein paar stunden ein shell script per php auszuführen.
Bekomme es aber irgendwie nicht hin und meine fehlersuche führt auch nicht zum erfolg

Ich verwende das lampp (xampp) server paket und das shell script liegt im /bin/ verzeichniss und heisst ftpadd

ftpadd legt ein systemuser an
fptadd userid kennwort benutzername

Leider lässt sich das script nicht per php mit shell_exec("ftpadd 567 blabla billy") ausführen...

wo ist der fehler ? :(

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 05.10.2005 12:16:13

Was meckert dir denn PHP? Da sollte doch irgendne Fehlermeldung bzw. ein Fehlercode zurueckkommen.
Wenn du das so nutzt:

Code: Alles auswählen

$output = shell_exec("ftpadd 567 blabla billy");
Dann sollte in $output die Ausgabe von ftpadd stehen.
Ach ja, eventuell hast du im PHP den Safe Mode aktiviert, damit kann man dann dieses Kommando nicht nutzen. Mehr Infos zum Safe Mode unter [1].

[1]http://de.php.net/manual/de/features.safe-mode.php

Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Beitrag von Pumaxs » 05.10.2005 12:21:54

Es kommt keine fehlermeldung und kein fehlercode zurück die seite bleibt einfach leer...

wie kann ich denn den safemode abschalten ? einfach ins php script safe_mode = Off schreiben ???

progressive
Beiträge: 61
Registriert: 26.05.2005 00:04:12
Wohnort: Aachen
Kontaktdaten:

Beitrag von progressive » 05.10.2005 12:25:47

Pumaxs hat geschrieben:...wie kann ich denn den safemode abschalten ?...
in der php.ini

Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Beitrag von Pumaxs » 05.10.2005 12:32:13

der safe_mode ist abgeschaltet... also wirds daran wohl auch nicht liegen :(

Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Beitrag von Pumaxs » 05.10.2005 12:58:58

hat denn keiner mehr ne idee wo dran das liegen könnte ?

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 05.10.2005 13:03:35

Hallo,

versuch das Problem einzugrenzen, indem Du ein anders Programm installierst, welches auch Execute nutzt.

Hab da ein schönes:

phpfm: http://phpfm.sourceforge.net/ (nur eine index.php-Datei)

Dort gibt es auch Execute, funktioniert das Execute auf deinem Server?

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 05.10.2005 13:06:07

ftpadd legt ein systemuser an
bist du sicher du meinst systembenutzer, das legt doch einen ftp user an, oder?
hm, bist du sicher das ein normaler user das ausführen darf?

ignorier meine frage wenn sie zu blöd ist, aber du hast den apache neu gestartet
nach der änderung in der php.ini?

Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Beitrag von Pumaxs » 05.10.2005 13:12:58

@ startx
das hat schon alles seine richtigkeit

@ nil
bin mir zwar nicht ganz sicher wie ich das damit testen soll aber laufen tut die index.php und nachdem ich auf enter geklickt hab kam auch einiges mehr

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 05.10.2005 13:16:15

Hi,

super. Nun solltest Du alles mögliche machen können (ist ja ein Filemanager). Und oben gibt es Execute ... gib doch mal dort einen Befehl ein.

Wenn es nicht geht: lag nicht an Deinem Script, ist ein allgemeines Problem
Wenn es geht: klau den Code aus dem Script und werde glücklich

Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Beitrag von Pumaxs » 05.10.2005 13:23:53

über execute command geht z.B. ls -l
aber mein script lässt sich darüber auch nicht starten.

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 05.10.2005 13:27:51

Hi,

vollständigen Pfad eingegeben, Fehlermeldung?
Oh, hast daran gedacht, dass das Script vom Webserver-User ausgeführt wird?
(falls nein: setuid root, sudo usw. ausprobieren)

Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Beitrag von Pumaxs » 05.10.2005 13:34:58

# sudo -u root ftpadd
exec("sudo -u root ftpadd") no return...

# sudo -u root
usage: sudo [-HPSb] [-p prompt] [-u username|#uid]
{ -e file [. . .] | -i | -s | <command> }

# sudo -u root useradd
exec("sudo -u root useradd") no return...

hab ich ausprobiert.. aber ich werd daraus nicht schlau, warum einige sachen funktionieren und einige nicht... :?

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 05.10.2005 13:55:48

Hi,

vielleicht hat das mit dem sudo am Anfang doch zu weit geführt. Versuch doch nun mal Dein Script so zu ändern, dass Du "nur" eine Datei anlegst (unter /tmp oder im Webserver-Verzeichnis)

Diese Datei wird den Webserver-Benutzer als Eigentümer haben und das musst Du bei Deinem Script bedenken. Wechsel als "root" zu dem Webserver-Benutzer und führe das Script "von Hand" aus. Versuch die Fehler auszubauen, indem Du dem Webserver-Benutzer mehr Rechte gibst. Hierbei können Dir setuid root und evtl. sudo helfen. Ohne diese wirst Du wohl nicht einen neuen Benutzer anlegen können.

Benutzeravatar
startx
Beiträge: 3165
Registriert: 07.12.2002 19:29:48
Wohnort: london

Beitrag von startx » 05.10.2005 14:08:16

Versuch die Fehler auszubauen, indem Du dem Webserver-Benutzer mehr Rechte gibst.
das scheint mir nicht ganz ungefährlich, schliesslich laufen ja unter dem benutzer (www-data oder wie auch immer) noch ne menge anderer php sachen.

Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Beitrag von Pumaxs » 05.10.2005 14:14:42

Wie bekomme ich denn raus wie der webserver user heisst ?
lampp (xampp) wird da doch bestimmt ein standard user anlegen... weil dann könnte ich dem user ja einfach mehr rechte geben...

anscheint darf der user nicht mal eine datei anlegen oder ist
$var=fopen("file.txt", "w");
der falsche befehl um eine datei anzulegen ??

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 05.10.2005 14:19:27

Hi,

dann solltest Du generell dem Webserver es auch nicht erlauben Benutzer per Script anzulegen, was ja mal Dein ursprüngliches Ziel war. Lass dem Webserver doch in eine Datei die Benutzer schreiben, die Du dann "von Hand" abarbeitest. Kannst Dich dann ja über diesen Antrag per EMail informieren lassen. So kannst Du Webserver-Benutzer und root vernüftig trennen. Außerdem soll der Webserver ja wohl nicht beliebige User anlegen, oder?

nil
Beiträge: 989
Registriert: 08.06.2005 13:28:36

Beitrag von nil » 05.10.2005 14:21:18

Hi,

Benutzer für den Webserver:

lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
apache2 27057 root 3u IPv6 941034 TCP *:www (LISTEN)
apache2 27058 www-data 3u IPv6 941034 TCP *:www (LISTEN)
apache2 27059 www-data 3u IPv6 941034 TCP *:www (LISTEN)
apache2 27060 www-data 3u IPv6 941034 TCP *:www (LISTEN)
apache2 27061 www-data 3u IPv6 941034 TCP *:www (LISTEN)
apache2 27062 www-data 3u IPv6 941034 TCP *:www (LISTEN)

Benutzer ist www-data beim mir.
root muss ihn starten, da er den Port 80 (priviligiert) nutzt.
Zuletzt geändert von nil am 11.10.2005 12:50:03, insgesamt 1-mal geändert.

Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Beitrag von Pumaxs » 05.10.2005 14:23:08

ok eigentlich macht das sicherheits technisch sinn :)
ist aber schade das das dann nicht automatisch geht aber so gesehen ist das script von hand ausführen auch nicht das problem....

wenn mir jetzt noch wer sagen kann wie ich per mysql query die höchste zahl aus einer spalte auslese dann bin ich vorerst glücklich :) (user id)

nepos
Beiträge: 5238
Registriert: 05.01.2005 10:08:12

Beitrag von nepos » 05.10.2005 14:33:43

Code: Alles auswählen

SELECT max(user_id) FROM <tabelle>
?

Pumaxs
Beiträge: 18
Registriert: 05.10.2005 11:49:13

Beitrag von Pumaxs » 05.10.2005 16:30:23

ich hab jetzt ne gute endlösung gefunden :)
danke für die schnellen antworten :!:

Antworten