Osigurajte datoteke/direktorije pomoću ACL-ova (Access Control Lists) u Linuxu


Kao Administratoru sustava, naš prvi prioritet bit će zaštititi i osigurati podatke od neovlaštenog pristupa. Svi smo svjesni dozvola koje postavljamo pomoću nekih korisnih Linux naredbi kao što su chmod, chown, chgrp… itd. Međutim, ove zadane dozvole setovi imaju neka ograničenja i ponekad možda neće raditi prema našim potrebama. Na primjer, ne možemo postaviti različite skupove dopuštenja za različite korisnike u istom direktoriju ili datoteci. Stoga su implementirane Liste kontrole pristupa (ACL-ovi).

Recimo, imate tri korisnika, ‘tecmint1’, ‘tecmint2’ i ‘tecmint3’. Svaka ima zajedničku grupu i recite 'acl'. Korisnik 'tecmint1' želi da samo korisnik 'tecmint2' može čitati i pristupati datotekama u vlasništvu ' tecmint1' i nitko drugi ne bi trebao imati pristup tome.

ACLs (Access Control Lists) omogućuje nam da radimo isti trik. Ovi ACL-ovi nam omogućuju dodjeljivanje dopuštenja za korisnika, grupu i bilo koju grupu korisnika koji nisu na popisu grupe korisnika.

Napomena: Prema dokumentaciji proizvoda Redhat, pruža ACL podršku za ext3 datotečni sustav i NFS eksportirane datotečne sustave.

Kako provjeriti ACL podršku u Linux sustavima

Prije nego krenete naprijed, trebali biste imati podršku za ACL-ove na trenutnoj jezgri i montiranim datotečnim sustavima.

1. Provjerite jezgru za ACL podršku

Pokrenite sljedeću naredbu da provjerite ACL podršku za datotečni sustav i opciju POSIX_ACL=Y (ako postoji N umjesto Y, to znači Kernel ne podržava ACL i potrebno ga je ponovno kompajlirati).

[root@linux ~]# grep -i acl /boot/config*

CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_REISERFS_FS_POSIX_ACL=y
CONFIG_JFS_POSIX_ACL=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_BTRFS_FS_POSIX_ACL=y
CONFIG_FS_POSIX_ACL=y
CONFIG_GENERIC_ACL=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3_ACL=y
CONFIG_NFS_ACL_SUPPORT=m
CONFIG_CIFS_ACL=y
CONFIG_9P_FS_POSIX_ACL=y

2. Provjerite potrebne pakete

Prije početka igranja s ACL-ovima provjerite imate li instalirane potrebne pakete. Ispod su potrebni paketi koje je potrebno instalirati pomoću yum ili apt-get.

[root@linux ~]# yum install nfs4-acl-tools acl libacl		[on RedHat based systems]
[tecmint@linux ~]$ sudo apt-get install nfs4-acl-tools acl	[on Debian based systems]

3. Provjerite instalirani datotečni sustav za ACL podršku

Sada provjerite montirani datotečni sustav da li je montiran s ACL opcijom ili ne. Možemo koristiti naredbu ‘mount’ za provjeru kao što je prikazano u nastavku.

[root@linux ~]# mount  | grep -i root

/dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)

Ali u našem slučaju ne prikazuje acl prema zadanim postavkama. Dakle, sljedeće imamo mogućnost ponovnog montiranja montirane particije pomoću opcije acl. No, prije nego što nastavimo, imamo još jednu opciju da provjerimo je li particija montirana s opcijom acl ili ne, jer za noviji sustav može biti integrirana sa zadanom opcijom montiranja.

[root@linux ~]# tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

U gornjem izlazu možete vidjeti da zadana opcija montiranja već ima podršku za acl. Druga mogućnost je ponovno montiranje particije kao što je prikazano u nastavku.

[root@linux ~]# mount -o remount,acl /

Zatim dodajte donji unos u datoteku '/etc/fstab' kako biste je učinili trajnom.

/dev/mapper/fedora-root /	ext4    defaults,acl 1 1

Opet, ponovno montirajte particiju.

[root@linux ~]# mount -o remount  /

4. Za NFS poslužitelj

Na NFS poslužitelju, ako sustav datoteka koji izvozi NSF poslužitelj podržava ACL i ACL-ove mogu čitati NFS klijenti, tada ACL-ove koristi klijentski sustav.

Za onemogućavanje ACL-ova na NFS dijeljenju, morate dodati opciju “no_acl” u ‘/etc/exportfs’ datoteku na NFS poslužitelju. Da biste ga ponovno onemogućili na strani NSF klijenta, koristite opciju “no_acl” tijekom vremena montiranja.

Kako implementirati podršku za ACL u Linux sustavima

Postoje dvije vrste ACL-ova:

  1. Pristupni ACL-ovi: Pristupni ACL-ovi koriste se za davanje dopuštenja za bilo koju datoteku ili direktorij.
  2. Zadani ACL-ovi: Zadani ACL-ovi se koriste za dodjelu/postavljanje popisa kontrole pristupa samo na određenom direktoriju.

Razlika između Access ACL-a i zadanog ACL-a:

  1. Zadani ACL može se koristiti samo na razini direktorija.
  2. Bilo koji poddirektorij ili datoteka stvorena unutar tog direktorija naslijedit će ACL-ove iz nadređenog direktorija. S druge strane, datoteka nasljeđuje zadane ACL-ove kao svoje pristupne ACL-ove.
  3. Koristimo “–d” za postavljanje zadanih ACL-ova, a zadani ACL-ovi su izborni.
Prije postavljanja zadanih ACL-ova

