6 mei 2008
De GNU-programma's updatedb en locate brengen bestanden op het filesystem in kaart zodat je er sneller in kunt zoeken. Dat is handig, maar als je updatedb als root draait, leg je een world readable database aan van álle bestanden op je filesystem.
updatedb in pincipe veilig
Het programma updatedb vraagt een listing op van alle bestanden in het filesystem en zet deze in een database. Een gebruiker kan alleen de bestanden in kaart brengen waar hij/zij een listing van kan krijgen. Als Marietje haar homedir heeft dichtgezet, kan Jantje dus geen lijst krijgen van haar bestanden.
Root kan een listing krijgen van alle bestanden op het filesystem; daar is hij/zij root voor. Root kan dus een database aanleggen van alle bestanden op het filesystem. Op zich is dat niet verkeerd; root kan toch al bij de bestanden komen.
Rechten op de database van updatedb
Het probleem zijn de rechten op de database die updatedb aanlegt. Onder Debian Testing (Lenny at the moment) leeft deze database in het bestand /var/cache/locate/locatedb. De rechten op dat bestand zijn standaard 644 (-rw-r--r--).
Elke gebruiker op het systeem kan dus de door root samengestelde database inzien. Dat levert een behoorlijk privacy-risico op. Zo kan Jantje met locate pr0n of locate .jpg op zoek gaan naar pornografische afbeeldingen en stuiten op listing van bestanden waarvan Marietje niet wil dat iemand anders ze ziet.
Drie oplossingen
Het risico kan op twee manieren worden ingedamd.
-
updatedbniet als root draaien - Rechten op database van
updatedbinperken -
updatedballeen bepaalde directories laten indexeren
Door updatedb niet als root te draaien, komt er geen database van het hele filesystem. Gebruikers zijn dan zelf verantwoordelijk voor de informatie die zij beschikbaar stellen. Wil een gebruiker zijn/haar bestanden indexeren, dan kan hij/zij dat doen in een eigen database. Deze persoonlijke database kan hij/zij naar behoeven delen met andere gebruikers; problem solved.
Als je als root toch graag een complete database hebt, kun je de rechten op de database aanpassen. Verwijder de leesrechten voor andere gebruikers (chmod og-r locatedb), en de database is root-only. Doe dit wel elke keer na het draaien van updatedb, want updatedb zet de rechten weer terug naar 644!
Met de parameter --localpaths='/var/log /dev /boot…' kun je opgeven welke directories worden geïndexeerd. Dit komt neer op het whitelisten van directories. Om alles te indexeren behalve de homedirs moet je dus alle andere directories opgeven. Dit is arbeidsintensief en werkt fouten in de hand. Daarbij komt, dat vaak ook buiten de homedirs privacygevoelige informatie te vinden is.