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