Da biste odredili zadane ACL-ove za određenu datoteku ili direktorij, koristite naredbu ‘getfacl’. U donjem primjeru, getfacl koristi se za dobivanje zadanih ACL-ova za mapu "Glazba".

[root@linux ~]# getfacl Music/

file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::rw-
Nakon postavljanja zadanih ACL-ova

Za postavljanje zadanih ACL-ova za određenu datoteku ili direktorij upotrijebite naredbu ‘setfacl’. U donjem primjeru, naredba setfacl postavit će nove ACL-ove (čitanje i izvršavanje) u mapi 'Glazba'.

[root@linux ~]# setfacl -m d:o:rx Music/
[root@linux ~]# getfacl Music/
file: Music/
owner: root
group: root
user::rwx
group::r-x
other::r-x
default:user::rwx
default:group::r-x
default:other::r-x

Kako postaviti nove ACL-ove

Koristite naredbu ‘setfacl’ za postavljanje ili izmjenu bilo koje datoteke ili direktorija. Na primjer, za davanje dozvola čitanja i pisanja korisniku 'tecmint1'.

setfacl -m u:tecmint1:rw /tecmint1/example

Kako pregledati ACL-ove

Koristite naredbu ‘getfacl’ za pregled ACL-a u bilo kojoj datoteci ili direktoriju. Na primjer, za pregled ACL-a na '/tecmint1/example' koristite donju naredbu.

getfacl /tecmint1/example

file: tecmint1/example/
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

Kako ukloniti ACL-ove

Za uklanjanje ACL-a iz bilo koje datoteke/direktorija koristimo opcije x i b kao što je prikazano u nastavku.

setfacl -x ACL file/directory  	# remove only specified ACL from file/directory.

setfacl -b  file/directory   		#removing all ACL from file/direcoty

Implementirajmo ACL-ove u sljedećim scenarijima.

Dva korisnika (tecmint1 i tecmint2), oba imaju zajedničku sekundarnu grupu pod nazivom ‘acl’. Stvorit ćemo jedan direktorij u vlasništvu 'tecmint1' i dat ćemo dozvolu čitanja i izvršavanja na tom direktoriju korisniku 'tecmint2<'.

1. korak: Stvorite dva korisnika i uklonite zaporku za oba

[root@linux ~]# for user in tecmint1 tecmint2

> do
> useradd $user
> passwd -d $user
> done
Removing password for user tecmint1.
passwd: Success
Removing password for user tecmint2.
passwd: Success

2. korak: Stvorite grupu i korisnike u sekundarnu grupu.

[root@linux ~]# groupadd acl
[root@linux ~]# usermod -G acl tecmint1
[root@linux ~]# usermod -G acl tecmint2

3. korak: Stvorite imenik /tecmint i promijenite vlasništvo u tecmint1.

[root@linux ~]# mkdir /tecmint1
[root@linux ~]# chown tecmint1 /tecmint1/
[root@linux ~]# ls -ld /tecmint1/

drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
[root@linux ~]# getfacl /tecmint1

getfacl: Removing leading '/' from absolute path names
file: tecmint1
owner: tecmint1
group: root
user::rwx
group::r-x
other::r-x

Korak 4: Prijavite se s tecmint1 i stvorite direktorij u /tecmint mapi.

[tecmint@linux ~]$ su - tecmint1

Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[tecmint1@linux ~]$ cd /tecmint1/
[tecmint1@linux tecmint1]$ mkdir example
[tecmint1@linux tecmint1]$ ll

total 4
drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[tecmint1@linux tecmint1]$ whoami 
tecmint1

Korak 5: Sada postavite ACL koristeći 'setfacl', tako da 'tecmint1' ima sva rwx dopuštenja, 'tecmint2' će imati samo dopuštenje za čitanje u mapi 'example', a ostali neće imati dopuštenja.

setfacl -m u:tecmint1:rwx example/
setfacl -m u:tecmint2:r-- example/
setfacl -m  other:--- example/
getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::r-x
mask::rwx
other::---

Korak 6: Sada se prijavite s drugim korisnikom, tj. 'tecmint2' na drugom terminalu i promijenite direktorij u '/tecmint1'. Sada pokušajte pogledati sadržaj pomoću naredbe ‘ls’, a zatim pokušajte promijeniti direktorij i vidjeti razliku kao ispod.

[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ ls -lR example/
example/:
total 0
[tecmint2@linux tecmint1]$ cd example/

-bash: cd: example/: Permission denied
[tecmint2@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r--
group::rwx
mask::rwx
other::---

Korak 7: Sada dajte dopuštenje 'izvrši' za 'tecmint2' u mapi 'example' i zatim upotrijebite 'cd' naredba da vidite učinak. Sada 'tecmint2' ima dopuštenja za pregled i promjenu direktorija, ali nema dopuštenja za pisanje bilo čega.

[tecmint1@linux tecmint1]$ setfacl -m u:tecmint2:r-x example/
[tecmint1@linux tecmint1]$ getfacl example/

file: example
owner: tecmint1
group: tecmint1
user::rwx
user:tecmint1:rwx
user:tecmint2:r-x
group::rwx
mask::rwx
other::---
[tecmint@linux ~]$ su - tecmint2

Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[tecmint2@linux ~]$ cd /tecmint1/
[tecmint2@linux tecmint1]$ cd example/
[tecmint2@linux example]$ getfacl .
[tecmint2@linux example]$ mkdir test

mkdir: cannot create directory ‘test’: Permission denied
[tecmint2@linux example]$ touch test

touch: cannot touch ‘test’: Permission denied

Napomena: Nakon implementacije ACL-a, vidjet ćete dodatni znak '+' za izlaz 'ls –l' kao u nastavku.

[root@linux tecmint1]# ll

total 4
drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example

Referentne veze

Dokumentacija ACL-a