Hur fungerar Linux-filtillstånd?
Om du har använt Linux någon gång (och även OS X) har du förmodligen kommit över ett "behörighetsfel". Men vad exakt är de, och varför är de nödvändiga eller användbara? Låt oss ta ett inslag.
Användarbehörigheter
Tillbaka på dagen var datorer massiva maskiner som var otroligt dyra. För att få ut det mesta av varandra var flera datorterminaler anslutna vilket gjorde det möjligt för många användare att gå om sin verksamhet samtidigt. Databehandling och lagring gjordes på maskinen, medan terminalerna själva var lite mer än ett medel för visning och inmatning av data. Om du tänker på det, är det ganska mycket hur vi får tillgång till data på "molnet"; titta på Amazons Cloud MP3-system, Gmail och Dropbox, och du kommer att märka att medan ändringar kan göras lokalt lagras allt på distans.
(Bild: Zenith Z-19 "dum" terminal; kredit: ajmexico)
För att detta ska fungera måste enskilda användare ha konton. De måste ha en del av lagringsutrymmet som tilldelats dem, och de måste ha tillåtelse att köra kommandon och program. Alla får specifika "användarbehörigheter", vilket dikterar vad de kan och inte kan göra, var på systemet de gör och inte har tillgång, och vars filer de kan och inte kan ändra. Varje användare placeras också i olika grupper, vilka beviljar eller begränsar ytterligare åtkomst.
Filåtkomst
I den här galna multi-användarvärlden har vi redan satt gränser för vad användare kan göra. Men hur är det med vad de har tillgång till? Tja, varje fil har en uppsättning behörigheter och en ägare. Ägarebeteckningen, som vanligtvis är bunden när filen skapas, förklarar vilken användare den tillhör, och endast den användaren kan ändra dess behörigheter.
I Linux-världen är behörigheter uppdelade i tre kategorier: läs, skriv och exekvera. Med "Read" -åtkomst kan man se en fils innehåll. Med "skriv" -åtkomst kan man ändra en fils innehåll och "exekvera" låter en köra en uppsättning instruktioner, som ett skript eller ett program. Var och en av dessa kategorier tillämpas på olika klasser: användare, grupp och värld. "Användare" betyder ägaren, "grupp" betyder en användare som är i samma grupp som ägaren, och "värld" betyder någon och alla.
Mappar kan också begränsas med dessa behörigheter. Du kan till exempel låta andra personer i din grupp visa kataloger och filer i din hemmapp, men inte någon utanför din grupp. Du kommer antagligen vilja begränsa "skriv" tillgång till dig själv, såvida du inte arbetar på ett delat projekt av något slag. Du kan även skapa en delad katalog som gör det möjligt för någon att visa och ändra filer i den mappen.
Ändra behörigheter i Ubuntu
GUI
För att ändra behörigheterna för en fil du äger i Ubuntu, högerklickar du bara på filen och går till "Egenskaper".
Du kan ändra om ägaren, gruppen eller andra kan läsa och skriva, läsa bara eller göra ingenting. Du kan också kolla en ruta för att tillåta körning av filen, vilket gör det möjligt för ägaren, gruppen och andra samtidigt.
Kommandorad
Du kan också göra det via kommandoraden. Gå till en katalog som har filer i den och skriv följande kommando för att visa alla filer i en lista:
ls -al
Bredvid varje fil och katalog ser du ett särskilt avsnitt som beskriver behörigheterna. Det ser ut så här:
-rwxrw-r-
De r står för "läs", den w står för "skriv" och x står för "exekvera". Kataloger börjar med en "d" istället för en "-". Du märker också att det finns 10 mellanslag som håller värdet. Du kan ignorera det första, och då finns det 3 uppsättningar av 3. Den första uppsättningen är för ägaren, den andra uppsättningen är för gruppen, och den sista uppsättningen är för världen.
För att ändra en fil eller katalogens behörigheter, låt oss titta på den grundläggande formen av chmod-kommandot.
chmod [class] [operator] [permission] file
chmod [ugoa] [+ eller -] [rwx] fil
Det kan tyckas komplicerat först, men lita på mig, det är ganska enkelt. Låt oss först titta på klasserna:
- u: Detta är för ägaren.
- g: Det här är för gruppen.
- o: Det här är för alla andra.
- a: Detta kommer att ändra behörigheter för alla ovanstående.
Därefter operatörerna:
- +: Plustecknet lägger till de behörigheter som följer.
- -: Minustecknet tar bort behörigheterna som följer.
Fortfarande med mig? Och det sista avsnittet är detsamma som när vi kollade behörigheterna för en fil:
- r: Tillåter läsåtkomst.
- w: Tillåter skrivåtkomst.
- x: Tillåt körning.
Nu, låt oss lägga den ihop. Låt oss säga att vi har en fil med namnet "todo.txt" som har följande behörigheter:
-rw-rw-r-
Det vill säga, ägaren och gruppen kan läsa och skriva, och världen kan bara läsa. Vi vill ändra behörigheterna till dessa:
-rwxr-
Det vill säga ägaren har fullständiga behörigheter, och gruppen kan läsa. Vi kan göra detta i tre steg. Först lägger vi till exekveringsbehörigheten för användaren.
chmod u + x todo.txt
Då tar vi bort skrivtillståndet för gruppen.
chmod g-w todo.txt
Slutligen tar vi bort läsbehörigheterna för alla andra användare.
chmod o-r todo.txt
Vi kan också kombinera dessa till ett kommando, som så:
chmod u + x, g-w, o-r todo.txt
Du kan se att varje sektion är åtskild med kommatecken och det finns inga mellanslag.
Här är några användbara behörigheter:
- -rwxr-xr-x: Ägaren har fullständiga behörigheter, grupp och andra användare kan läsa filinnehåll och exekvera.
- -rwxr-r-: Ägaren har fullständiga behörigheter, grupp och andra användare kan bara läsa filen (användbart om du inte har något emot andra som tittar på dina filer.
- -rwx-: Ägaren har fullständiga behörigheter, alla andra har ingen (användbar för personliga skript).
- -rw-rw--: Ägare och grupp kan läsa och skriva (användbart för samarbete med gruppmedlemmar).
- -rw-r-r-: Ägare kan läsa och skriva, grupp och andra användare kan bara läsa filen (användbar för att lagra personliga filer på ett gemensamt nätverk).
- -rw--: Ägaren kan läsa och skriva, alla andra har ingen (användbar för att lagra personliga filer).
Det finns några andra saker du kan göra med chmod-liknande setuid och setgid - men de är lite djupgående och de flesta användare behöver inte riktigt använda dem ändå.
Root- eller Super-User och System Files
Numera kör vi inte alltid system som har flera användare. Varför borde vi fortfarande oroa sig för behörigheter?
Jo, Unix och dess derivat - bland annat Linux, OS X - skiljer också mellan saker som drivs av användaren, saker som drivs av en administratör eller med administratörsbehörighet, och saker som drivs av själva systemet. Som sådant måste saker som är integrerade för systemet ha administratörsbehörighet att ändras eller nås. På så sätt förstör du inte någonting av misstag.
I Ubuntu, för att göra ändringar i systemfiler använder du "sudo" eller "gksudo" för att få motsvarande administratörsbehörigheter. I andra distros växlar du till "root" eller "super-user" som effektivt gör samma sak tills du loggar ut.
Tänk på att under båda dessa omständigheter kan ändras filbehörigheter leda till att program inte fungerar, oavsiktligt ändrar filägandet till root-användaren (istället för ägaren) och gör systemet mindre säkert (genom att ge fler behörigheter). Som sådan rekommenderas att du inte ändrar behörigheter för filer - speciellt systemfiler - om inte det är nödvändigt eller du vet vad du gör.
Filbehörigheter finns på plats för att ge ett grundläggande säkerhetssystem bland användarna. Att lära sig hur de fungerar kan hjälpa dig att skapa grundläggande delning i en miljö med flera användare, skydda "offentliga" filer och ge dig en aning om när något går fel med systemfilens ägande.
Tror du att du kan förklara saker lättare? Har en rättelse? Vill du påminna om de gamla dagarna? Ta en paus och lägg ner dina tankar i kommentarerna.