# PHP-Script unter Apche 5.1.1. nicht lauffähig?



## speedyggg (6. April 2006)

Hallo

ich habe ein Script in PHP geschrieben. Dieses läuft/funktioniert auf einem Server mit Apache 5.0.4. 
Nun möchte ich mit diesem Script auf einen anderen Server umziehen, auf dem die Version 5.1.1. läuft. Auf diesem Server funktioniert das Script nicht mehr.

Folgende Funktion hat das ganze:
Script soll über vorhande Netzwerkverbindung zu einem Client PC, diesem neustarten.

Das ganze bekommt bei dem neuen Server die Fehlermeldung "Zugriff verweigert"

Muss man im Apache irgendwo einstellen das er PHP-System- Befehl durchlassen bzw. verarbeiten soll?

Ich hoffe mir kann jemand helfen.

Thx
Speedyggg


----------



## Dennis Wronka (6. April 2006)

Es gibt weder Apache 5.0.4 noch 5.1.1. Das sind die PHP-Versionen.
Was genau gibt Dir die Meldung? Apache? PHP?
Werden andere PHP-Scripts ausgefuehrt? Wenn ja, dann zeig uns doch mal das betroffene Script.


----------



## speedyggg (6. April 2006)

Ja klar guten Morgen ist natürlich die PHP - Version :-( 

Also nochmal von vorne :
Ich benutze XAMPP alt (funktionstüchtig): 1.4.13
Neu nicht funktionstüchtig Ver: 1.5.1

Hier der Code:

```
<HTML>
<HEAD>
<TITLE>DB_Datenanzeige</TITLE>
</HEAD>
<BODY>
<body bgcolor="#DBD1D1">
<?php
// Error-Reporting explizit einschalten
ini_set('error_reporting',  E_ALL & E_STRICT);
ini_set('display_errors',   1);


$maschine     =  $_POST['maschine'];
$pfad1        =  $_POST['pfad'];


If (empty($maschine)) {
    Echo "Sie haben keine Daten eingegeben!!";
    exit;
    }

$verbindung = $pfad1 . $maschine.".verlad1.prod.nobilia.local";
$netuse = $verbindung . "\c passwort /U:user";
$meldung = "Der PC Tor " . $maschine . " wird soeben neugestartet";

system('net use ' .$netuse);

system('shutdown -r -f -m ' . $verbindung);

include 'footer.tpl.inc';
exit;
?>

</body>
</html>
```

Wie gesagt auf der alten Version keine Probleme. Die Fehlermeldung ist halt"Zugriff verweigert".
Wenn ich aber den generierten Befehl in Kommandozeile ausführe funktioniert es auch.
Also kann es auch nicht an den Berechtigungen unter Windows liegen.

- der Befehl wird richtig vom Script zusammen gesetzt
- per Kommandozeile funktioniert es auch
bleibt also im Prinzip nur die geänderte Apache und/oder Xampp Version,oder 





Speedyggg


----------



## Dennis Wronka (6. April 2006)

Der neue Server laeuft auch unter Windows? Koennte es vielleicht mit dem SafeMode zu tun haben? Obwohl, das sollte eigentlich anhand der Fehlermeldung ersichtlich sein.


----------



## speedyggg (6. April 2006)

Hier mal ein Auszug aus dem AccessLog. Was heißen die Zahlen hinter 1.1 . Sind das Ports die angesprochen werden ?



```
47.50.3.144 - - [06/Apr/2006:12:02:36 +0200] "GET /vsd HTTP/1.1" 301 371
47.50.3.144 - - [06/Apr/2006:12:02:36 +0200] "GET /vsd/ HTTP/1.1" 200 895
47.50.3.144 - - [06/Apr/2006:12:03:10 +0200] "POST /vsd/bat_test1.php HTTP/1.1" 200 572
```

Hilf mir mal auf die Sprünge wo steht das mit dem SafeMode. In der .conf  habe ich nichs gefunden.

Thx
Speedyggg


----------



## Dennis Wronka (6. April 2006)

Den SafeMode kannst Du in der php.ini (de)aktivieren.
Die erste Zahl hinter HTTP/1.1 ist der uebermittelte Status-Code.
301 ist eine Redirection. 200 bedeutet, dass die Datei gefunden wurde.
Bei der 2. Zahl bin ich nicht sicher, koennte mir aber vorstellen, dass es die Anzahl der uebertragenen Bytes ist.


----------



## speedyggg (6. April 2006)

Ja danke,

also Safe mode ist deaktiviert.
Noch ne Idee?


----------



## Dennis Wronka (6. April 2006)

Wie gesagt, werden andere PHP-Scripts ausgefuehrt?
Wenn ja, kannst Du andere Shell-Befehle ausfuehren?

Ich nehme mal folgendes an: Andere Scripts laufen, einige andere Befehle koennen ausgefuehrt werden. Die von Dir benoetigten Befehle koennen nicht ausgefuehrt werden weil der Web-Server, und somit PHP, nicht mit Admin-Rechten laeuft.


----------



## speedyggg (6. April 2006)

Wie du schon schreibst.

Andere Scripte und Shell-Befehle funktionieren.

Als Admin ist das System auch angemeldet.

Alles hilft nichts es kommt immer die gleiche Meldung:


'shutdown -r -f -m ' \\vsd01131.verlad1.prod.xxxx.local *Zugriff verweigert *


----------



## Dennis Wronka (6. April 2006)

Musst Du vielleicht shutdown noch Usernamen und Passwort mitgeben?


----------



## speedyggg (6. April 2006)

Das habe ich auch schon im zwei verschiedenen Versionen ausprobiert.

Einmal Netzwerkverbindung per Batchlauf und einmal per Script.

Ergebniss ist bekannt. Zugriff verweigert.

Kann man noch ein Errorlog miteinschalten?


----------



## speedyggg (7. April 2006)

Also, das Problem muss an der Version vom Apache oder PHP liegen.
Bei einer Version z.B. 1.4.16 (XAMPP) funktioniert das Script wunderbar.

Ich werde mal weitertesten und sehen ab welche Version das Problem wieder auftaucht.

Thx
Speedyggg


----------



## Dennis Wronka (7. April 2006)

Schau doch einfach mal in der httpd.conf mit welchem User Apache laeuft.


----------



## speedyggg (11. April 2006)

Ich habe nun die letzten Tage viel herumexperimentiert um das Problem zu lösen .

Leider ohne Erfolg. Das Problem liegt scheinbar in den Berechtigungen bzw.. den Zugriff auf das Userverzeichnis.

Leider bin ich nicht der Apachefreak und weiß mir bei der folgenden Datei (httpd-userdir.conf) nicht zu helfen.

Kann mir jemand sagen wie ich was konfigurieren muss?

Da das ganze im Intranet läuft kann der User im Prinzip alles machen. Auch das Verzeichnis kann ich beliebig ändern etc.

Thx
Speedyggg


----------



## Dennis Wronka (11. April 2006)

Dennis Wronka hat gesagt.:
			
		

> Schau doch einfach mal in der httpd.conf mit welchem User Apache laeuft.


Wie sieht's denn damit aus?


----------



## speedyggg (11. April 2006)

In  httpd.conf finde ich keinen angemeldeten User. Es werden nur verschieden Module geladen und die folgende .conf- Datei geladen.

Hier ein paar Zeile auszug aus der o.g. Datei

```
LoadModule authz_user_module modules/mod_authz_user.so

# User home directories
Include conf/extra/httpd-userdir.conf

Hier die http-userdir.conf

<IfModule userdir_module>
    #
    # UserDir: The name of the directory that is appended onto a user's home
    # directory if a ~user request is received.  Note that you must also set
    # the default access control for these directories, as in the example below.
    #
    UserDir "C:/dasi/website"

    #
    # Control access to UserDir directories.  The following is an example
    # for a site where these directories are restricted to read-only.
    #
    <Directory c:/dasi/website>
        AllowOverride FileInfo AuthConfig Limit Indexes
        Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
        <Limit GET POST OPTIONS>
            Order allow,deny
            Allow from all
        </Limit>
        <LimitExcept GET POST OPTIONS>
            Order deny,allow
            Allow from all
        </LimitExcept>
    </Directory>
</IfModule>
```

Wirst du daraus schlau?


----------



## Dennis Wronka (11. April 2006)

Es muesste irgendwo 2 Zeilen wie die beiden folgenden geben:


			
				httpd.conf hat gesagt.:
			
		

> User nobody
> Group nobody


Moeglicherweise mit anderen User- und Gruppennamen, aber es sollte sich irgendwas von wegen User und Group finden lassen.

Ansonsten schau doch mal was diese Zeile sagt:

```
echo get_current_user().' - '.getmyuid().':'.getmygid();
```


----------



## speedyggg (11. April 2006)

Zeilen mit den :

User nobody
Group nobody

habe ich nicht in meiner httpd.conf. Ich habe im gegesatz zur alten Version ein Verzeichnis das "Extra" heißt und in dem jede Menge httpd-......conf Dateien sind. Unter anderen auch die httpd-userdir.conf.

Das Ergebnis der Script- Zeile sieht so aus


```
SYSTEM - 0:0
```

Sagt dir das was?


----------



## Dennis Wronka (11. April 2006)

Hmm, der System-User sollte unter Windows im Grunde genommen Gott gleich kommen.  Dadurch nehme ich jetzt erstmal an, dass der Befehl selbst zwar ausgefuehrt wird, aber vom Netzwerk her nicht die Rechte da sind den entsprechenden Rechner runter zu fahren.


----------



## speedyggg (11. April 2006)

Was heißt den 0-0 hinter denm System?

Der Witz an der Sache ja das die generierte Zeile in der Kommandozeile ausgeführt funktioniert.

Kann es den sein das Apache auf den lokalem Laufwerk Berechtigungen benötigt, sowie in der httpd-userdir.conf beschrieben. 

Da will er ja auf eigene Dateien zugreifen.


----------



## Dennis Wronka (11. April 2006)

System kann auf alles zugreifen, das sollte also kein Problem darstellen.
0:0 sind die User- und GruppenID.


----------



## speedyggg (11. April 2006)

Ich habe es gerade noch mal getestet . Codezeile zum Shutdown wird generiert , generierte Zeile in die Windows- Dos box kopiert ausgeführt , funktioniert.
Dasselbe über das Script "Zugriff verweigert".

Das ganze auf einer älteren Version von XAMPP , funktioniert auch.

Gibts da noch irgendwekche Log-Dateien die ich Abfrage bzw. einbauen kann das ich noch zusätzliche Anhaltspunkte bekommen kann?


----------



## Dennis Wronka (11. April 2006)

Wie gesagt, ich denke, dass dies der Grund ist:


			
				Dennis Wronka hat gesagt.:
			
		

> Dadurch nehme ich jetzt erstmal an, dass der Befehl selbst zwar ausgefuehrt wird, aber vom Netzwerk her nicht die Rechte da sind den entsprechenden Rechner runter zu fahren.


----------



## speedyggg (13. April 2006)

Hallo,

ich habe jetzt weitere Tests durchgeführt und kann jetzt eine Berechtigungsfrage ausschliessen.

Hat jemand noch eine andere Idee. Wie gesagt/geschrieben ich meine es liegt an der Apacheversion das der Apache den Systembefehl anders verarbeitet oder weitere Angaben benötigt.

Please help!

Speedyggg


----------



## hachtl (12. April 2007)

Hi, hast du mittlererweile ein Lösung? Ich habe dasselbe Problem ...


----------



## speedyggg (12. April 2007)

Ja, das Problem ist bei mir gelöst.

Das Problem liegt im Benutzer der den Apachedienst (auf Windowsseite) startet.
Die PCs die gestartet werden sollen (in meinem Fall) müssen den selben User (wenn lokal) haben, wie der der den Apachedienst startet.

Speedyggg


----------



## hachtl (17. April 2007)

Hi,

der Tip war gut. Hier nochmal ein bischen ausführlicher falls jemand dasselbe Problem hat:

Beispielkonfiguration: Windows 2000 Server mit XAMPP:

Im Normalfall wird der Dienst Apache 2 im Dienstmanager vom Lokalen Systemkonto aus gestartet. Dies muß geändert werden:

1. Dienste öffnen
2. Apache2 doppel klicken
3. Zum Reiter Anmelden wechseln
4. Punkt Dieses Kontoverwenden auswählen und z.B. Administrator eintragen. (Paßwort nicht vergessen)
5. Apache2 neu starten.

fertig

ciao

Hachtl


----------

