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

Här diskuteras programmering och utveckling
ChristofferL
Inlägg: 112
Blev medlem: 07 sep 2006, 17:44
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

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

Inlägg 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...
Senast redigerad av 3 ChristofferL, redigerad totalt 11 gång.
TicToc
Inlägg: 2266
Blev medlem: 27 dec 2006, 17:28
OS: Kubuntu
Utgåva: 20.04 Focal Fossa LTS

Re: Stänga av server via webbgränssnitt

Inlägg av TicToc »

Kan webmin vara något? http://webmin.com/
ChristofferL
Inlägg: 112
Blev medlem: 07 sep 2006, 17:44
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

Re: Stänga av server via webbgränssnitt

Inlägg 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?
Användarvisningsbild
Exry
Inlägg: 230
Blev medlem: 18 nov 2007, 15:29
OS: Arch Linux
Utgåva: Vet inte/ingen utgåva passar
Ort: Stockholm

Re: Stänga av server via webbsida

Inlägg 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
Användarvisningsbild
per9000
Inlägg: 931
Blev medlem: 07 maj 2007, 11:06
OS: Ubuntu
Utgåva: 23.04 Lunar Lobster
Ort: Västerås
Kontakt:

Re: Stänga av server via webbsida

Inlägg 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
--
Per Erik Strandberg
Yet Another IT Consultant
ChristofferL
Inlägg: 112
Blev medlem: 07 sep 2006, 17:44
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

Re: Stänga av server via webbsida

Inlägg 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?
Användarvisningsbild
Exry
Inlägg: 230
Blev medlem: 18 nov 2007, 15:29
OS: Arch Linux
Utgåva: Vet inte/ingen utgåva passar
Ort: Stockholm

Re: Stänga av server via webbsida

Inlägg 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?
ChristofferL
Inlägg: 112
Blev medlem: 07 sep 2006, 17:44
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

Re: Stänga av server via webbsida

Inlägg 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?
Användarvisningsbild
Exry
Inlägg: 230
Blev medlem: 18 nov 2007, 15:29
OS: Arch Linux
Utgåva: Vet inte/ingen utgåva passar
Ort: Stockholm

Re: Stänga av server via webbsida

Inlägg 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
ChristofferL
Inlägg: 112
Blev medlem: 07 sep 2006, 17:44
OS: Ubuntu
Utgåva: 16.04 Xenial Xerus LTS

Re: Stänga av server via webbsida

Inlägg 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!
Skriv svar

Återgå till "Programmering och webbdesign"