ACL (Access Control List) är något relativt okänt och sällan använt i Linux. Men trots det finns ACL i Linux som standard för filsystemen ext4 och XFS. Det erbjuder mer kontroll över vem som har tillgång till vad och är ett komplement till de vanliga rättigheterna.

Pingviner

De vanliga rättigheterna i Linux räcker ofta långt, särskilt om man använder grupper. Men ibland behöver man något mer flexibelt och kraftfullt. Exempelvis om man vill ge flera användare tillgång en katalog utan att göra personerna medlemmar i en särskild grupp. Eller om man vill sätta specifika rättigheter och medlemskap för nya filer i en katalog utan att förlita sig på användarnas umask. Allt detta och mycket med går att åstadkomma med ACL i Linux. Det är dessutom inget nytt eller unik för Linux; det är en POSIX-funktion.

Repetition av de vanliga rättigheterna

Men innan vi tittar vi på ACL är det värt att repetera de vanliga rättigheterna i Linux.

$> ls -l
total 4
-rw-r--r-- 1 jake jake 21 apr 14 15:58 rapport.txt

I exemplet ovan har användaren Jake läs- och skrivrättigheter till filen rapport.txt (rw-). Gruppen med samma namn – Jake – har läsrättigheter till filen (r--). Övriga användare på systemet har också läsrättigheter (den sista gruppen, r--). Man delar således in -rw-r--r-- i fyra delar, inräknat filtypen:

  • - = filtypen, i det här fallet en vanlig fil
  • rw- = skriv- och läsrättigheter för användaren
  • r-- = läsrättigheter för gruppen
  • r-- = läsrättigheter för övriga

För att ändra ägaren och/eller gruppen använder vi chown. För att ändra gruppen använder vi chgrp. För att ändra rättigheterna använder vi chmod. Tänk dock på att ägaren av en fil inte kan ge bort sina filer till någon annan, det måste root göra. Men om användaren är medlem i gruppen kan hon själv ändra ägargruppen till den gruppen.

$> chmod u=rw,g=rw,o= rapport.txt 
$> ls -l
total 4
rw-rw---- 1 jake jake 21 apr 14 15:58 rapport.txt

$> chown jake:devops rapport.txt 
$> ls -l
total 4
-rw-rw---- 1 jake devops 21 apr 14 15:58 rapport.txt

Introduktion till ACL

Kommandona för att läsa respektive sätta ACL i Linux är getfacl och setfacl. Dessa kommandon finns redan installerade i de flesta Linux-distributioner, med undantaget av Ubuntu Server och Debian.

För att installera ACL-kommandona i Ubuntu Server (och andra Debian-baserade system där de eventuellt saknas):

$> sudo apt-get install acl

Om vi nu vill ge användarna Kalle och Knatte tillgång till filen rapport.txt från det tidigare exemplet – utan att behöva göra dem till medlemmar av gruppen DevOps – behöver vi använda oss av ACL. Detta kan vi dessutom göra som ägaren av filen, i det här fallet Jake. Här ger vi Kalle och Knatte läs- och skrivrättigheter till filen rapport.txt:

ANNONS FÖR VÅRA EGNA BÖCKER Demonerna på internet

$> setfacl -m kalle:rw rapport.txt
$> setfacl -m knatte:rw rapport.txt

Flaggan -m i kommandot ovan betyder att vi anger rättigheterna direkt på kommandoraden, inte via en fil.

För att kontrollera ACL använder vi getfacl. Här ser vi först att det är Jake med gruppen DevOps som äger filen. Men här ser vi även att Kalle och Knatte har tillgång till filen enligt ACL.

$> getfacl rapport.txt 
# file: rapport.txt
# owner: jake
# group: devops
user::rw-
user:kalle:rw-
user:knatte:rw-
group::rw-
mask::rw-
other::---

Sätta standardrättigheter

Med ACL kan vi även sätta grupptillhörighet och rättigheter för nya filer och kataloger. Om vi vill att alla nya filer och kataloger som skapas i den aktuella katalogen (project) ska gå att läsas och skrivas av gruppen DevOps, sätter vi detta med d som i defaults.

$> cd ..
$> setfacl -m d:g:devops:rwX project

Här står d för default och g för group. devops är gruppen som ska ha tillgång till nya filer och kataloger. rwX betyder att filer ska få läs- och skrivrättigheter för gruppen DevOps och exekveringsrättigheter för kataloger. (Ett litet x sätter exekveringsrättigheten för både filer och kataloger, men ett stort X sätter det enbart för kataloger.)

En kontroll med getfacl:

$> getfacl project
# file: project
# owner: jake
# group: jake
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:group:devops:rwx
default:mask::rwx
default:other::r-x

Om vi nu testar att skapa en ny fil som Jake i katalogen project kommer denna att få gruppen DevOps och rättigheterna rw-rw-r--- (plustecknet efter rättigheterna betyder att ACL är aktivt för filen):

$> cd project
$> touch test.txt
$> ls -l test.txt
-rw-rw-r--+ 1 jake jake 0 apr 14 16:45 test.txt

Notera att här visas gruppen fortfarande som Jake, vilket är korrekt enligt de “vanliga” Linux-rättigheterna. Men om vi kontrollerar filen med getfacl ser vi att även gruppen DevOps och läs- och skrivrättigheter. Vi ser också att den “vanliga” gruppen fortfarande är Jake.

$> getfacl test.txt 
# file: test.txt
# owner: jake
# group: jake
user::rw-
group::r-x                      #effective:r--
group:devops:rwx                #effective:rw-
mask::rw-
other::r--

Vi kan bekräfta att vi kan skriva till filen med en användare som är medlem i gruppen DevOps (men som inte är Jake själv):

$> su knatte
Password:
$> id
uid=1002(knatte) gid=1003(knatte) groups=1003(knatte),1001(devops)
$> echo "Hejsan" > test.txt
$> cat test.txt 
Hejsan
$> ls -l test.txt
-rw-rw-r--+ 1 jake jake 7 apr 14 17:10 test.txt

Det går även att lägga till användare som ska ha tillgång till alla nya filer i katalogen. Då byter vi bara ut g (för grupp) mot u (för user). Till exempel:

$> cd ..
$> setfacl -m d:u:kalle:rwX project
$> getfacl project
# file: project/
# owner: jake
# group: devops
user::rwx
group::r-x
other::r-x
default:user::rwx
default:user:kalle:rwx
default:group::r-x
default:group:devops:rwx
default:mask::rwx
default:other::r-x

Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.

Kommentarer

Kommentarsfältet är modererat. Det innebär att alla kommentarer granskas av ansvarig utgivare före publicering.

Du väljer själv om du vill ange ditt riktiga namn, en pseudonym eller vara helt anonym. Ingen registrering behövs.