[PHP] shell_exec op windows server een service starten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik zit met een probleempje met het commando shell_exec

Wat ik wil is via een PHP script een bepaalde service starten op een andere PC in het netwerk.
Met de tool psservice kun je via de commando lijn eenvoudig een service op een andere machine starten.

Je geeft in de command line in:
psservice \\192.168.1.4 -u username -p hetpaswoord stop checkdienst
(checkdienst = naam service)
Als je dit ingeeft dan stopt de service inderdaad op de machine met dat IP.

Nou dacht ik slim te zijn om via shell_exec dit via PHP te doen:
PHP:
1
2
$data = shell_exec("psservice \\$serverip -u $username -p $password $command $servicename"); 
print $data;


Maar wat ik ook probeer het werkt niet, het script freezed gewoon, in de process manager van de webserver (welke ook op w2k3 draait) zie je cmd.exe en psservice.exe draaien.
Maar waarom dit nu niet werkt weet ik niet, jammer genoeg zie je de command lijn niet op de desktop om te kijken wat er mis gaat.
Het script blijft dus net zolang hangen totdat je de processen killed.

Ik heb cmd.exe en psservice.exe de juiste rechten gegeven, als ik dit command geef:
PHP:
1
2
$data = shell_exec("ping $serverip"); 
print $data;

Dan pingt ie de server en krijg ik het resultaat te zien, dus de rechten op cmd.exe staan goed, psservice.exe heeft exact dezelfde rechten als cmd.exe gekregen

Gebruik ik het commando:
PHP:
1
2
$data = shell_exec("sc \\$serverip $command $servicename");
print $data;

Dan krijg ik een error dat de user/pass niet correct is, dit klopt omdat de andere machine een ander administrator paswoord heeft, om een ander user/pass mee te geven heb je dus psservice nodig.

Tsja en dat krijg ik niet werken via PHP.

Mijn vraag is nu:
- Is er een manier dat ik op de webserver op de desktop kan zien wat er in de commandbox nu mis gaat?
- iemand een idee wat ik nu fout doe en hoe dit wel werkend te krijgen is?

Ohja, gebruikte username en paswoord zijn 100% correct, ook voert de server de remote commando's gewoon uit als je het direct om de command lijn doet, het zit dus echt in het shell_exec gedeelte.

Acties:
  • 0 Henk 'm!

  • Megamind
  • Registratie: Augustus 2002
  • Laatst online: 10-09 22:45
Kan je niet gewoon een .bat bestandje gebruiken of moet het persé PHP zijn?

Acties:
  • 0 Henk 'm!

  • Xion
  • Registratie: November 2000
  • Laatst online: 14:07
Ik heb geen ervaring met het uitvoeren van commands vanuit php, maar kan het een beveiliging zijn dat het niet werkt? Al een simpel copy commando geprobeerd?

Kan het zijn dat php onder een guest account werkt (lijkt me logisch) en daarom geen execute rechten heeft. Probeer eens een "runas" (doe even met '/?' voor de argumenten)

edit: Het lijkt me geen goed idee om een 'runas' permanent in je script te zetten, uit veiligheids overwegingen.

Misschien zou je php / website ook onder een ander account kunnen laten runnen. In het geval van IIS kan je per website een account opgeven (bij "Directory security")

Succes

[ Voor 29% gewijzigd door Xion op 25-12-2006 01:43 ]

Nieuwe M3 Macbook of iMac kopen? Check: Apple M3 Prijs Overzicht


Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

En als je het doet met:
PHP:
1
$serverip = "\\" . $serverip;


Viel me op dat als er variables aan elkaar stonden in de PHP files van het CMS wat ik gebruik het zo genoteerd staat: $iets = "{$nogiets}$blaat";

Misschien dat je dus niet tekst en variable aan elkaar kan gebruiken..

(wilde gok hoor)

[ Voor 184% gewijzigd door RaZ op 25-12-2006 01:57 ]

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@megamind
Nee, want er zijn verschillende services die gestart en gestopt moeten worden, welke wordt bepaald door PHP

@Xion
Security rechten staan goed, het script wordt gestart met user IWPD_4(domain), deze user heeft zowel op cmd.exe als op psservice.exe read en execute rights.
Als ik met diezelfde user een shell_exec("ping 192.168.1.4") doe dan werkt dit prima, dus de rechten staan goed op cmd.exe, psservice.exe heeft 100% dezelfde userrights als cmd.exe

@RaZ
Geen verschil helaas

Acties:
  • 0 Henk 'm!

Verwijderd

@ B3rt, het zal wel betrekking hebben op de rechten van PHP, niet van de rest.

Sowieso, draai nooit via runas, maar via iets als sanur. In ieder geval met encrypted password storage in je scripts.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
waarom werkt het commando sc wel?
sc.exe doet hetzelfde alleen deze gebruikt geen user/pass
psservice is een uitgebreidere versie van sc.exe

Acties:
  • 0 Henk 'm!

  • _trickster_
  • Registratie: Mei 2005
  • Laatst online: 16-09 19:59
als je even aan het einde van de comando ">> info.txt" plaatst dan schrijft hij de output weg in het tekstfile'tje info.txt. ( zonder aanhalingstekens)

hierna moet je alsnog wel het process killen maar in plaats van de output die hij plaatst in de (verstopte) dosbox, plaatst hij de output in het txt bestandje waardoor je het wel kan bekijken.

dit is een klein debug truckje die je denk ik hier ook wel handig voor kan gebruiken

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Werkt niet
als ik het volgende commando geef:
$data = shell_exec("psservice \\192.168.1.4 -u restart -p 123456 start service12 >> info.txt");

Dan gebeurd er niets, het script start en eindigd direct, alleen de service wordt niet gestart en ook wordt er geen info.txt aangemaakt (heb hele machine op info.txt laten zoeken)

Laat ik dat >> info.txt weg dan "freezed" het scripje weer en wacht totdat ik psservice.exe kill in de task manager, daarna een error met: Fatal error: Maximum execution time of 30 seconds exceeded in path to script

Acties:
  • 0 Henk 'm!

Verwijderd

Er staat me ergens iets van bij dat ik vanwegen dit soort problemen, uitgekomen ben op het volgende scriptje. Het kan ook door iets anders geweest zijn, staat slecht in de documentatie "waarom", het werkte iig voor iets specifieks "beter".

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    function shell_mexec($command) {
        // http://nl3.php.net/manual/nl/function.system.php 
        // Script written by TweakBoy ( at http://gathering.tweakers.net )
        // Script debugged by KingOfDos ( error_reporting(E_ALL) returned
        // some errors. The if(empty($out)) added )/
        // original functionname = mysystem, renamed to shell_mexec
        if (!($p=popen("($command)2>&1","r"))) {
            return 126;
        }
    
        while (!feof($p)) {
            $line=fgets($p,1000);
            if(empty($out))
                $out = $line;
            else
                $out .= $line;
        }
        pclose($p);
        return $out;
    }


Probeer het anders eens met de php cli (bij full windows download in mapje php\cli, copyeren naar de rootmap en testen. Zo draait hij niet als Apache/andere user, maar gewoon als aangemelde user op de computer (wel handmatig starten vanuit een prompt dmv php.exe script.php).

Werkt dit wel dan is het een rechten probleem, werkt dit niet dan zit het in PHP (lijkt me).

[ Voor 3% gewijzigd door Verwijderd op 25-12-2006 04:07 ]

Pagina: 1