Sida 1 av 1

Stänga av server via webbsida [LÖST]

Postat: 21 maj 2009, 19:54
av ChristofferL
Hej!

Har en "hemmaserver" med Ubuntu Server Edition 9.04, och skulle vilja ha möjligheten att stänga av servern via en webbsida (så att man kan stänga av den från vilken dator på nätverket som helst). Har Apache2, PHP5, php5-cli, mysql etc installerat.

Har försökt experiementera lite med shell_exec i PHP, och försökt med följande (som tyvärr inte fungerar... ingenting händer helt enkelt...):

Kod: Markera allt

<?php
		
			
		if ( $_POST['SubmitShutdown'] )
		{
		
		
					if ( shell_exec ( 'shutdown -h now' ) )
					{
						header ( "location: index.php?action=shutdown_server&s=1&msg=Server%20is%20now%20shutting%20down" ) ;
					}
					else
					{
						
						header ( "location: index.php?action=shutdown_server&s=0&msg=Error,%20could%20not%20shut%20down%20server" ) ;
					}
		}
		elseif ( $_POST['SubmitReboot'] )
		{
		
			if ( shell_exec ( 'reboot' ) )
			{
				header ( "location: index.php?action=reboot_server&s=1&msg=Server%20is%20now%20rebooting" ) ;
			}
			else
			{
				header ( "location: index.php?action=reboot_server&s=0&msg=Error,%20could%20not%20reboot%20server" ) ;
			}
		}
		else
		{
			###Do nothing :-)
		}
		
?>	
Vet inte om jag har tänkt helt fel med det här skriptet, eller är inne på fel bana, men det är något motsvarande jag tänkt mig. Jag gissar att problemet här har att göra med att man måste vara sudo för att kunna stänga av och reboota, men vet inte om det är möjligt att göra med php.
Tanken är helt enkelt att man via en knapp på webbsidan (som är lösenordsskyddad och bara kan nås från LAN) ska kunna slå av servern och reboota den. I dagsläget styr jag den via SSH, men alla datorer har inte SSH, och dessutom skulle det var enklare för resten av familjen om de bara behövde klicka på en knapp, ange ett lösenord, och sedan är är den avstängd :)

Tack på förhand!

/Christoffer

Edit: Förtydligade lite vad jag menade...

Re: Stänga av server via webbgränssnitt

Postat: 21 maj 2009, 20:02
av TicToc
Kan webmin vara något? http://webmin.com/

Re: Stänga av server via webbgränssnitt

Postat: 21 maj 2009, 20:43
av ChristofferL
TicToc skrev:Kan webmin vara något? http://webmin.com/
Tack för tipset, dock verkar Webmin vara lite för stort för mina behov... Föredrar att installera och ha igång så lite som möjligt för att göra servern säkrare (färre programvaror med säkerhetshål ;)) och lite snabbare.
Borde väl vara möjligt att med ett litet php-script kopplat till kanske ett annat script stänga av datorn, eller?

Re: Stänga av server via webbsida

Postat: 08 jun 2009, 17:08
av Exry
Nu har inte jag testat ditt skript men det kanske skulle fungera om du nu skrev "sudo" framför kommandona och sedan tillät att man får köra just 'reboot' och 'shutdown -h now' utan att ange lösenord? Typ i 'visudo'.
T.ex. lägga till en rad något i stil med: för att kunna använda det kommandot utan lösenord. (sudo /sbin/shutdown -h now)

Kod: Markera allt

%users ALL=NOPASSWD: /sbin/shutdown -h now

Re: Stänga av server via webbsida

Postat: 10 jun 2009, 20:17
av per9000
Du skulle kunna lägga in ett whoami i din kod för att se vem som kör scriptet - kolla sen om denne användare (apache?) har sudo-rättigheter.

/Per

Re: Stänga av server via webbsida

Postat: 10 jun 2009, 22:26
av ChristofferL
Exry skrev:Nu har inte jag testat ditt skript men det kanske skulle fungera om du nu skrev "sudo" framför kommandona och sedan tillät att man får köra just 'reboot' och 'shutdown -h now' utan att ange lösenord? Typ i 'visudo'.
T.ex. lägga till en rad något i stil med: för att kunna använda det kommandot utan lösenord. (sudo /sbin/shutdown -h now)

