blog_hero_Bestands- en mappenrechten

Bestands- en mappenrechten

Jul 22 2023

De basis

Rechten binnen Linux worden gemakkelijk als een numerieke waarde voorgesteld en werken met een groepering van drie verzamelingen aan rechten. Die drie zijn:

  • Eigenaar (Owner)
  • Groep (Group)
  • Anderen (Other)

Een voorbeeld van die rechten is dan 0775. De eerste 0 overlopen we later. Daarna volgt het cijfer voor Eigenaar, Groep en tot slot Anderen. Ook de vertaling van die drie laatste cijfers is vrij eenvoudig te vertalen als we het cijfer omzetten naar bit waarde. Voor het cijfer 7 is dat 111

1 = 4 -> Lezen (Read)
1 = 2 -> Aanpassen (Write)
1 = 1 -> Uitvoeren (Execute)

Standaard rechten

In Linux worden er standaard rechten voorzien. Voor mappen is 777 en bestanden 666. Die Uitvoeren-rechten zijn nodig op mappen om te kunnen zien wat de inhoud is van die map. Voor bestanden is het niet veilig om standaard uitvoer-rechten te geven.

Als jij nu een nieuw bestand aanmaakt met touch bestand of je maakt een nieuwe map aan met mkdir map en je controleert de rechten met ls -l, stat map of stat bestand, zal je merken dat deze niet de standaard rechten krijgt. De reden daarvoor is dat er bovenop de standaard rechten nog een extra systeem zit die rechten afneemt; umask

Umask

Het umask commando komt standaard met de shell meegeleverd zoals cd, export of history. Als je een man umask uitvoert in verschillende shells, krijg je dan ook verschillende pagina's te zien. In mijn mening is de man-pagina over umask binnen bash niet duidelijk maar als je binnen fish de man-pagina opvraagt, krijg je veel duidelijkere uitleg. Hier overlopen we het even.

Je kan umask zonder extra parameters uitvoeren om de ingestelde waarde terug te krijgen. In mijn geval is dat 0022. Deze cijfers worden bit-gewijs afgetrokken van de standaard rechten. Voor mappen wordt dat dan 0755 en voor bestanden 0644. Wil je dit leesbaarder zien kan je de -S flag meegeven en dan krijg je te zien welke rechten maximaal bewaard worden.

u=rwx,g=rx,o=rx

We kunnen dit niveau verhoren of verlagen door ofwel in cijfer of letter waarde het rechten niveau mee te geven aan het umask-commando. Hieronder geven we aan dat de standaard rechten mogen gebruikt worden.

umask 0000
# Ofwel
umask u=rwx,g=rwx,o=rwx

Het eerste cijfer

Vooraan de rechten zie je vaak een 0 terugkomen. Dit is niet per ongeluk. Deze gaat een extra instelling bewaren voor ons, namelijk of we een Set User ID, Set Group ID of een Sticky bit hebben ingesteld. Ook dit cijfer kan binair opgebouwd worden; 1 = 4 -> SUID
1 = 2 -> SGID
1 = 1 -> Sticky bit

Een ander ezelbruggetje voor de s is speciaal

Set User ID

Deze waarde is enkel relevant als je dit toepast op een bestand en specifiek een uitvoerbaar bestand. Hiermee gaat het namelijk lijken alsof de eigenaar het bestand uitvoert, ook al doet een andere gebruiker dat. Dit vooral handig voor commando's zoals passwd waar iedereen /etc/shadow moet kunnen manipuleren op een veilige manier. Dit kan je toepassen door:

chmod 4774 script.sh # In cijfers moeten we de volledige rechtenreeks steeds meegeven
# Ofwel
chmod u+s script.sh

Set Group ID

De SGID kan je instellen op zowel mappen als bestanden. Toegepast op een map krijgen nieuwe items onder die map automatisch de groep van de parent map mee. Bijvoorbeeld hebben we de map accounting waar ook een groep accounting is ingesteld. Hier kunnen we de SGID instellen met:

chmod 2775 accounting
# Ofwel
chmod g+s accounting

Als gebruiker milly hieronder een nieuwe map aanmaken, gaat deze ook de group accounting krijgen en niet milly wat standaard het geval is. Zo kan iedereen binnen de accounting group genieten van milly's nieuwe map.

Daarnaast kunnen we de SGID ook instellen op een bestand. Wordt dat bestand uitgevoerd, dan zal dat met de rechten van die groep gedaan worden. Gelijkaardig aan de SUID instelling

Sticky bit

Nog zo'n vreemde vogel is de Sticky bit. Als we deze instellen op een map kunnen nieuwe items daaronder enkel verwijderd of aangepast worden door de eigenaar of root. Is een andere gebruiker lid van eenzelfde groep die ingesteld is op zo'n item onder die map, dan kan die dat niet aanpassen of verwijderen.

In te stellen met:

chmod 1775 map
# Ofwel
chmod o+t map