In combinatie met verbeteringen als snapshots, biedt FreeBSD de veiligheid van Toegangscontrolelijsten voor Bestandssystemen (Access Control Lists, ACLs).
Met toegangscontrolelijsten wordt het standaard UNIX® rechtenmodel uitgebreid op een zeer verenigbare (POSIX®.1e) manier. Deze methodes stellen een beheerder in staat om gebruik te maken en voordeel te halen uit een geraffineerder beveiligingsmodel.
Om ondersteuning voor ACLs voor bestandssystemen in te schakelen dient het volgende in de kernel gecompileerd te worden:
options UFS_ACL
Als deze optie niet aanwezig is, dan wordt er een waarschuwing weergegeven als er wordt geprobeerd een bestandssysteem aan te koppelen dat gebruik maakt van ACLs. Deze optie is al geactiveerd in de GENERIC kernel. ACLs zijn afhankelijk van uitgebreide attributen die zijn ingeschakeld op het bestandssysteem. Uitgebreide attributen worden standaard ondersteund in het volgende generatie UNIX bestandssysteem UFS2.
Opmerking: Er is meer administratieve rompslomp nodig om uitgebreide attributen in te stellen op UFS1 dan op UFS2. De prestaties van uitgebreide attributen zijn op UFS2 ook veel beter. Daarom wordt UFS2 ook meestal aangeraden boven UFS1 bij het gebruik van toegangscontrolelijsten.
ACLs worden ingeschakeld door de
beheersvlag acls
op het moment van aankoppelen. Dit kan ook
in /etc/fstab staan. De vlag op het moment van aankoppelen kan
ook automatisch gezet worden op een persistente wijze met tunefs(8) door een
superblok in de bestandssysteemkop te wijzigen. In het algemeen wordt de voorkeur gegeven
aan de vlag in het superblok om een aantal redenen:
De ACLs vlag op het moment van
aankoppelen kan niet gewijzigd worden bij opnieuw aankoppelen (mount(8) -u
), maar alleen door een volledige umount(8) en een verse
mount(8). Dit
betekent dat ACLs niet ingeschakeld kunnen
worden op root-bestandssysteem na het opstarten. Het betekent ook dat de aard
van een bestandssysteem niet veranderd kan worden als het eenmaal in gebruik
is.
Het inschakelen van de superblokvlag zorgt ervoor dat het bestandssysteem altijd wordt aangekoppeld met de ACLs ingeschakeld, zelfs als het niet in fstab staat of als de apparaten van plaats veranderen. Hiermee wordt voorkomen dat het bestandssysteem wordt gebruikt zonder dat ACLs ingeschakeld zijn, wat ervoor zou kunnen zorgen dat ACLs onjuist worden toegepast wat weer kan zorgen voor beveiligingsproblemen.
Opmerking: Wellicht wordt het mogelijk om de ACLs via de vlag in te schakelen zonder een compleet verse mount(8), maar de ontwikkelaars vinden het wenselijk om het per ongeluk zonder ACLs aankoppelen te ontmoedigen, omdat er bijzonder vervelende gevolgen kunnen zijn als ACLs worden ingeschakeld, daarna worden uitgezet en weer worden ingeschakeld zonder dat de uitgebreide attributen worden geschoond. In het algemeen geldt dat als ACLs eenmaal zijn ingeschakeld voor een bestandssysteem, ze niet meer uitgeschakeld moeten worden, omdat de resulterende bestandsbescherming wellicht niet compatibel is met dat wat gebruikers van het systeem nodig hebben en het opnieuw aanzetten van ACLs kan leiden tot het opnieuw koppelen van voorheen bestaande ACLs aan bestanden waarvoor de toegangsrechten sindsdien zijn aangepast, wat kan leiden tot onverwachte situaties.
Bestandssystemen waarvoor ACLs zijn ingeschakeld worden weergegeven met een + (plus) teken als de toegangsrechten worden bekeken:
drwx------ 2 robert robert 512 Dec 27 11:54 private drwxrwx---+ 2 robert robert 512 Dec 23 10:57 directory1 drwxrwx---+ 2 robert robert 512 Dec 22 10:20 directory2 drwxrwx---+ 2 robert robert 512 Dec 27 11:57 directory3 drwxr-xr-x 2 robert robert 512 Nov 10 11:54 public_html
Hierboven is te zien dat mappen directory1, directory2 en directory3 allemaal gebruik maken van ACLs. De map public_html doet dat niet.
De ACLs van het bestandssysteem kunnen bekeken worden met het hulpprogramma getfacl(1). Om de ACL op het bestand test te bekijken zou het volgende commando nodig zijn:
% getfacl test #file:test #owner:1001 #group:1001 user::rw- group::r-- other::r--
Om de ACL op dit bestand te wijzigen wordt het hulpprogramma setfacl(1) als volgt gebruikt:
% setfacl -k test
De vlag -k
verwijdert alle bestaande ACLs van een bestand of bestandssysteem. De
methode die de voorkeur geniet is -b
gebruiken
omdat die optie de basisvelden die nodig zijn voor het laten werken van de
ACLs laat staan.
% setfacl -m u:trhodes:rwx,group:web:r--,o::--- test
Bij het commando hierboven, werd de optie -m
gebruikt
om de standaard ACL aan te passen. Omdat
er geen voorgedefinieerde instellingen waren, die waren verwijderd door het
commando daarvoor, werden nu de standaardinstellingen hersteld en de rechten die
werden aangegeven toegevoegd. Let op dat bij het toevoegen van een gebruiker of een
groep die niet bekend is op het systeem een foutmelding “Invalid argument” wordt geschreven naar stdout.