I Linux hanteras åtkomst till filer genom filbehörigheter, attribut och ägande. Detta säkerställer att endast auktoriserade användare och processer kan komma åt filer och kataloger.
Denna handledning behandlar hur man använder kommandot chmod
för att ändra åtkomsträttigheterna för filer och kataloger.
Linux File Permissions #
För att gå vidare förklarar vi den grundläggande Linux-behörighetsmodellen.
I Linux är varje fil associerad med en ägare och en grupp och tilldelas behörighetsrättigheter för tre olika användarkategorier:
- Filägaren.
- Gruppmedlemmarna.
- A andra (alla andra).
Filägarskap kan ändras med hjälp av kommandona chown
och chgrp
.
Det finns tre typer av filbehörigheter som gäller för varje klass:
- Läsbehörighet.
- Skrivbehörighet.
- Exekveringsbehörighet.
Med detta koncept kan du ange vilka användare som får läsa filen, skriva till filen eller exekvera filen.
Filbehörigheter kan visas med hjälp av ls
kommandot:
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örsta tecknet visar filtypen. Det kan vara en vanlig fil (-
), en katalog (d
), en symbolisk länk(l
) eller någon annan speciell filtyp.
De följande nio tecknen representerar filbehörigheterna, tre tripletter med tre tecken vardera. Den första tripletten visar ägarrättigheterna, den andra grupprättigheterna och den sista tripletten visar alla andra rättigheter. Behörigheterna kan ha olika betydelse beroende på filtypen.
I exemplet ovan innebär (rw-r--r--
) att filens ägare har läs- och skrivbehörighet (rw-
), gruppen och övriga har endast läsbehörighet (r--
).
Varje av de tre behörighetstripletterna kan konstrueras av följande tecken och får olika effekter beroende på om de sätts på en fil eller en katalog:
Effekt av behörigheter på filer
Permission | Karaktär | Betydelse på fil |
---|---|---|
Läs | - |
Filen är inte läsbar. Du kan inte se filens innehåll. |
r |
Filen är läsbar. | |
Skriv | - |
Filen kan inte ändras eller modifieras. |
w |
Filen kan ändras eller modifieras. | |
Execute | - |
Filen kan inte exekveras. |
x |
Filen kan exekveras. | |
s |
Om den finns i tripletten user sätter den biten setuid . Om den återfinns i tripletten group ställer den in setgid -biten. Det betyder också att x -flaggan är inställd.När setuid – eller setgid -flaggan är inställd på en körbar fil exekveras filen med filens ägar- och/eller gruppprivilegier. |
|
S |
Samma som s , men x -flaggan är inte inställd. Denna flagga används sällan på filer. |
|
t |
Om den hittas i tripletten others sätts sticky -biten.Det betyder också att x -flaggan är satt. Denna flagga är oanvändbar på filer. |
|
T |
Samma som t men x -flaggan är inte satt. Den här flaggan är värdelös på filer. |
Effekt av behörigheter på kataloger (mappar)
I Linux är kataloger speciella typer av filer som innehåller andra filer och kataloger.
Permission | Karaktär | Med innebörd på katalog |
---|---|---|
Läs | - |
Katalogens innehåll kan inte visas. |
r |
Katalogens innehåll kan visas. (t.ex. Du kan lista filerna i katalogen med ls .) |
|
Write | - |
Katalogens innehåll kan inte ändras. |
w |
Katalogens innehåll kan ändras. (t.ex. du kan skapa nya filer, radera filer ..osv.) |
|
Execute | - |
Katalogen kan inte ändras till. |
x |
Katalogen kan navigeras med cd . |
|
s |
Om den hittas i tripletten user ställer den in biten setuid . Om den hittas i tripletten group sätter den setgid -biten. Det betyder också att flaggan x är inställd. När setgid -flaggan är satt på en katalog ärver de nya filer som skapas i den katalogens grupp-ID (GID), istället för det primära grupp-IDet för den användare som skapade filen.setuid har ingen effekt på kataloger. |
|
S |
Samma som s men x -flaggan är inte satt. Denna flagga är oanvändbar på kataloger. |
|
t |
Om den hittas i tripletten others sätts sticky -biten.Det betyder också att x -flaggan är satt. När sticky-biten är inställd på en katalog kan endast filens ägare, katalogens ägare eller den administrativa användaren ta bort eller byta namn på filerna i katalogen. |
|
T T
|
Samma som t , men x -flaggan är inte inställd. Denna flagga är oanvändbar på kataloger. |
Användning av chmod #
Kommandot chmod
har följande allmänna form:
chmod MODE FILE...
Med kommandot chmod
kan du ändra behörigheterna för en fil med hjälp av antingen ett symboliskt eller numeriskt läge eller en referensfil. Vi kommer att förklara lägena mer i detalj senare i den här artikeln. Kommandot kan ta emot en eller flera filer och/eller kataloger separerade med mellanslag som argument.
Endast root, filägaren eller användaren med sudo privilegier kan ändra behörigheterna för en fil. Var extra försiktig när du använder chmod
, särskilt när du ändrar behörigheterna rekursivt.
Symbolisk (text) metod #
Syntaxen för chmod
-kommandot när du använder det symboliska läget har följande format:
chmod perms… FILE...
Den första uppsättningen flaggor (), användarflaggor, definierar vilka användarklasser som ändrar behörigheterna till filen.
-
u
– Filens ägare. -
g
– De användare som är medlemmar i gruppen. -
o
– Alla andra användare. -
a
– Alla användare, identiskt medugo
.
Om flaggan users utelämnas är standardflaggan a
och de behörigheter som sätts av umask påverkas inte.
Den andra inställningen av flaggor (), operationsflaggor, definierar om behörigheterna ska tas bort, läggas till eller ställas in:
-
-
Tar bort de angivna behörigheterna. -
+
Lägger till angivna behörigheter. -
=
Ändrar de aktuella behörigheterna till de angivna behörigheterna. Om inga behörigheter anges efter symbolen=
tas alla behörigheter från den angivna användarklassen bort.
Behörigheterna (perms...
) kan uttryckligen ställas in med antingen noll eller en eller flera av följande bokstäver: r
, w
, x
, X
, s
och t
. Använd en enda bokstav från uppsättningen u
, g
och o
när du kopierar behörigheter från en till en annan användarklass.
När du ställer in behörigheter för mer än en användarklass (), använd kommatecken (utan mellanslag) för att separera de symboliska lägena.
Nedan följer några exempel på hur du använder kommandot chmod
i symboliskt läge:
-
Giv medlemmarna i gruppen behörighet att läsa filen, men inte att skriva och exekvera den:
chmod g=r filename
-
Ta bort behörigheten exekvera för alla användare:
chmod a-x filename
-
För att ta bort skrivbehörigheten för andra användare:
chmod -R o-w dirname
-
För att ta bort läs-, skriv- och körbehörigheten för alla användare utom filens ägare:
chmod og-rwx filename
Det går också att åstadkomma samma sak genom att använda följande form:
chmod og= filename
-
Ge läs-, skriv- och körbehörighet till filens ägare, läsbehörighet till filens grupp och ingen behörighet till alla andra användare:
chmod u=rwx,g=r,o= filename
-
Lägg till filens ägares behörigheter till de behörigheter som medlemmarna i filens grupp har:
chmod g+u filename
-
Lägg till en viss katalog en sticky bit:
chmod o+t dirname
Numerisk metod #
Syntaxen för chmod
-kommandot vid användning av numerisk metod har följande format:
chmod NUMBER FILE...
När du använder det numeriska läget kan du ställa in behörigheterna för alla tre användarklasserna (ägare, grupp och alla andra) samtidigt.
NUMBER
kan vara ett tre- eller fyrsiffrigt nummer.
När ett tresiffrigt nummer används representerar den första siffran behörigheterna för filens ägare, den andra siffran filens grupp och den sista siffran alla andra användare.
Varje skriv-, läs- och körbehörighet har följande siffervärde:
-
r
(läsa) = 4 -
w
(skriva) = 2 -
x
(exekvera) = 1 - Ingen behörigheter = 0
Körrättighetsnumret för en viss användargrupp representeras av summan av värdena för behörigheterna för den gruppen.
För att ta reda på filens behörigheter i numeriskt läge räknar du helt enkelt ut summorna för alla användarklasser. Om du till exempel vill ge filens ägare läs-, skriv- och körbehörighet, filens grupp läs- och körbehörighet och alla andra användare endast läsbehörighet, gör du följande:
- Owner: rwx=4+2+1=7
- Group: r-x=4+0+1=5
- Others: r-x=4+0+0=4
Med hjälp av metoden ovan kommer vi fram till siffran 754
, som representerar de önskade behörigheterna.
För att ställa in flaggorna setuid
, setgid
och sticky bit
används ett fyrsiffrigt nummer.
När det fyrsiffriga numret används har den första siffran följande betydelse:
- setuid=4
- setgid=2
- sticky=1
- no changes = 0
De följande tre siffrorna har samma betydelse som vid användning av tresiffrigt nummer.
Om den första siffran är 0 kan den utelämnas och läget kan representeras med 3 siffror. Det numeriska läget 0755
är detsamma som 755
.
För att beräkna det numeriska läget kan man också använda en annan metod (binär metod), men den är lite mer komplicerad. Att veta hur man beräknar det numeriska läget med hjälp av 4, 2 och 1 räcker för de flesta användare.
Du kan kontrollera filens behörigheter i numerisk notation med hjälp av stat
kommandot:
stat -c "%a" filename
644
Här är några exempel på hur du använder chmod
kommandot i numeriskt läge:
-
Giv filens ägare läs- och skrivbehörighet och endast läsbehörighet för gruppmedlemmar och alla andra användare:
chmod 644 dirname
-
Giv filens ägare läs-, skriv- och körbehörighet, läs- och körbehörighet för gruppmedlemmar och ingen behörighet för alla andra användare:
chmod 750 dirname
-
Ge läs-, skriv- och körrättigheter samt en klibbig bit till en viss katalog:
chmod 1777 dirname
-
Sätt rekursivt läs-, skriv- och körrättigheter till filens ägare och inga behörigheter för alla andra användare i en viss katalog:
chmod -R 700 dirname
Använda en referensfil #
Med alternativet --reference=ref_file
kan du ställa in filens behörigheter så att de är desamma som för den angivna referensfilen (ref_file
).
chmod --reference=REF_FILE FILE
Till exempel kommer följande kommando att tilldela behörigheterna för file1
till file2
chmod --reference=file1 file2
Rekursivt ändra filens behörigheter #
För att rekursivt operera på alla filer och kataloger under den angivna katalogen använder du alternativet -R
(--recursive
):
chmod -R MODE DIRECTORY
För att till exempel ändra behörigheterna för alla filer och underkataloger under katalogen /var/www
till 755
använder du:
chmod -R 755 /var/www
Operera på symboliska länkar #
Symboliska länkar har alltid 777
behörigheter.
Som standard kommer chmod
att ändra behörigheterna för den fil som länken pekar på när du ändrar symlänkens behörigheter.
chmod 755 symlink
Chansen är stor att du istället för att ändra äganderätten till målet får ett meddelande ”cannot access ’symlink’: Felet uppstår eftersom symlänkar som standard i de flesta Linuxdistributioner är skyddade och du kan inte använda målfilerna. Det här alternativet anges i /proc/sys/fs/protected_symlinks
. 1
betyder aktiverat och 0
inaktiverat. Det rekommenderas att inte inaktivera symlinkskyddet.
Hantering av filbehörigheter i bulk #
Det finns ibland situationer där du behöver ändra filers och katalogers behörigheter i bulk.
Det vanligaste scenariot är att rekursivt ändra webbplatsfilens behörigheter till 644
och katalogens behörigheter till 755
.
Användning av den numeriska metoden:
find /var/www/my_website -type d -exec chmod 755 {} \;
find /var/www/my_website -type f -exec chmod 644 {} \;
Användning av den symboliska metoden:
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 {} \;
Kommandot find
söker efter filer och kataloger under /var/www/my_website
och skickar varje funnen fil och katalog till kommandot chmod
för att ställa in behörigheterna.
Slutsats #
Kommandot chmod
ändrar filens behörigheter. Behörigheterna kan ställas in antingen i symboliskt eller numeriskt läge.
För att lära dig mer om chmod
besök chmod manpage.