Kod: Markera allt

%users ALL=NOPASSWD: /sbin/shutdown -h now
per9000 skrev:Du skulle kunna lägga in ett whoami i din kod för att se vem som kör scriptet - kolla sen om denne användare (apache?) har sudo-rättigheter.
/Per
Tack för svaren!

Försökte lösa det genom en kombination av era svar, men lyckas inte riktigt...

Körde "whoami" i ett PHP-script och fick till svar "www-data" . Testade därför att skriva följande i /etc/sudoers:

Kod: Markera allt

www-data ALL=(root) /sbin/shutdown -h now, /sbin/reboot

Därefter har jag testat att i ett PHP-script köra "sudo shutdown -h now", "shutdown -h now", "sudo /sbin/shutdown -h now" och "/sbin/shutdown -h now" med shell_exec (och dessa har jag även testat med reboot). Inget händer tyvärr. Försökte också se om jag fick något svar med echo shell_exec ( "olika varianter..." ), men fick inte ut något.
Tacksam för all hjälp! Någon med fler ideér?

Edit: Försökte också med att lägga in det som Exry skrev ("%users ALL=NOPASSWD: /sbin/shutdown -h now"), men det hjälpte inte heller... Börjar fundera på om jag verkligen sparar det korrekt i sudoers? När jag skriver sudo visudo öppnas filen upp i nano. Jag skriver till ändringarna, klickar CTRL+O , den frågar om den ska spara som "/etc/sudoers.tmp", vilket jag låter den göra. Är "sudoers.tmp" kanske fel? Känns lite märkligt med en .tmp fil?

Re: Stänga av server via webbsida

Postat: 11 jun 2009, 13:47
av Exry
Ja, det ska vara rätt fil.

Fungerar shell_exec för dig alls? För det stod att den var avslagen när PHP körs i safe mode.

Ett kodexempel från PHP's manual.

Kod: Markera allt

<?php
$output = shell_exec('ls -lart');
echo "<pre>$output</pre>";
?>
Fungerar det för dig att skriva "sudo /sbin/shutdown -h now" direkt i terminalen utan lösenord?

Re: Stänga av server via webbsida

Postat: 11 jun 2009, 15:58
av ChristofferL
Exry skrev:Fungerar shell_exec för dig alls? För det stod att den var avslagen när PHP körs i safe mode.
Jepp, shell_exec fungerar, både med kodexemplet du gav och på de andra ställena i min kod som jag hämtar ut lite information från terminalen.
Exry skrev:Fungerar det för dig att skriva "sudo /sbin/shutdown -h now" direkt i terminalen utan lösenord?
Jag tror du har hittat felet... För i terminalen krävs jag fortfarande på lösenord trots %users ALL=NOPASSWD: /sbin/shutdown -h now i sudoers...
Men hur kan man gå vidare här?

Re: Stänga av server via webbsida

Postat: 11 jun 2009, 17:10
av Exry
[Edit]: Dum jag är... Byt ut '%users' mot 'www-data' eller vad du nu får ut när du kör whoami med skriptet, som per9000 tipsade dig om här ovan.

Något annorlunda än vad du testade lite ovan tror jag, missade att du inte testade med NOPASSWD med användaren www-data:
www-data ALL=NOPASSWD: /sbin/shutdown -h now, /sbin/reboot

Re: Stänga av server via webbsida

Postat: 11 jun 2009, 17:55
av ChristofferL
Exry skrev:[Edit]: Dum jag är... Byt ut '%users' mot 'www-data' eller vad du nu får ut när du kör whoami med skriptet, som per9000 tipsade dig om här ovan.

Något annorlunda än vad du testade lite ovan tror jag, missade att du inte testade med NOPASSWD med användaren www-data:
www-data ALL=NOPASSWD: /sbin/shutdown -h now, /sbin/reboot
Tack så väldigt mycket :D
Det gjorde susen, nu både stänger den av och rebootar via webbgränssnittet. Borde ju tänkt på att testa med NOPASSWD innan också, men glömde de av någon anledning....

Tack än en gång för all hjälp!