[PHP] BAT file aanroepen via PHP <> niet genoeg rechten?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Clock
  • Registratie: Maart 2005
  • Laatst online: 16:46
Beste,

Op mijn fileserver(tje) draaide ik altijd een bat file die een (binnen het netwerk gedeelde) HDD mirrorde naar een (niet gedeelde backup) HDD. Op deze fileserver draait ook een webserver, en middels PHP wordt de backup BAT file aangeroepen. Dit werkte altijd als een spreekwoordelijke tiet, tot nu.

Ik heb in het kader van stroombesparing en verhoogde betrouwbaarheid een NAS aangeschaft, die alle fileserver taken van de PC overneemt. De PC wordt op korte termijn over genomen door een Asrock ION PC'tje, die vervolgens de webserver en squeezecenter taken op zich neemt.

To the point: De backup-BAT file draait nu op de oude fileserver, en mirrort nu de NAS met een interne HHD van de fileserver. En hier gaat het mis. Als ik de BAT file binnen windows handmatig start gaat alles goed, maar zogauw het via de commandline aangeroepen wordt is er geen toegang meer tot de NAS. De NAS is gemapt naar een driveletter (Z), en deze is niet meer toegankelijk vanuit een BAT file als deze via PHP aangeroepen wordt ("Cannot find/acces specified folder..."). Nogmaals, bij het handmatig starten wél.

Heeft PHP onder een andere gebruiker/rechten toegang tot de commandline? Hoe kan ik ervoor zorgen dat BAT script aangeroepen vanuit PHP toegang krijgen tot de NAS?

Alvast bedankt!


Edit: het betreffende BAT scriptje
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
@echo off
echo ##############################
echo Backup bijwerken
echo ##############################

set temp=USE intern; INSERT INTO backup_history VALUES(NOW(), sp999sp
echo %temp% > changelog.sql

echo.

echo Bezig met vergelijken en bijwerken van backup
cd C:\webserver\www
mirror_def.exe Z:\Documenten D:\Documenten  >> changelog.sql

echo Bezig met vervangen van gevoelige characters in changelog query
call ssr 0 /SSR_QUOTE/ QUOTE changelog.sql
call ssr 0 /SSR_QUOTE//SSR_QUOTE/ DOUBLEQUOTE changelog.sql

echo Update compleet

set temp=sp999sp, sp999spinternsp999sp);
echo %temp% >> changelog.sql

call ssr 0 sp999sp ' changelog.sql

echo.

echo Changelog in database opslaan
cd C:\webserver\bin\mysql\mysql5.0.45\bin
mysql -u root -e "source C:\webserver\www\changelog.sql"

echo.

echo SQL bestand verwijderen
cd c:\webserver\www
del changelog.sql


Edit2: Er is een user+pass nodig voor toegang tot de NAS

[ Voor 27% gewijzigd door Clock op 04-11-2009 12:40 ]


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Wanneer je vanuit PHP iets start, dan doe je dat onder de user account waarop je webserver draait, en die zal inderdaad geen rechten hebben op het netwerk. Waarom doe je überhaupt zo lastig via PHP? Waarom zet je de batchfile niet als taak in de Windows Scheduler?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Clock
  • Registratie: Maart 2005
  • Laatst online: 16:46
NMe schreef op woensdag 04 november 2009 @ 12:59:
Wanneer je vanuit PHP iets start, dan doe je dat onder de user account waarop je webserver draait, en die zal inderdaad geen rechten hebben op het netwerk. Waarom doe je überhaupt zo lastig via PHP? Waarom zet je de batchfile niet als taak in de Windows Scheduler?
De webserver draait toch gewoon onder de ingelogde useraccount op de PC? Of heeft Apache andere account voor interactie met zijn omgeving (windows/commandline)?

Deze periodieke taak is inderdaad makkelijker uit te voeren via de Scheduler, echter heb ik ook nog 3 andere die niet periodiek of planbaar zijn. Zo is er bijv eentje die de YAMJ vernieuwd en deze upload naar de Popcornhour bij het toevoegen van nieuwe films. Dit gebeurt zeer onregelmatig en het is niet wenselijk dat deze eenmaal per uur draait (ivm onnodige belasting van IMDB, Moviemeter ed).

Acties:
  • 0 Henk 'm!

  • ZpAz
  • Registratie: September 2005
  • Laatst online: 19-09 22:44
Wanneer je vanuit PHP iets start, dan doe je dat onder de user account waarop je webserver draait,
Is dat onder windows ook zo? (bat file lijkt me windows).

Tweakers Time Machine Browser Extension | Chrome : Firefox


Acties:
  • 0 Henk 'm!

  • Clock
  • Registratie: Maart 2005
  • Laatst online: 16:46
Is er wellicht iemand die weet hoe ik het weer zou kunnen laten werken? Mijn dank is groot (worden).

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Clock schreef op zondag 08 november 2009 @ 16:43:
Is er wellicht iemand die weet hoe ik het weer zou kunnen laten werken? Mijn dank is groot (worden).
Uitzoeken onder welke user PHP cq. de webserver draait en die betreffende user rechten geven op het .bat bestand. Indien de webserver als een service draait zal hij waarschijnlijk onder de systeem account "SYSTEM" draaien.

