• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af SHL | 16.09.2010 22:04

Køre .sh fra web

Hjælp generelt
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
  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer10

# 1

14 år 9 måneder siden

Permalink

Indsendt af marlar den 16. september 2010 kl. 22:29

Permalink

Der er adskillige måder

Der er adskillige måder hvoraf en del ligner hinanden.

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
  • Log ind eller opret dig for at tilføje kommentarer

# 2

14 år 9 måneder siden

Permalink

Indsendt af SHL den 16. september 2010 kl. 22:35

Permalink

Og er det en sikker måde at

Og er det en sikker måde at gøre det på? Jeg fik afvide at exec var ret risikobetonet - dog ikke nogen nærmere forklaring.
  • Log ind eller opret dig for at tilføje kommentarer

# 3

14 år 9 måneder siden

Permalink

Indsendt af marx den 16. september 2010 kl. 22:44

Permalink

du kan også bruge

du kan også bruge system('kommando'), der gør det samme.

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.
  • Log ind eller opret dig for at tilføje kommentarer

# 4

14 år 9 måneder siden

Permalink

Indsendt af m_abs den 16. september 2010 kl. 22:45

Permalink

#2
Det er helt generelt en

#2
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.
  • Log ind eller opret dig for at tilføje kommentarer

# 5

14 år 9 måneder siden

Permalink

Indsendt af SHL den 16. september 2010 kl. 23:04

Permalink

Det jeg vil frem til er at

Det jeg vil frem til er at et klik på hjemmesiden kopierer en given mappe til en anden placering på harddisken samt sætter nogle permissions. Sådan kort fortalt :-)
  • Log ind eller opret dig for at tilføje kommentarer

# 6

14 år 9 måneder siden

Permalink

Indsendt af marlar den 16. september 2010 kl. 23:16

Permalink

Som #3 siger så er der et

Som #3 siger så er der et problem med sikkerheden hvis brugerinput indgår i den systemkommando som skal eksekveres. Det vil i så fald kræve en meget grundig "rensning" af input.

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.
  • Log ind eller opret dig for at tilføje kommentarer

# 7

14 år 9 måneder siden

Permalink

Indsendt af marlar den 16. september 2010 kl. 23:21

Permalink

Nå, i mellemtiden skrev du

Nå, i mellemtiden skrev du hvad du havde brug for :-)

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
  • Log ind eller opret dig for at tilføje kommentarer

# 8

14 år 9 måneder siden

Permalink

Indsendt af dudsen den 17. september 2010 kl. 08:43

Permalink

Sikkerhed

for lige at skinne lidt lys på sikkerhed og php
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.
  • Log ind eller opret dig for at tilføje kommentarer

# 9

14 år 9 måneder siden

Permalink

Indsendt af SHL den 18. september 2010 kl. 09:09

Permalink

Tak for hjælpen. Jeg

Tak for hjælpen. Jeg forsøger mig med PHP.

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?
  • Log ind eller opret dig for at tilføje kommentarer

# 10

14 år 9 måneder siden

Permalink

Indsendt af dudsen den 18. september 2010 kl. 11:14

Permalink

#9 så snart du kommer i i

#9 så snart du kommer i i den slags så har du PHP kørende uden safemode og med suid root, og altspå ingen sandbox.

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
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

En snak om Linux-kompatibel software 0
llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0

Seneste aktivitet

Virtuel maskine? 2
PCLinuxOS 27
Gode anmeldelser Zorin OS 17.3 3
Open Source-eksperimentet 3
Nulstilling af adgangskode 5
"Intet realistisk alternativ" - mig i r*ven 15
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2
Vanilla OS 15
Pepsi Challenge 4
Linuxin er nu migreret til Drupal 11 13
Et Dansk alternativ til Facebook 18

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !