Gå til innhold

Php setuid, sudo eller tilsvarende


Anbefalte innlegg

Kan man på no vis gi php (kjørt gjennom apache) tilgang til filer som apache ikke har tilgang på? Rett fram er det ikke, men med programmer kan man sette S-attributt på fila, slik at det vil kjøres som brukeren som eier binærfila.

Håper på noe tilsvarende i php - at dersom scriptet har S, så vil det bli kjørt med rettighetene til fileier - eller annen måte å oppnå det samme.

F.x sudo kunne vært en løsning, men hvordan hindrer man da at andre script kjørt av apache får sudo mulighet?

 

Problemet er at hvis man ikke kan løse dette på noe vis er det også enkelt å snappe opp f.x. andre brukeres mysql passord hvis man selv har tilgang til å legge php kode på serveren. Siden problemet sikkert er svært utbredt har vel noen også funnet en løsning?

 

(mysql passord må jo ligge i klartekst i en fil lesbar av apache for databasedevene websider. Man har selvsagt løsninger som å ikke ha noe passord. Eller kryptere det, men da må også dekrypteringsfunksjonen være tilgjengelig. I praksis beskytter disse metodene ingenting.)

Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+6132

Hvis du kjører på et unix-basert system kan du jo redigere /etc/sudoers og gi apache-useren rettigheter til visse kommandoer (systemkommandoer), eller på enkeltfiler kan du sette mappe og fil slik at andre har tilgang.

 

EDIT: Post 700 ;)

Endret av Slettet+6132
Lenke til kommentar
Gjest Slettet+6132
Men da har jo forsatt alle som har tilgang til å legge script på web de samme mulighetene til å hente kildekode og kjøre sudo på samme viset.

Poenget her må jo være at apache får forskjellig tilgang avhengig av hvem har eier scriptet som blir kjørt.

Da får du sette opp en egen webserver om det er så viktig.

 

Apache kjører bare som en fast bruker, feks httpd. Du kan ikke endre på denne brukeren uten å måtte stoppe webserveren. Så eneste måte apache kan få tilgang er å gi lesetilgang for alle. Slik er det bare ;)

Lenke til kommentar

Jeg tar alltid utgangspunkt i at allt er mulig med linux... det gjelder bare å finne ut hvordan.

 

At apache kun kjører som en bruker er bare delvis sant. Jeg har kjørt den med flere "wrappers" tidligere for å få spessielle tilganger.

 

Man kan også lage en brukergruppe "mine_webfiler" hvor apache og meg selv er eneste medlemmer for å forsikre seg om at andre kun får tilgang på filene gjennom apache. Problemet er at andre også kan få apache til å kjøre script, så det er bare marginalt sikrere.

Lenke til kommentar
Gjest Slettet+6132
Jeg tar alltid utgangspunkt i at allt er mulig med linux... det gjelder bare å finne ut hvordan.

 

At apache kun kjører som en bruker er bare delvis sant. Jeg har kjørt den med flere "wrappers" tidligere for å få spessielle tilganger.

 

Man kan også lage en brukergruppe "mine_webfiler" hvor apache og meg selv er eneste medlemmer for å forsikre seg om at andre kun får tilgang på filene gjennom apache. Problemet er at andre også kan få apache til å kjøre script, så det er bare marginalt sikrere.

Du får bare sette deg ned med et blankt ark foran deg da og skrive ned mulige måter du tror det går på da ;)

Lenke til kommentar
Du får bare sette deg ned med et blankt ark foran deg da og skrive ned mulige måter du tror det går på da ;)

Hvordan hva går? Hvordan lese andre brukeres kildekode? F.x slik:

$filename = "path/to/my/includefile.php"; 
$handler = fopen($filename, r); 
$cont = fread($handle, filesize($filename)); 
$cont = str_replace("<?", "[PHP", $cont); 
$cont = str_replace("?>", "PHP]", $cont); 
echo "<textarea>$cont</textarea>

 

Hvordan løse problemet? Enten få php til å sjekke eierskap på filer som åpnes med fopen og include*. Eller få php til å kjøre som eieren av scriptet (suid). Eller en eller annen form for begrenset sudo. Evt andre måter.

Hvordan noe av dette gjøres i praksis aner jeg ikke.

Lenke til kommentar
  • 2 uker senere...

Det finnes en sak i php.ini som gjør at du ikke får lov til å gå utenfor din 'home'-mappe. De fleste webhoster med respekt for seg selv bør ha skrudd på dette. Husker ikke helt hva det heter heller, basedir restriction eller noe lignende.

Lenke til kommentar

Openbasedir er det noe som heter. Den gjør at php ikke går utover en gitt mappe. Det løser imidlertid ingenting ettersom den ikke skiller på hvem som eier en fil. Dvs alle som har tilgang til å legge en phpfil på et sted hvor den kan nås fra web (mappa er inkludert i openbasedir) kan lage script som leser kildekoden i andre filer som er nåbare på web.

 

I tillegg kan man lage et perlscript som gjør det samme, og som ikke påvirkes av openbasedir.

 

 

Det beste forslaget jeg har fått til nå er å kjøre to instanser av apache på hver sin port som hver sin bruker. Hvor sidene på den som kjører på annen port legges i et iframe på den som kjører på port 80.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...