Je moet dan trouwens ook de rechten aanpassen op de mappen / bestanden die door het batch bestand aangepast en/of gelezen worden.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • Clock
  • Registratie: Maart 2005
  • Laatst online: 16:46
Waar specificeer ik de SYSTEM user rechten in XP? Bij Systeembeheer=> Lokaal beveiligingsbeleid zijn een hoop rechten voor oa SYSTEM in te stellen, maar niet voor verschillende paden/mappen.

Acties:
  • 0 Henk 'm!

  • Taenadar
  • Registratie: Januari 2004
  • Laatst online: 19-09 16:31
Op de betreffende map of bestand rechten aan system geven moet gewoon lukken.

Als is de bovenstaande optie van een sheduled task een veel betere en makkelijkere optie is.

Acties:
  • 0 Henk 'm!

Verwijderd

Clock,

Apache (PHP) draait als windows service waarschijnlijk onder de "Local system account"

De grootste fout zit hem er in dat je in je script verwijs je naar de Z: drive... dit is een netwerk share die je bij je login toegewezen krijgt. Deze is niet toegewezen voor de "Local system account"

2 manieren om dit op te lossen:

1: een aparte user te creeren voor apache (GEEN ADMINISTRATOR), onder deze user aan te loggen, de Z: drive te mappen en vervolgens bij services aan te geven dat apache als deze user moet worden uitgevoerd.
(rechts klikken op "my computer" -> "manage" -> "services and applications" -> "services" -> dubbel klikken op "Apache" -> tabblad "log on" -> kies "This Account" -> username & password opgeven)

2: in het script een "NET USE" regel toe te voegen om de Z: drive te mappen, je moet er dan wel op letten dat je geen prompt voor een password krijgt. (tik op de commandprompt "net use /?" om te zien hoe dat precies werkt)

Persoonlijk zou ik voor optie 1 gaan omdat je dan onder deze user kan inloggen en je scripts echt kan testen

Acties:
  • 0 Henk 'm!

  • Clock
  • Registratie: Maart 2005
  • Laatst online: 16:46
Verwijderd schreef op woensdag 10 maart 2010 @ 10:34:
Clock,

Apache (PHP) draait als windows service waarschijnlijk onder de "Local system account"

De grootste fout zit hem er in dat je in je script verwijs je naar de Z: drive... dit is een netwerk share die je bij je login toegewezen krijgt. Deze is niet toegewezen voor de "Local system account"

2 manieren om dit op te lossen:

1: een aparte user te creeren voor apache (GEEN ADMINISTRATOR), onder deze user aan te loggen, de Z: drive te mappen en vervolgens bij services aan te geven dat apache als deze user moet worden uitgevoerd.
(rechts klikken op "my computer" -> "manage" -> "services and applications" -> "services" -> dubbel klikken op "Apache" -> tabblad "log on" -> kies "This Account" -> username & password opgeven)

2: in het script een "NET USE" regel toe te voegen om de Z: drive te mappen, je moet er dan wel op letten dat je geen prompt voor een password krijgt. (tik op de commandprompt "net use /?" om te zien hoe dat precies werkt)

Persoonlijk zou ik voor optie 1 gaan omdat je dan onder deze user kan inloggen en je scripts echt kan testen
Bedankt voor je reactie! Ik herkende ineens mijn topictitel in de recente reactielijst.

Ik heb een tijd geleden optie 2 uitgewerkt, dit vond ik na lang, lang, lang zoeken ergens op EE oid. Ondertussen draait er een andere setup (met de ION), en is het mirror script vervangen door een wat meer solide backupoplossing. Er draaien enkel nog wat monitor en grabber scripts waarvoor ik eens een nette oplossing moet zoeken. Nogmaals bedankt :)

Acties:
  • 0 Henk 'm!

  • doskabouter
  • Registratie: Oktober 2004
  • Laatst online: 15:04
Je kan natuurlijk ook naar \\server\sharenaam kopieren, dat is waarschijnlijk makkerlijker dan drivemappings

Het grote voordeel van windows is dat je meer dos-boxen kan openen


Acties:
  • 0 Henk 'm!

  • Kef
  • Registratie: Oktober 2004
  • Laatst online: 15:52

Kef

doskabouter schreef op vrijdag 12 maart 2010 @ 19:11:
Je kan natuurlijk ook naar \\server\sharenaam kopieren, dat is waarschijnlijk makkerlijker dan drivemappings
Kan niet in bat bestanden.

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Je kan in je batch-file toch ook een mapping maken? Aangezien het dan onder dezelfde user werkt, zou het moeten werken.

Als je Apache als service draait, kan je ook overwegen die service te verwijderen en een nieuwe aan te maken door middel van instsrv.exe, deze zit in de Windows 2003 resource kit.
Volgens mij kan je met instsrv.exe namelijk ook de gebruikersnaam opgeven waaronder de service moet draaien. :)
Pagina: 1