[PHP] Windows service herstarten

Pagina: 1
Acties:
  • 233 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik connect regelmatig naar mijn thuis server. Hiervoor draai ik een bepaalde service.
Echter loopt dat nogal eens vast waardoor ik er niet meer bij kan. Een herstart van de service lost dit op.

Nu staat er ook PHP op de server geinstalleerd en werkt deze ook in IIS6.

Nu had ik bedacht, ik laat PHP een batch bestand uitvoeren op de server:
code:
1
2
3
<?php 
system("C:\RESTARTER.BAT"); 
?>


In restarter staat niet meer dan een "net stop ...." & "net start ...."
Echter werkt dit niet.

Toen geprobeerd met:

code:
1
2
3
<?php 
shell_exec("C:\RESTARTER.BAT"); 
?>


Dit resulteerd ook niet in het gewenste resultaat.

Heeft wellicht iemand een idee hoe ik dit voor elkaar kan krijgen?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Grote kans dat de user waaronder PHP (IIS) draait geen rechten heeft om die service te starten/stoppen.

Acties:
  • 0 Henk 'm!

  • Robbeke
  • Registratie: September 2001
  • Laatst online: 29-12-2018
volgens mij heeft de account waaronder IIS/PHP scripting draait niet genoeg rechten om die service te herstarten.

Overigens terecht want dit zou willen zeggen dat, wanneer je webserver gehacked wordt d.m.v. bvb een exploit, de intruder systeemrechten heeft en dat lijkt me geen goed idee 8)7

http://www.tweakers.net/gallery/sys/2314


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hmm... kan helaas niet enkel bij die service instellen dat de IISUser die mag restarten.
Maar eens kijken of ik daar een custom policy voor kan maken, anders houd het op, security risico is me anders te groot.

Acties:
  • 0 Henk 'm!

  • tweakerbee
  • Registratie: Maart 2000
  • Laatst online: 09:09

tweakerbee

dus..?

Er is een PHP extensie die windows services kan controleren. Heeft echter waarschijnlijk ook admin rechten nodig:

http://nl3.php.net/manual...n.win32-start-service.php

M.a.w.: geen rechten = geen controle (zoals het hoort :))

You can't have everything. Where would you put it?


  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Je hebt C:\RESTARTER.BAT ook echt met hoofdletters geschreven? Want \r met een kleine r is de helft van een enter.

Verwijderd

Topicstarter
Yep, staat er echt zo. Copy/paste. ;)

  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 20-09 16:55

Bud_s

Team Anticimex & Lock

Welke windows versie hebben we het over ?
Welke service ?

Je zou kunnen proberen met een 'runas' in je batch file.
(je zou ook het password mee moeten kunnen geven, en anders is er ook zeker een VB script in omloop wat het zelfde bereikt)

Je zou ook gewoon bij de service op kunnen geven dat hij automatigisch moet herstarten.

Verwijderd

Topicstarter
Is geen standaard Windows Service, maar van het remote control programma.
Aangezien 't IIS6 is, hebben we het over Windows Server 2003.

De service crashed niet, maar blijft hangen. Voor Windows lijkt het gewoon als of ie nog running is.
Echter kan geen connectie meer maken met m'n server. Na een restart van de service wel.

Run As is een idee, maar hoe laat ik dat PHP script dat doen dan?
In de batch file staat enkel net stop/start.

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
Als je wel beschikking hebt over de COM extensie zou je het volgende kunnen proberen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$hostname = ".";
$serviceName = "<SERVICE_NAME>";

$wmi = new COM("WinMgmts:{impersonationLevel=impersonate}//{$hostname}/root/cimv2");
$service = $wmi->Get("Win32_Service.Name='$serviceName'");

// start service
if($service->State == 'Running') echo "Service already started.";
else
{
    echo "Enabling service, ", $service->Name, "...<br>";
    $service->StartService();
}

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

PrisonerOfPain schreef op zaterdag 29 september 2007 @ 11:37:
Als je wel beschikking hebt over de COM extensie zou je het volgende kunnen proberen.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$hostname = ".";
$serviceName = "<SERVICE_NAME>";

$wmi = new COM("WinMgmts:{impersonationLevel=impersonate}//{$hostname}/root/cimv2");
$service = $wmi->Get("Win32_Service.Name='$serviceName'");

// start service
if($service->State == 'Running') echo "Service already started.";
else
{
    echo "Enabling service, ", $service->Name, "...<br>";
    $service->StartService();
}
Als je dat via een andere gebruiker wilt doen, kun je het volgende proberen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$hostname = ".";
$username = "";
$password = "";

$wmi = new COM("WinMgmts:{impersonationLevel=impersonate}//{$hostname}/root/cimv2");
$wbemLoc = new COM("WbemScripting.SWbemLocator");
$wbemServices = $wbemLoc->ConnectServer($hostname, "root\cimv2", $username, $password);
$wmi->Security_->ImpersonationLevel = 3;

$service = $wbemServices->Get("Win32_Service.Name='$serviceName'");

// start service
if($service->State == 'Running') echo "Service already started.";
else
{
    echo "Enabling service, ", $service->Name, "...<br>";
    $service->StartService();
}


