Bestandspermissies Het is belangrijk om je ervan te verzekeren dat je systeembestanden niet open staan voor aanpassingen door gebruikers en groepen die zulk systeemonderhoud niet zouden moeten doen. Unix scheidt toegangsbeheer op bestanden en directory's volgens drie kenmerken: eigenaar, groep en anderen. Er is altijd exact één eigenaar, een willekeurig aantal leden van de groep en alle anderen. Een korte uitleg van Unix permissies: Eigendom - Welke gebruiker(s) en groep(en) heeft/hebben het beheer over de permissie-instellingen van de node en parent van de node. Permissies - Bits die kunnen worden ingesteld of opnieuw ingesteld kunnen worden om bepaalde soorten toegang tot ze te kunnen verlenen. Permissies voor directory's kunnen een andere betekenis hebben dan dezelfde set permissies voor bestanden. Lezen: De mogelijkheid hebben om de inhoud van een bestand te kunnen lezen De mogelijkheid hebben om een directory te kunnen lezenSchrijven: De mogelijkheid hebben om een bestand te kunnen toevoegen of wijzigen De mogelijkheid hebben om bestanden in een directory te kunnen verwijderen of verplaatsen Uitvoeren: De mogelijkheid hebben om een binair programma of shell script uit te kunnen voeren De mogelijkheid hebben om in een directory te kunnen zoeken, gecombineerd met leestoegang Save Text attribuut: (Voor directory's)Het "sticky bit" heeft ook een andere betekenis als het toegepast wordt op directory's dan wanneer het toegepast wordt op bestanden. Als het "sticky bit" wordt ingesteld op een directory, mag een gebruiker alleen bestanden verwijderen die zijn eigendom zijn of waarvoor hem expliciet schrijfpermissie is verleend, zelfs wanneer hij schrijfpermissie heeft voor de directory. Dit is ontworpen voor directory's als /tmp, die schrijfpermissie voor iedereen hebben, maar waar het misschien niet wenselijk is dat elke gebruiker naar wens bestanden kan verwijderen. Het "sticky bit" is te zien als een t in een lange directory opsomming. SUID attribuut: (Voor bestanden) Dit beschrijft set-uder-id permissies op het bestand. Als de set-user-ID access mode is ingesteld in de eigendomsrechten en het bestand is executable, zullen processen die het uitvoeren toegang verkrijgen tot systeembronnen, gebaseerd op de gebruiker die eigenaar van het bestand is, in tegenstelling tot de gebruiker die het proces heeft aangemaakt. Dit is de oorzaak van de vele "buffer overflow" misbruiken. SGID attribuut: (Voor bestanden)Indien ingesteld in de groeppermissies, beheert deze bit de "set-group-ID" status van een bestand. Dit gaat op dezelfde manier als SUID, behalve dat het nu op de groep betrekking heeft. Het bestand moet executable zijn voordat dit enig effect kan hebben. SGID attribuut: (Voor directory's)Als je het SGID bit op een directory instelt (met chmod g+s directory), hebben bestanden die in die directory aangemaakt zijn hun groep ingesteld op de groep van de directory. Jij - De eigenaar van het bestand Groep - De groep waar je toe behoort Iedereen - Iedereen op het systeem die niet de eigenaar is en geen deel uitmaakt van de groepBestandsvoorbeeld: -rw-r--r-- 1 kevin users 114 Aug 28 1997 .zlogin 1e bit - directory? (nee) 2e bit - lezen door eigenaar? (ja, door kevin) 3e bit - schrijven door eigenaar? (ja, door kevin) 4e bit - uitvoeren door eigenaar? (nee) 5e bit - lezen door groep? (ja, door users) 6e bit - schrijven door groep? (nee) 7e bit - uitvoeren door groep? (nee) 8e bit - lezen door iedereen? (ja, door iedereen) 9e bit - schrijven door iedereen? (nee) 10e bit - uitvoeren door iedereen? (nee) De volgende regels zijn voorbeelden van de minimale set van permissies die vereist zijn voor de beschreven toegang. Misschien wil je meer permissies geven dan hetgeen hier opgesomd is, maar dit zou moeten beschrijven wat deze minimale permissies op bestanden doen: -r-------- Staat leestoegang op het bestand toe aan de eigenaar. --w------- Staat het de eigenaar toe om het bestand aan te passen of te verwijderen.(Merk op dat iedereen met schrijfpermissie op de directory waar het bestand zich in bevindt, het kan overschrijven en dus verwijderen.) ---x------ De eigenaar kan dit programma uitvoeren, maar geen shell scripts waarvoor ook nog leestoegang nodig is. ---s------ Uitvoeren is mogelijk met een effectieve User-ID = naar eigenaar. --------s- Uitvoeren is mogelijk met een effectieve Group-ID = naar groep. -rw------T Geen update van "last modified time". Wordt meestal gebruikt voor swap bestanden. ---t------ Geen effect.(voorheen sticky bit) Directoryvoorbeeld: drwxr-xr-x 3 kevin users 512 Sep 19 13:47 .public_html/ 1e bit - directory? (ja, het bevat veel bestanden) 2e bit - lezen door eigenaar? (ja, door kevin) 3e bit - schrijven door eigenaar? (ja, door kevin) 4e bit - uitvoeren door eigenaar? (ja, door kevin) 5e bit - lezen door groep? (ja, door users) 6e bit - schrijven door groep? (nee) 7e bit - uitvoeren door groep? (ja, door users) 8e bit - lezen door iedereen? (ja, door iedereen) 9e bit - schrijven door iedereen? (nee) 10e bit - uitvoeren door iedereen? (ja, door iedereeen) De volgende regels zijn voorbeelden van de minimale set van permissies die vereist zijn voor de beschreven toegang. Misschien wil je meer permissies geven dat hetgeen hier opgesomd is, maar dit zou moeten beschrijven wat deze minimale permissies op directory's doen: dr-------- De inhoud kan opgesomd worden, maar bestandsattributen kunnen niet gelezen worden. d--x------ De directory is toegankelijk en kan in opdrachten worden verwerkt waarin het directorypad wordt gebruikt. dr-x------ Bestandsattributen kunnen gelezen worden door de eigenaar d-wx------ Bestanden kunnen worden aangemaakt/verwijderd, zelfs als de directory niet de huidige is. d------x-t Voorkomt dat bestanden worden verwijderd door anderen met schrijftoegang. Wordt gebruikt bij /tmp. d---s--s-- Geen effect. Systeemconfiguratie bestanden (meestal in /etc) zijn meestal modus 640 (-rw-r-----) en eigendom van root. Afhankelijk van de beveiligingsvereisten van je site kun je dit aanpassen. Laat nooit enige systeembestanden beschrijfbaar zijn voor een groep of iedereen. Sommige configuratiebestanden, waaronder /etc/shadow, zouden alleen leesbaar voor root moeten zijn en directory's in /etc zouden op z'n minst niet toegankelijk voor anderen moeten zijn. SUID shell scriptsSUID shell scripts vormen een serieus beveiligingsrisico en om deze reden zal de kernel ze niet toejuichen. Ongeacht hoe veilig je denkt dat een shell script is, het kan worden misbruikt om een cracker een root shell te geven.