In Linux wordt de toegang tot bestanden beheerd via de bestandsmachtigingen, attributen en eigendom. Dit zorgt ervoor dat alleen geautoriseerde gebruikers en processen toegang hebben tot bestanden en directory’s.
In deze handleiding wordt uitgelegd hoe u met het commando chmod
de toegangsrechten voor bestanden en directory’s wijzigt.
Linux-bestandsmachtigingen #
Voordat we verder gaan, leggen we eerst het basismodel voor Linux-machtigingen uit.
In Linux, wordt elk bestand geassocieerd met een eigenaar en een groep en toegewezen met toegangsrechten voor drie verschillende klassen van gebruikers:
- De eigenaar van het bestand.
- De leden van de groep.
- Anderen (iedereen anders).
Eigendom van bestanden kan worden gewijzigd met de chown
en chgrp
-commando’s.
Er zijn drie soorten bestandsmachtigingen die voor elke klasse gelden:
- De leesmachtiging.
- De schrijfmachtiging.
- De execute permissie.
Met dit concept kunt u aangeven welke gebruikers het bestand mogen lezen, naar het bestand mogen schrijven, of het bestand mogen uitvoeren.
Bestandspermissies kunnen worden bekeken met het ls
commando:
ls -l filename.txt
-rw-r--r-- 12 linuxize users 12.0K Apr 8 20:51 filename.txt|- | | | | | | || | | | | | +-----------> 7. Group| | | | | +-------------------> 6. Owner| | | | +--------------------------> 5. Alternate Access Method| | | +----------------------------> 4. Others Permissions| | +-------------------------------> 3. Group Permissions| +----------------------------------> 2. Owner Permissions+------------------------------------> 1. File Type
Het eerste teken geeft het bestandstype aan. Het kan een gewoon bestand zijn (-
), een directory (d
), een symbolische link (l
), of een ander speciaal bestandstype.
De volgende negen karakters geven de bestandspermissies weer, drie triplets van elk drie karakters. De eerste triplet geeft de eigenaar permissies, de tweede groep permissies, en de laatste triplet geeft iedereen anders permissies. De permissies kunnen een verschillende betekenis hebben, afhankelijk van het bestandstype.
In het bovenstaande voorbeeld (rw-r--r--
) betekent dat de eigenaar van het bestand lees- en schrijfpermissies heeft (rw-
), de groep en anderen hebben alleen leespermissies (r--
).
Elk van de drie permissie-tripletten kan worden opgebouwd uit de volgende tekens en heeft een verschillend effect, afhankelijk van of ze zijn ingesteld op een bestand of op een map:
Effect van toestemmingen op bestanden
Toestemming | Character | Betekenis op bestand |
---|---|---|
Lezen | - |
Het bestand is niet leesbaar. U kunt de inhoud van het bestand niet bekijken. |
r |
Het bestand is leesbaar. | |
Write | - |
Het bestand kan niet worden gewijzigd of aangepast. |
w |
Het bestand kan worden gewijzigd of aangepast. | |
Uitvoeren | - |
Het bestand kan niet worden uitgevoerd. |
x |
Het bestand kan worden uitgevoerd. | |
s |
Indien gevonden in het user triplet zet het de setuid bit. Als het gevonden wordt in het group triplet, zet het de setgid bit. Het betekent ook dat de x vlag is ingesteld.Wanneer de setuid of setgid vlaggen zijn ingesteld op een uitvoerbaar bestand, wordt het bestand uitgevoerd met de eigenaar- en/of groepsprivileges van het bestand. |
|
S |
Hetzelfde als s maar de x vlag is niet ingesteld. Deze vlag wordt zelden gebruikt in bestanden. |
|
t |
Indien gevonden in het others triplet zet het de sticky bit.Het betekent ook dat de x vlag is gezet. Deze vlag is nutteloos in bestanden. |
|
T |
Hetzelfde als t maar de x vlag is niet gezet. Deze vlag is nutteloos voor bestanden. |
Gevolgen van machtigingen voor directory’s (mappen)
In Linux zijn directory’s speciale typen bestanden die andere bestanden en directory’s bevatten.
Permission | Character | Meaning on Directory |
---|---|---|
Read | - |
De inhoud van de directory kan niet worden getoond. |
r |
De inhoud van de directory kan worden getoond. (bijv. U kunt bestanden in de directory weergeven met ls .) |
|
Write | - |
De inhoud van de directory kan niet worden gewijzigd. |
w |
De inhoud van de directory kan worden gewijzigd. (b.v. U kunt nieuwe bestanden maken, bestanden verwijderen ..etc.) |
|
Uitvoeren | - |
De directory kan niet worden gewijzigd. |
x |
De directory kan worden genavigeerd met cd . |
|
s |
Indien gevonden in het user triplet, zet het de setuid bit. Als het gevonden wordt in het group triplet, zet het de setgid bit. Het betekent ook dat de x vlag is gezet. Als de vlag setgid is ingesteld op een directory, erven nieuwe bestanden die daarin zijn gemaakt het groeps-ID (GID) van de directory, in plaats van het primaire groeps-ID van de gebruiker die het bestand heeft gemaakt.setuid heeft geen effect op directories. |
|
S |
Hetzelfde als s , maar de vlag x is niet ingesteld. Deze vlag is nutteloos op directories. |
|
t |
Indien gevonden in het others triplet zet het de sticky bit.Het betekent ook dat x vlag is gezet. Als de klevende bit is ingesteld op een directory, kan alleen de eigenaar van het bestand, de eigenaar van de directory, of de administratieve gebruiker de bestanden in de directory verwijderen of hernoemen. |
|
T |
Hetzelfde als t maar de x vlag is niet ingesteld. Deze vlag is nutteloos op directories. |
Gebruik chmod #
Het chmod
commando heeft de volgende algemene vorm:
chmod MODE FILE...
Het chmod
commando maakt het mogelijk om de permissies van een bestand te wijzigen met behulp van een symbolische of numerieke modus of een referentiebestand. We zullen de modi later in dit artikel in meer detail uitleggen. Het commando kan een of meer bestanden en/of mappen accepteren, gescheiden door een spatie als argumenten.
Alleen root, de eigenaar van het bestand of een gebruiker met sudo privileges kan de permissies van een bestand wijzigen. Wees extra voorzichtig wanneer u chmod
gebruikt, vooral wanneer u recursief de permissies wijzigt.
Symbolische (tekst) methode #
De syntax van het chmod
commando bij gebruik van de symbolische modus heeft het volgende formaat:
chmod perms… FILE...
De eerste set vlaggen (), gebruikersvlaggen, bepaalt voor welke gebruikersklassen de permissies van het bestand worden gewijzigd.
-
u
– De eigenaar van het bestand. -
g
– De gebruikers die lid zijn van de groep. -
o
– Alle andere gebruikers. -
a
– Alle gebruikers, identiek aanugo
.
Als de gebruikers vlag is weggelaten, is de standaard a
en de permissies die zijn ingesteld door umask worden niet beïnvloed.
De tweede set vlaggen (), de operatie vlaggen, definieert of de permissies moeten worden verwijderd, toegevoegd, of ingesteld:
-
-
Verwijdert de gespecificeerde permissies. -
+
Voegt gespecificeerde permissies toe. -
=
Verandert de huidige permissies in de gespecificeerde permissies. Als na het symbool=
geen machtigingen worden opgegeven, worden alle machtigingen van de opgegeven gebruikersklasse verwijderd.
De machtigingen (perms...
) kunnen expliciet worden ingesteld met nul of met een of meer van de volgende letters: r
, w
, x
, X
, s
, en t
. Gebruik een enkele letter uit de reeks u
, g
, en o
wanneer u rechten kopieert van de ene naar de andere gebruikersklasse.
Wanneer u rechten instelt voor meer dan een gebruikersklasse (), gebruik dan komma’s (zonder spaties) om de symbolische modi te scheiden.
Hieronder vindt u enkele voorbeelden van het gebruik van het chmod
commando in symbolische modus:
-
Geef de leden van de groep toestemming om het bestand te lezen, maar niet om het te schrijven en uit te voeren:
chmod g=r filename
-
Verwijder de toestemming voor uitvoeren voor alle gebruikers:
chmod a-x filename
-
Verwijder de schrijfrechten voor andere gebruikers:
chmod -R o-w dirname
-
Verwijder de lees-, schrijf-, en uitvoerrechten voor alle gebruikers behalve de eigenaar van het bestand:
chmod og-rwx filename
Hetzelfde kan ook worden bereikt met de volgende vorm:
chmod og= filename
-
Geef lees-, schrijf- en uitvoerrechten aan de eigenaar van het bestand, leesrechten aan de groep van het bestand en geen rechten aan alle andere gebruikers:
chmod u=rwx,g=r,o= filename
-
Voeg de eigenaarspermissies van het bestand toe aan de permissies die de leden van de groep van het bestand hebben:
chmod g+u filename
-
Voeg een sticky bit toe aan een gegeven directory:
chmod o+t dirname
Numerieke methode #
De syntaxis van het chmod
commando bij gebruik van de numerieke methode heeft de volgende opmaak:
chmod NUMBER FILE...
Bij gebruik van de numerieke methode kunt u de rechten voor alle drie de gebruikersklassen (eigenaar, groep, en alle anderen) tegelijk instellen.
De NUMBER
kan een getal van 3 of 4 cijfers zijn.
Wanneer een getal van 3 cijfers wordt gebruikt, vertegenwoordigt het eerste cijfer de machtigingen van de eigenaar van het bestand, het tweede cijfer de groep van het bestand, en het laatste cijfer alle andere gebruikers.
Elke schrijf-, lees-, en uitvoerpermissies hebben de volgende getallenwaarde:
-
r
(lezen) = 4 -
w
(schrijven) = 2 -
x
(uitvoeren) = 1 - geen permissies = 0
Het permissienummer van een specifieke gebruikersklasse wordt weergegeven door de som van de waarden van de permissies voor die groep.
Om de numerieke waarde van de permissies van een bestand te weten te komen, berekent u gewoon de totalen voor alle gebruikersklassen. Om bijvoorbeeld lees-, schrijf- en uitvoerrechten te geven aan de eigenaar van het bestand, lees- en uitvoerrechten aan de groep van het bestand en alleen leesrechten aan alle andere gebruikers, zou je het volgende doen:
- Eigenaar: rwx=4+2+1=7
- Groep: r-x=4+0+1=5
- Anderen: r-x=4+0+0=4
Met bovenstaande methode komen we op het getal 754
, dat de gewenste permissies weergeeft.
Om de setuid
, setgid
, en sticky bit
vlaggen in te stellen gebruiken we een viercijferig nummer.
Wanneer het 4-cijferige nummer wordt gebruikt, heeft het eerste cijfer de volgende betekenis:
- setuid=4
- setgid=2
- sticky=1
- geen wijzigingen = 0
De volgende drie cijfers hebben dezelfde betekenis als bij gebruik van een 3-cijferig nummer.
Als het eerste cijfer 0 is, kan het worden weggelaten, en kan de modus worden weergegeven met 3 cijfers. De numerieke modus 0755
is hetzelfde als 755
.
Om de numerieke modus te berekenen kunt u ook een andere methode gebruiken (binaire methode), maar die is iets gecompliceerder. Weten hoe je de numerieke modus berekent met 4, 2, en 1 is voldoende voor de meeste gebruikers.
U kunt de rechten van het bestand in de numerieke notatie controleren met het stat
commando:
stat -c "%a" filename
644
Hier volgen enkele voorbeelden van hoe u het chmod
commando in numerieke modus kunt gebruiken:
-
Geef de eigenaar van het bestand lees- en schrijfrechten en alleen leesrechten aan groepsleden en alle andere gebruikers:
chmod 644 dirname
-
Geef de eigenaar van het bestand lees-, schrijf- en uitvoerrechten, lees- en uitvoerrechten aan groepsleden en geen rechten aan alle andere gebruikers:
chmod 750 dirname
-
Geef lees-, schrijf-, en uitvoerrechten, en een sticky bit aan een gegeven directory:
chmod 1777 dirname
-
Recursief lees-, schrijf-, en uitvoerrechten aan de eigenaar van het bestand en geen rechten voor alle andere gebruikers op een gegeven directory:
chmod -R 700 dirname
Een referentie bestand gebruiken #
Met de --reference=ref_file
optie kunt u de permissies van het bestand gelijk stellen aan die van het opgegeven referentie bestand (ref_file
).
chmod --reference=REF_FILE FILE
Het volgende commando zal bijvoorbeeld de permissies van file1
toewijzen aan file2
chmod --reference=file1 file2
Recursief de permissies van het bestand wijzigen #
Om recursief op alle bestanden en mappen onder de opgegeven map te werken, gebruikt u de optie -R
(--recursive
):
chmod -R MODE DIRECTORY
Om bijvoorbeeld de rechten van alle bestanden en submappen onder de map /var/www
te wijzigen in 755
gebruikt u:
chmod -R 755 /var/www
Operatie van symbolische koppelingen #
Symbolische koppelingen hebben altijd 777
rechten.
Aan standaard, wanneer u de symlink’s rechten wijzigt, chmod
wijzigt u de rechten op het bestand waarnaar de link verwijst.
chmod 755 symlink
De kans is groot dat u, in plaats van het doel-eigendom te wijzigen, een foutmelding krijgt: “cannot access ‘symlink’: Permission denied” fout.
De fout treedt op omdat standaard op de meeste Linux distributies symlinks zijn beschermd, en je kunt niet werken op doelbestanden. Deze optie is gespecificeerd in /proc/sys/fs/protected_symlinks
. 1
betekent ingeschakeld en 0
uitgeschakeld. Het wordt aanbevolen om de symlink bescherming niet uit te schakelen.
Bestandspermissies in bulk wijzigen #
Soms zijn er situaties waarin u de permissies van bestanden en mappen in bulk moet wijzigen.
Het meest voorkomende scenario is om recursief de permissies van het website bestand te wijzigen in 644
en de permissies van de mappen in 755
.
Met de numerieke methode:
find /var/www/my_website -type d -exec chmod 755 {} \;
find /var/www/my_website -type f -exec chmod 644 {} \;
Met de symbolische methode:
find /var/www/my_website -type d -exec chmod u=rwx,go=rx {} \;
find /var/www/my_website -type f -exec chmod u=rw,go=r {} \;
Het find
commando zoekt naar bestanden en mappen onder /var/www/my_website
en geeft elk gevonden bestand en elke gevonden map door aan het chmod
commando om de permissies in te stellen.
Conclusie #
Het chmod
commando wijzigt de permissies van een bestand. De permissies kunnen worden ingesteld met behulp van de symbolische of numerieke modus.
Om meer te leren over chmod
bezoek de chmod manpage.