Køre .sh fra web
Heysa
Kort og godt. Er det muligt at exe et sh fra et website. Dvs. en bruger på hjemmesiden skal kunne køre et script på serveren, men kan dette gøres på en sikker måde? Og gerne i PHP.
Mvh.
Søren
Kort og godt. Er det muligt at exe et sh fra et website. Dvs. en bruger på hjemmesiden skal kunne køre et script på serveren, men kan dette gøres på en sikker måde? Og gerne i PHP.
Mvh.
Søren
Kommentarer10
Der er adskillige måder
Jeg plejer at køre shell_exec:
$result = shell_exec("myscript.sh");
Resultatet af scriptet gemmes i $result. Scriptet skal have kørselsrettigheder for webserver (normalt www-data for Apache) og skal have en korrekt shebang-linje.
Ellers kan du alternativt bruge:
$result = shell_exec("sh myscript.sh");
http://dk.php.net/manual/en/function.shell-exec.php
Og er det en sikker måde at
du kan også bruge
et problem med sikkerheden kan være hvis du smider _GET eller _POST data i din kommando, eller på anden måde lader brugerinput have berøringsflade direkte med kommandolinien. Du åbner op for at folk kan embedde malware der tager kontrol over din root og andre nasty ting hvis du ikke passer på.
Derudover skal du altid spørge dig selv, om det virkelig er nødvendigt at afvikle shell kommandoer i et PHP script, snarere end at skrive funktionaliteten i PHP, eller at skrive et cronjob der kalder scriptet istedet.
#2
Det er helt generelt en
Det er helt generelt en dårlig ide at lade et php-script der er tilgængeligt via web afvikle andre programmer på serveren. Og jeg kan ikke se en "sikker" måde du kan gøre det du vil.
Hvis du fortæller lidt mere om hvad du vil, så kan det være jeg har en bedre løsning til formålet.
Det jeg vil frem til er at
Som #3 siger så er der et
Hvis det derimod er en fast kommando som skal køres, fx et bestemt script uden parametre, så er der intet sikkerhedsproblem fordi det er dig alene der bestemmer der resulterende kommandolinje. Har en hacker så meget adgang til din kode at han kan ændre kommandoen, er der alligevel ingen grænser for hvad skade han kan lave :-)
Dog er det helt rigtigt som #4 siger, at du bør overveje om du ikke kan lave det samme direkte i PHP. Det er bare ikke alt der kan lade sig gøre, eller ikke nær så effektivt, så muligvis kan du have en god grund til at køre en systemkommando.
Nå, i mellemtiden skrev du
Det kan du snildt gøre direkte i php, se:
http://de3.php.net/manual/en/function.chmod.php
http://de3.php.net/manual/en/function.chown.php
http://de3.php.net/manual/en/function.copy.php
Sikkerhed
upload og eksekvering af kode fra en "ubeskyttet" hjemmeside er det samme som at give alle fuld adgang til en shell-konsol en rimeligt dum ide.
Hvis du har styr på hvem der kan uploade shellscripts er problemet mildere, hvis du bare eksekvere et "kendt" shell script er problemet minimalt,
exec kører programmet i en alm login shell med den bruger som PHP er suid til. det er ofte en "priviligeret" bruger"
PHP kører i sin egen sandbox det giver lidt sikkerhed og med PHP_safemode er exec ikke tilgængelig, af gode grunde.
Er du i cgi mode og har slået apache's mod_userexec til og kører din hjemmeside som alm bruger så har du en situation hvor der realt ikke er forskel på hvad et php script(uden safemode) har adgang til og hvad et shellscript har.
Du kan skrive hjemmesider i sh(og alle andre sprog der er instaleret) via cgi det er ikke mere usikkert end PHP eller perl.
Men meget afhænger af din apache configuration.
Tak for hjælpen. Jeg
En anden ide jeg pusler med kræver man via Web kan oprette en bruger. For senere at kunne tilgå en service. Hvordan kunne den nød knækkes?
#9 så snart du kommer i i
Med mindre du har et specifik krav om at det skal værre PHP så brug et shell script suid'et til hvad der er nødvendigt det langt det sikreste da du på den måde kan undgå at hele din webserver skal køre med fuld root privilegie.
PHP frameworks har som hovedregel en historik af en del sikkerhedsproblemer, så måske det alligevel er bedre med et par simple shell scripts.
Hvis du bruger alm unix flade filer som pw/aut kan du bare redigere filerne direkte(men det er farligt) der fines php api'er til både LDAP/AD og YP/NIS