Zie ook de volgende MSDN link: http://msdn2.microsoft.com/en-us/library/aa389290.aspx

Weet niet zeker of dat zo werkt hoor. Probeer er maar even mee te stoeien.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

Ondanks dat PHP het stomtoevallig wel correct parset zou ik alsnog die backslash even netjes escapen, het is namelijk in principe fout gedrag wat ze best wel eens in de toekomst kunnen corrigeren.

@eghie: ik zou persoonlijk geen serveradmin-passes in PHP-code zetten ;)

[ Voor 9% gewijzigd door curry684 op 30-09-2007 23:38 ]

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • PrisonerOfPain
  • Registratie: Januari 2003
  • Laatst online: 26-05 17:08
curry684 schreef op zondag 30 september 2007 @ 23:37:het is namelijk in principe fout gedrag wat ze best wel eens in de toekomst kunnen corrigeren.
Het is duidelijk gedocumenteerd gedrag wat bij een aanpassing vrijwel alle applicaties zou breaken, denk je echt dat ze dat gaan aanpassen? Misschien het hoofdstuk over strings nog eens doornemen?
Note that if you try to escape any other character, the backslash will also be printed! So usually there is no need to escape the backslash itself.
[...]
Again, if you try to escape any other character, the backslash will be printed too!

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

curry684 schreef op zondag 30 september 2007 @ 23:37:
[...]

Ondanks dat PHP het stomtoevallig wel correct parset zou ik alsnog die backslash even netjes escapen, het is namelijk in principe fout gedrag wat ze best wel eens in de toekomst kunnen corrigeren.

@eghie: ik zou persoonlijk geen serveradmin-passes in PHP-code zetten ;)
Uiteraard lijkt me dat niet gewenst nee. Maar dit is wel ongeveer de manier om in te loggen. Geen idee of het ook anders kan. Maar als je zoiets nodig zou hebben voor bijvoorbeeld een beheers site, dan kun je het de gebruiker laten invoeren. Ik zou het inderdaad niet in een vast script vooringevuld zetten.

Acties:
  • 0 Henk 'm!

  • Bud_s
  • Registratie: Maart 2002
  • Laatst online: 20-09 16:55

Bud_s

Team Anticimex & Lock

Verwijderd schreef op zaterdag 29 september 2007 @ 11:25:
[knip]
Run As is een idee, maar hoe laat ik dat PHP script dat doen dan?
In de batch file staat enkel net stop/start.
Normaal is het probleem met runas dat je manueel een password moet opgeven en de CL dat niet ondersteund.

Er is een oplossing met VBscript

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

PrisonerOfPain schreef op zondag 30 september 2007 @ 23:58:
[...]

Het is duidelijk gedocumenteerd gedrag wat bij een aanpassing vrijwel alle applicaties zou breaken, denk je echt dat ze dat gaan aanpassen? Misschien het hoofdstuk over strings nog eens doornemen?
Nee, de PHP-developers staan er echt om bekend ja dat ze nooit backwards compatibility op ernstige manier breaken :D

(afgezien van in zo ongeveer iedere major en minor release die ze ooit hebben uitgebracht ;) )

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • ChessSpider
  • Registratie: Mei 2006
  • Laatst online: 01-08 19:01
Ik heb een batch bestand gemaakt met daarin een shutdown commando om de server computer opnieuw op te starten.

Dat BAT bestand kreeg ik niet direct aan de praat, dus heb ik er een snelkoppeling van gemaakt.
Vervolgens met het volgende commando werkte het:

@exec("C:\\reboot\\reboot.lnk");

Dat is dus ook op een windows systeem :)

reboot.lnk :
C:\WINDOWS\system32\shutdown.exe /r /t 0 /d 4:1 /f

Ik heb dus *geen* bat bestand meer, maar gwn direct het commando in de link gestopt.

Acties:
  • 0 Henk 'm!

  • eghie
  • Registratie: Februari 2002
  • Niet online

eghie

Spoken words!

ChessSpider schreef op maandag 01 oktober 2007 @ 20:47:
Ik heb een batch bestand gemaakt met daarin een shutdown commando om de server computer opnieuw op te starten.

Dat BAT bestand kreeg ik niet direct aan de praat, dus heb ik er een snelkoppeling van gemaakt.
Vervolgens met het volgende commando werkte het:

@exec("C:\\reboot\\reboot.lnk");

Dat is dus ook op een windows systeem :)

reboot.lnk :
C:\WINDOWS\system32\shutdown.exe /r /t 0 /d 4:1 /f

Ik heb dus *geen* bat bestand meer, maar gwn direct het commando in de link gestopt.
Je kunt zelfs dat commando gewoon rechtstreeks in exec() of system() of welk commando dan ook stoppen, of gewoon in een bat bestand, vbs bestand, een apart .exe bestand of zoals jij in een .lnk bestand. In allemaal moet hij het gewoon doen. Dus dat maakt allemaal niks uit. Behalve met parameter afhandeling kan het uitmaken, hoe je het commando aanroept. Maar in dit geval kan het prima vanuit een .bat bestand of rechtstreeks via exec().
Pagina: 1