Sigurne datoteke/direktorije koristeći ACL-ove (Liste kontrole pristupa) u Linuxu


Kao administratoru sistema, naš prvi prioritet će biti zaštita i osiguranje podataka od neovlaštenog pristupa. Svi smo svjesni dozvola koje postavljamo pomoću nekih korisnih Linux komandi kao što su chmod, chown, chgrp… itd. Međutim, ove zadane dozvole setovi imaju određena ograničenja i ponekad možda neće raditi prema našim potrebama. Na primjer, ne možemo postaviti različite skupove dozvola za različite korisnike u istom direktoriju ili datoteci. Tako su implementirane Liste kontrole pristupa (ACL-ovi).

Recimo da imate tri korisnika, ‘tecmint1’, ‘tecmint2’ i ‘tecmint3’. Svaki od njih ima zajedničku grupu, kaže "acl". Korisnik 'tecmint1' želi da samo 'tecmint2' korisnik može čitati i pristupiti fajlovima u vlasništvu ' tecmint1' i niko drugi ne bi trebao imati pristup tome.

ACLs (Liste kontrole pristupa) nam omogućavaju da radimo isti trik. Ovi ACL-ovi nam omogućavaju da dodijelimo dozvole za korisnika, grupu i bilo koju grupu bilo kojih korisnika koji nisu na listi grupa korisnika.

Napomena: Prema Redhat dokumentaciji proizvoda, pruža ACL podršku za ext3 sistem datoteka i NFS izvezene sisteme datoteka.

Kako provjeriti podršku za ACL u Linux sistemima

Prije nego što krenete naprijed, trebali biste imati podršku za ACL-ove na trenutnom kernelu i montiranim sistemima datoteka.

1. Provjerite kernel za ACL podršku

Pokrenite sljedeću naredbu da provjerite ACL podršku za sistem datoteka i opciju POSIX_ACL=Y (ako postoji N umjesto Y, onda to znači kernel ne podržava ACL i treba ga ponovo 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 nego počnete igrati sa ACL-ovima, uvjerite se da imate 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 montirani sistem datoteka za podršku za ACL-ove

Sada provjerite montirani sistem datoteka da li je montiran sa ACL opcijom ili ne. Možemo koristiti naredbu ‘mount‘ za provjeru istog kao što je prikazano ispod.

[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 po defaultu. Dakle, sljedeće imamo opciju da ponovo montiramo montiranu particiju koristeći acl opciju. Ali, pre nego što krenemo dalje, imamo još jednu opciju da se uverimo da je particija montirana sa acl opcijom ili ne, jer za noviji sistem može biti integrisana sa podrazumevanom 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 opcija je da ponovo montirate particiju kao što je prikazano ispod.

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

Zatim dodajte unos ispod u datoteku '/etc/fstab' kako biste je učinili trajnim.

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

Ponovo montirajte particiju.

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

4. Za NFS server

Na NFS serveru, ako sistem datoteka koji izvozi NSF server podržava ACL i ACL-ove mogu čitati NFS klijenti, tada ACL-ove koristi klijentski sistem.

Za onemogućavanje ACL-ova na NFS dijeljenju, morate dodati opciju “no_acl” u datoteci ‘/etc/exportfs’ na NFS serveru. Da ga onemogućite na strani NSF klijenta ponovo koristite opciju “no_acl ” tokom vremena montiranja.

Kako implementirati podršku za ACL u Linux sistemima

Postoje dvije vrste ACL-ova:

  1. ACL-ovi za pristup: Pristupni ACL-ovi se koriste za davanje dozvola za bilo koju datoteku ili direktorij.
  2. Zadani ACL-ovi: Zadani ACL-ovi se koriste za dodjelu/postavku liste kontrole pristupa samo na određenom direktoriju.

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

  1. Zadani ACL se može koristiti samo na razini direktorija.
  2. Svaki poddirektorij ili datoteka kreirana unutar tog direktorija naslijedit će ACL-ove iz svog roditeljskog 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 opcioni.
Prije postavljanja zadanih ACL-ova

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

[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

Da biste postavili zadane ACL-ove za određenu datoteku ili direktorij, koristite naredbu „setfacl“. U primjeru ispod, naredba setfacl će postaviti nove ACL-ove (čitanje i izvršavanje) u folderu 'Muzika' jako>.

[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, da se korisniku „tecmint1“ da dozvole za čitanje i pisanje.

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

Kako pogledati ACL-ove

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

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 ispod.

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

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

Hajde da implementiramo ACL na sljedeće scenarije.

Dva korisnika (tecmint1 i tecmint2), oba imaju zajedničku sekundarnu grupu pod nazivom „acl“. Napravit ćemo jedan direktorij u vlasništvu 'tecmint1' i omogućiti čitanje i izvršavanje tog direktorija korisniku 'tecmint2<'.

Korak 1: Kreirajte dva korisnika i uklonite lozinku 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

Korak 2: Kreirajte grupu i korisnike u sekundarnu grupu.

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

Korak 3: Kreirajte direktorij /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

4. korak: Prijavite se sa tecmint1 i kreirajte direktorij u /tecmint folderu.

[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 će 'tecmint1' imati sve rwx dozvole, 'tecmint2' će imati samo dozvolu za čitanje u folderu 'example', a ostali neće imati dozvole.

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 koristeći naredbu „ls“, a zatim pokušajte promijeniti direktorij i vidite razliku kao u nastavku.

[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 'execute' dozvolu za 'tecmint2' u folderu 'example', a zatim koristite 'cd' komanda da vidite efekat. Sada ‘tecmint2’ ima dozvole za pregled i promjenu direktorija, ali nema dozvole 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 ispod.

[root@linux tecmint1]# ll

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

Referentne veze

ACL dokumentacija