I Linux styres adgangen til filer via filtilladelser, attributter og ejerskab. Dette sikrer, at kun autoriserede brugere og processer kan få adgang til filer og mapper.
Denne vejledning dækker, hvordan du bruger kommandoen chmod
til at ændre adgangstilladelserne til filer og mapper.
Linux-filtilladelser #
Hvor vi går videre, skal vi forklare den grundlæggende Linux-tilladelsesmodel.
I Linux er hver fil tilknyttet en ejer og en gruppe og tildelt tilladelsesadgangsrettigheder for tre forskellige brugerklasser:
- Filens ejer.
- Gruppens medlemmer.
- Andre (alle andre).
Filejerskabet kan ændres ved hjælp af chown
og chgrp
kommandoerne.
Der er tre filtilladelsestyper, der gælder for hver klasse:
- Læsetilladelsen.
- Skrivetilladelsen.
- Den udførelsestilladelse.
Dette begreb giver dig mulighed for at angive, hvilke brugere der har tilladelse til at læse filen, skrive til filen eller udføre filen.
Filtilladelser kan ses ved hjælp af ls
kommandoen:
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
Det første tegn viser filtypen. Det kan være en almindelig fil (-
), en mappe (d
), et symbolsk link(l
) eller en anden speciel filtype.
De næste ni tegn repræsenterer filtilladelserne, tre tripletter af tre tegn hver. Den første triplet viser ejertilladelser, den anden gruppetilladelser, og den sidste triplet viser tilladelser til alle andre. Tilladelserne kan have forskellig betydning afhængigt af filtypen.
I eksemplet ovenfor betyder (rw-r--r--
), at filens ejer har læse- og skrivetilladelser (rw-
), mens gruppen og andre kun har læsetilladelser (r--
).
Hver af de tre tilladelsestripletter kan konstrueres af følgende tegn og har forskellige virkninger, alt efter om de er sat på en fil eller på en mappe:
Virkning af tilladelser på filer
Permission | Karakter | Betydning på fil |
---|---|---|
Læse | - |
Filen kan ikke læses. Du kan ikke se filens indhold. |
r |
Filen kan læses. | |
Skrive | - |
Filen kan ikke ændres eller modificeres. |
w |
Filen kan ændres eller modificeres. | |
Execute | - |
Filen kan ikke udføres. |
x |
Filen kan udføres. | |
s |
Hvis den findes i tripletten user , sætter den bit setuid . Hvis den findes i group -triplet, indstiller den setgid -bitten. Det betyder også, at x -flaget er sat.Når setuid – eller setgid -flagene er sat på en eksekverbar fil, udføres filen med filens ejer- og/eller gruppeprivilegier. |
|
S S
|
Samme som s , men x -flaget er ikke sat. Dette flag bruges sjældent på filer. |
|
t |
Hvis det findes i others -triplet sætter det sticky -bitten.Det betyder også, at x -flaget er sat. Dette flag er ubrugeligt på filer. |
|
T |
Samme som t , men x -flaget er ikke sat. Dette flag er ubrugeligt på filer. |
Virkning af tilladelser på mapper (mapper)
I Linux er mapper særlige typer af filer, der indeholder andre filer og mapper.
Permission | Karakter | Med betydning for mappe |
---|---|---|
Læse | - |
Mappens indhold kan ikke vises. |
r |
Mappens indhold kan vises. (f.eks. Du kan opremse filer i mappen med ls .) |
|
Skriv | - |
Mappens indhold kan ikke ændres. |
w |
Mappens indhold kan ændres. (Du kan f.eks. oprette nye filer, slette filer ..osv.) |
|
Udfør | - |
Mappen kan ikke ændres til. |
x |
Mappen kan navigeres ved hjælp af cd . |
|
s |
Hvis den findes i tripletten user , sætter den bit setuid . Hvis den findes i group -triplet, indstiller den setgid -bitten. Det betyder også, at x -flaget er sat. Når setgid -flaget er sat på en mappe, arver de nye filer, der oprettes i den, mappens gruppe-id (GID) i stedet for det primære gruppe-id for den bruger, der oprettede filen.setuid har ingen virkning på mapper. |
|
S |
Samme som s , men x -flaget er ikke sat. Dette flag er ubrugeligt på mapper. |
|
t |
Hvis det findes i others -triplet sætter det sticky -bitten.Det betyder også, at x -flaget er sat. Når sticky-bitten er sat på en mappe, er det kun filens ejer, mappens ejer eller den administrative bruger, der kan slette eller omdøbe filerne i mappen. |
|
T T
|
Samme som t , men x -flaget er ikke sat. Dette flag er ubrugeligt på mapper. |
Brug af chmod #
Kommandoen chmod
har følgende generelle form:
chmod MODE FILE...
Med kommandoen chmod
kan du ændre tilladelserne på en fil ved hjælp af enten en symbolsk eller numerisk tilstand eller en referencefil. Vi vil forklare tilstandene mere detaljeret senere i denne artikel. Kommandoen kan acceptere en eller flere filer og/eller mapper adskilt af et mellemrum som argumenter.
Kun root, filens ejer eller brugeren med sudo privilegier kan ændre tilladelserne på en fil. Vær ekstra forsigtig, når du bruger chmod
, især når du rekursivt ændrer tilladelserne.
Symbolsk (tekst) metode #
Syntaksen for kommandoen chmod
, når du bruger den symbolske tilstand, har følgende format:
chmod perms… FILE...
Det første sæt flag (), users flags, definerer, hvilke brugerklasser tilladelserne til filen ændres.
-
u
– Filens ejer. -
g
– De brugere, der er medlemmer af gruppen. -
o
– Alle andre brugere. -
a
– Alle brugere, identisk medugo
.
Hvis flagget users udelades, er standardflaget a
, og de tilladelser, der er angivet af umask, er ikke påvirket.
Det andet sæt af flag (), operationsflagene, definerer, om tilladelserne skal fjernes, tilføjes eller indstilles:
-
-
Fjerner de angivne tilladelser. -
+
Tilføjer angivne tilladelser. -
=
Ændrer de aktuelle tilladelser til de angivne tilladelser. Hvis der ikke er angivet nogen tilladelser efter symbolet=
, fjernes alle tilladelser fra den angivne brugerklasse.
Godkendelserne (perms...
) kan udtrykkeligt indstilles ved hjælp af enten nul eller et eller flere af følgende bogstaver: r
, w
, x
, X
, s
og t
. Brug et enkelt bogstav fra sættet u
, g
og o
, når du kopierer tilladelser fra en til en anden brugerklasse.
Ved fastsættelse af tilladelser for mere end én brugerklasse () skal du bruge kommaer (uden mellemrum) til at adskille de symbolske tilstande.
Nedenfor er der nogle eksempler på, hvordan du bruger kommandoen chmod
i symbolsk tilstand:
-
Giv gruppens medlemmer tilladelse til at læse filen, men ikke til at skrive og udføre den:
chmod g=r filename
-
Fjern tilladelsen til at udføre for alle brugere:
chmod a-x filename
-
Fjernelse af skrivetilladelsen for andre brugere:
chmod -R o-w dirname
-
Fjernelse af læse-, skrive- og udførelsestilladelsen for alle brugere undtagen filens ejer:
chmod og-rwx filename
Det samme kan også opnås ved at bruge følgende formular:
chmod og-rwx filename
Det samme kan også opnås ved at bruge følgende formular:
chmod a-x filename
-
chmod og= filename
-
Giv læse-, skrive- og udførelsestilladelse til filens ejer, læsetilladelser til filens gruppe og ingen tilladelser til alle andre brugere:
chmod u=rwx,g=r,o= filename
-
Føj filens ejertilladelser til de tilladelser, som medlemmerne af filens gruppe har:
chmod g+u filename
-
Føj en sticky bit til en given mappe:
chmod o+t dirname
Numerisk metode #
Syntaksen for kommandoen chmod
ved brug af numerisk metode har følgende format:
chmod NUMBER FILE...
Når du bruger den numeriske metode, kan du indstille tilladelserne for alle tre brugerklasser (ejer, gruppe og alle andre) på samme tid.
Det NUMBER
kan være et 3- eller 4-cifret tal.
Når der anvendes et 3-cifret tal, repræsenterer det første ciffer tilladelserne for filens ejer, det andet ciffer filens gruppe og det sidste ciffer alle andre brugere.
Hver skrive-, læse- og udførelsestilladelse har følgende talværdi:
-
r
(læse) = 4 -
w
(skrive) = 2 -
x
(udføre) = 1 - ingen tilladelser = 0
Tallet for tilladelser for en bestemt brugerklasse er repræsenteret ved summen af værdierne for tilladelserne for den pågældende gruppe.
For at finde frem til filens tilladelser i numerisk tilstand skal du blot beregne totalerne for alle brugerklasser. Hvis du f.eks. vil give læse-, skrive- og udførelsestilladelse til filens ejer, læse- og udførelsestilladelse til filens gruppe og kun læsetilladelse til alle andre brugere, skal du gøre følgende:
- Ejer: rwx=4+2+1=7
- Gruppe: r-x=4+0+1=5
- Andre: r-x=4+0+0+0=4
Med ovenstående metode kommer vi frem til tallet 754
, som repræsenterer de ønskede tilladelser.
For at opsætte flagene setuid
, setgid
og sticky bit
bruges et firecifret tal.
Når det 4-cifrede nummer anvendes, har det første ciffer følgende betydning:
- setuid=4
- setgid=2
- sticky=1
- ingen ændringer = 0
De næste tre cifre har samme betydning som ved brug af 3-cifret nummer.
Hvis det første ciffer er 0, kan det udelades, og tilstanden kan repræsenteres med 3 cifre. Den numeriske tilstand 0755
er den samme som 755
.
For at beregne den numeriske tilstand kan man også bruge en anden metode (binær metode), men den er lidt mere kompliceret. Det er tilstrækkeligt for de fleste brugere at vide, hvordan man beregner den numeriske tilstand ved hjælp af 4, 2 og 1.
Du kan kontrollere filens tilladelser i numerisk notation ved hjælp af stat
kommandoen:
stat -c "%a" filename
644
Her er nogle eksempler på, hvordan du kan bruge chmod
-kommandoen i numerisk tilstand:
-
Giv filens ejer læse- og skrivetilladelser og kun læsetilladelser til gruppemedlemmer og alle andre brugere:
chmod 644 dirname
-
Giv filens ejer læse-, skrive- og eksekveringstilladelser, læse- og eksekveringstilladelser til gruppemedlemmer og ingen tilladelser til alle andre brugere:
chmod 750 dirname
-
Giv læse-, skrive- og udførelsestilladelser og en sticky bit til en given mappe:
chmod 1777 dirname
-
Sæt rekursivt læse-, skrive- og udførelsestilladelser til filens ejer og ingen tilladelser til alle andre brugere i en given mappe:
chmod -R 700 dirname
Brug af en referencefil #
Med indstillingen --reference=ref_file
kan du indstille filens tilladelser til at være de samme som for den angivne referencefil (ref_file
).
chmod --reference=REF_FILE FILE
For eksempel vil følgende kommando tildele tilladelserne for file1
til file2
chmod --reference=file1 file2
Rekursivt ændre filens tilladelser #
For at operere rekursivt på alle filer og mapper under den angivne mappe skal du bruge indstillingen -R
(--recursive
):
chmod -R MODE DIRECTORY
For eksempel, for at ændre tilladelserne for alle filer og undermapper under mappen /var/www
til 755
skal du bruge:
chmod -R 755 /var/www
Operation på symbolske links #
Symboliske links har altid 777
tilladelser.
Som standard vil chmod
ændre tilladelserne til den fil, som linket peger på, når du ændrer et symbolsk link, chmod
ændre tilladelserne til den fil, som linket peger på.
chmod 755 symlink
Chancerne er, at du i stedet for at ændre ejerskabet til målet får en “kan ikke få adgang til ‘symlink’: Tilladelse nægtet”-fejl.
Fejlen opstår, fordi symlinks som standard på de fleste Linux-distributioner er beskyttet, og du kan ikke operere på målfilerne. Denne indstilling er angivet i /proc/sys/fs/protected_symlinks
. 1
betyder aktiveret og 0
deaktiveret. Det anbefales ikke at deaktivere beskyttelsen af symlinks.
Beskyttelse af filtilladelser i bulk #
Der er nogle gange situationer, hvor du har brug for at ændre tilladelser til filer og mapper i bulk.
Det mest almindelige scenarie er at ændre hjemmesidens filtilladelser rekursivt til 644
og mappens tilladelser til 755
.
Ved anvendelse af den numeriske metode:
find /var/www/my_website -type d -exec chmod 755 {} \;
find /var/www/my_website -type f -exec chmod 644 {} \;
Ved anvendelse af den symbolske metode:
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 {} \;
Kommandoen find
søger efter filer og mapper under /var/www/my_website
og videregiver hver fundet fil og mappe til kommandoen chmod
for at indstille tilladelserne.
Konklusion #
Kommandoen chmod
ændrer filens tilladelser. Tilladelserne kan indstilles ved hjælp af enten den symbolske eller numeriske tilstand.
For at få mere at vide om chmod
besøg chmod manpage.