Ik heb over dit onderwerp al veel dingen gelezen, zoals: klik
Nu wil ik dit maken:
Dat je op een pagina kan zien welke servers er aan en uit zijn ( welke porten op 217.21.241.251 bedoel ik dus ) en dan dat je kan kiezen om de game-server die bij die Port hoort aan of uit te zette.
Ik weet dat het mogelijk is met bijvoorbeel webmin, maar ik wil het graag zelf doen & leren. ( anders heb ik er nog niks aan.. )
Ik weet dat er in andere topics dit ook allemaal is besproken, maar ik kon nergens een ander goed antwoord vinden.
Zou iemand me kunnen helpen??? ( nog 1 ding: de server is he-le-maal van mezelf, ik kan dus als root inloggen, en de website om de server te beheren, draait op een ANDERE server dan die beheerd moet worden. )
Mijn Operating System op de server is: FreeBSD 5.4
Je kan via PHP heel makkelijk terminal commando's uitvoeren.
Dit is een functie die alle manieren die er zijn om de terminal te benanderen vanuit PHP probeert:
<?php
function open_terminal($code) {
if(function_exists('exec')) {
@exec($code, $buffer);
$this->data = implode("n" , $buffer);
} elseif(function_exists('shell_exec')) {
$this->data = @shell_exec($code);
} elseif(function_exists('system')) {
@ob_start();
@system($code);
$this->data = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($code);
$this->data = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($handle = @popen($code, "r"))) {
while(!@feof($handle)) {
$this->data .= @fread($handle, 1024);
}
@pclose($f);
} else {
trigger_error('There is no way to execude this code from PHP', E_USER_ERROR);
}
}
?>
Het probleem daarna, tenminste, dat wat ik ervaar op mijn Linux bakje, is het uitvoeren onder een andere gebruiker. PHP wordt uitgevoerd onder de Apache gebruiker, dus alle commando's die PHP uitvoert worden ook uitgevoerd onder de Apache gebruiker. En aangezien de Apache gebruiker niet de rechten heeft, niet de rechten zou moeten hebben om bijvoorbeeld 'halt' of 'reboot' te kunnen uitvoeren, moet je die commando's uitvoeren als een andere gebruiker. Nu weet ik alleen niet hoe je dat moet oplossen.
Door te kijken naar `ps -elf ` of te zoeken naar de pid-bestanden van de services, of servers van die games zou je kunnen bepalen onder welk pid ze draaien, en daarmee welk pid je in `kill` moet meegeven.
PS: definitief overstappen uitstellen omdat je de programma's niet voor Linux hebt? Mijn hint: Probeer gewoon eens 2 weken alleen Linux te draaien, en jezelf echt te verbieden om Windows te draaien. Ik denk dat je na die 2 weken wel zo ongeveer voor ieder programma een Linux-tegenhanger hebt gevonden... zeg ik uit ervaring. Ik ben ook in 1 dag overgestapt van Windows naar Mac. Mijn 'haat' is overigens nu veranderd in medelijden >:)
Kan ik dan niet ff de rechten van mijn Apache User even 'iets' hoger maken?? ik zat te denken om Apache in de group 'wheel' te zetten, en root access te geven...
Moet ik dat script van u op mijn server zetten?? zo, ja: de Website die ik het wil late behere, staat niet op mijn server. Maar op een andere server.
ik speel namelijk af en toe een keer Call of Duty 2 en soms Unreal Touranament 2004.. Niek
Kijk met jou kan je praten! ik speel het zelf ook en heb in de top 15 van nederlandse spelers gestaan ^^ ,nu flink afgezakt omdat ik het minder speel tegenwoordig.
ik heb em illegaal, dus ik kan niet multiplayer
sjalalalala ik zij niks :-)
MaaR:
Jelmer schreef op 16.05.2006 22:39
Je kan via PHP heel makkelijk terminal commando's uitvoeren.
Dit is een functie die alle manieren die er zijn om de terminal te benanderen vanuit PHP probeert:
<?php
function open_terminal($code) {
if(function_exists('exec')) {
@exec($code, $buffer);
$this->data = implode("n" , $buffer);
} elseif(function_exists('shell_exec')) {
$this->data = @shell_exec($code);
} elseif(function_exists('system')) {
@ob_start();
@system($code);
$this->data = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists('passthru')) {
@ob_start();
@passthru($code);
$this->data = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($handle = @popen($code, "r"))) {
while(!@feof($handle)) {
$this->data .= @fread($handle, 1024);
}
@pclose($f);
} else {
trigger_error('There is no way to execude this code from PHP', E_USER_ERROR);
}
}
?>
Het probleem daarna, tenminste, dat wat ik ervaar op mijn Linux bakje, is het uitvoeren onder een andere gebruiker. PHP wordt uitgevoerd onder de Apache gebruiker, dus alle commando's die PHP uitvoert worden ook uitgevoerd onder de Apache gebruiker. En aangezien de Apache gebruiker niet de rechten heeft, niet de rechten zou moeten hebben om bijvoorbeeld 'halt' of 'reboot' te kunnen uitvoeren, moet je die commando's uitvoeren als een andere gebruiker. Nu weet ik alleen niet hoe je dat moet oplossen.
Door te kijken naar `ps -elf ` of te zoeken naar de pid-bestanden van de services, of servers van die games zou je kunnen bepalen onder welk pid ze draaien, en daarmee welk pid je in `kill` moet meegeven.
PS: definitief overstappen uitstellen omdat je de programma's niet voor Linux hebt? Mijn hint: Probeer gewoon eens 2 weken alleen Linux te draaien, en jezelf echt te verbieden om Windows te draaien. Ik denk dat je na die 2 weken wel zo ongeveer voor ieder programma een Linux-tegenhanger hebt gevonden... zeg ik uit ervaring. Ik ben ook in 1 dag overgestapt van Windows naar Mac. Mijn 'haat' is overigens nu veranderd in medelijden >:)
Kan ik dan niet ff de rechten van mijn Apache User even 'iets' hoger maken?? ik zat te denken om Apache in de group 'wheel' te zetten, en root access te geven...
Moet ik dat script van u op mijn server zetten?? zo, ja: de Website die ik het wil late behere, staat niet op mijn server. Maar op een andere server.
Kan ik dan niet ff de rechten van mijn Apache User even 'iets' hoger maken?? ik zat te denken om Apache in de group 'wheel' te zetten, en root access te geven...
Je snapt dat ik jou voor die uitspraak mag laten liquideren door een paar hele vervelende tsjechen.
Wat je wel kan doen is een aparte server (programma bedoel ik hier, andere instantie van Apache bijvoorbeeld), het liefst alleen beschikbaar via https, en op een andere poort laten draaien met 'iets hogere' rechten. Met iets hogere bedoel ik dat hij naast alleen de strikt nootzakelijke om te draaien ook de rechten heeft op die commando's uit te voeren die jij wil, maar dan ook alleen die, en geen anderen.
Maar eigenlijk kan je dat alleen realiseren als je vrij veel af weet van hoe dat moet, en als je de server volledig zelf mag beheren. Bij shared hosting kan je dit al uit je hoofd zetten.
Het fijnste blijft natuurlijk gewoon handmatige ssh toegang.
Apache 'meer rechten' geven is een zeer fout idee. Je maakt het dan voor hackers wel heel erg makkelijk. Als je bijvoorbeeld een niet geheel goed beveiligd formulier hebt zou het zo maar kunnen dat je met een beetje handigheid je server even totaal leeg gooit. Zo'n commando bestaat slecht uit 5 characters en leeg is je bakkie.
Als je zeker weet dat je bepaalde commando's wilt laten uitvoeren door Apache en je weet zeker dat dat dus echt veilig is, dan zou je de rechten van die programma's kunnen versoepelen. Persoonlijk raad ik ook dat af, maar ja, het is jouw server.
Het is ook geen script, het is een functie! Ook een tip, haal voor het testen eens alle @ weg. Ik neem aan dat je een beetje kennis van PHP hebt, en hoe je met functies om moet gaan...
<?php
function open_terminal($code) {
if(function_exists('exec')) {
exec($code, $buffer);
$this->data = implode("n" , $buffer);
} elseif(function_exists('shell_exec')) {
$this->data = shell_exec($code);
} elseif(function_exists('system')) {
ob_start();
system($code);
$this->data = ob_get_contents();
ob_end_clean();
} elseif(function_exists('passthru')) {
ob_start();
passthru($code);
$this->data = ob_get_contents();
ob_end_clean();
} elseif(is_resource($handle = popen($code, "r"))) {
while(!feof($handle)) {
$this->data .= fread($handle, 1024);
}
pclose($f);
} else {
trigger_error('There is no way to execude this code from PHP', E_USER_ERROR);
}
}
open_terminal();
?>
Dat heb ik nu staan, en deze errors krijg ik:
Warning: Missing argument 1 for open_terminal(), called in /usr/local/www/data-dist/server.php on line 27 and defined in /usr/local/www/data-dist/server.php on line 2
Warning: exec() [function.exec]: Cannot execute a blank command in /usr/local/www/data-dist/server.php on line 4
Warning: implode() [function.implode]: Bad arguments. in /usr/local/www/data-dist/server.php on line 5
Fatal error: Using $this when not in object context in /usr/local/www/data-dist/server.php on line 5
En ik snap er geen kont van :p
Weet iemand WAT het probleem is?? :p ( ik werk eigenlijk ( bijna ) nooit met functies )