Kako postaviti popise za kontrolu pristupa (ACL) i diskovne kvote za korisnike i grupe


Popisi kontrole pristupa (poznati i kao ACL-ovi) značajka su Linux jezgre koja omogućuje definiranje preciznijih prava pristupa datotekama i direktorijima od onih koja su navedena redovnim dozvolama ugo/rwx.

Na primjer, standardna dozvola ugo/rwx ne dopušta postavljanje različitih dozvola za različite pojedinačne korisnike ili grupe. Kao što ćemo vidjeti u ovom članku, s ACL-ovima je to relativno lako učiniti.

Provjera kompatibilnosti datotečnog sustava s ACL-ovima

Da biste osigurali da vaši datotečni sustavi trenutno podržavaju ACL-ove, trebali biste provjeriti jesu li montirani pomoću opcije acl. Da bismo to učinili, upotrijebit ćemo tune2fs za ext2/3/4 datotečne sustave kako je navedeno u nastavku. Zamijenite/dev/sda1 uređajem ili datotečnim sustavom koji želite provjeriti:

# tune2fs -l /dev/sda1 | grep "Default mount options:"

Napomena: Kod XFS-a popisi za kontrolu pristupa podržani su izvan okvira.

U sljedećem ext4 datotečnom sustavu možemo vidjeti da su ACL-ovi omogućeni za/dev/xvda2:

# tune2fs -l /dev/xvda2 | grep "Default mount options:"

Ako gornja naredba ne znači da je datotečni sustav montiran s podrškom za ACL-ove, najvjerojatnije je to što je opcija noacl prisutna u/etc/fstab.

U tom slučaju uklonite ga, demontirajte datotečni sustav, a zatim ga ponovo montirajte ili jednostavno ponovno pokrenite sustav nakon spremanja promjena u/etc/fstab.

Predstavljamo ACL-ove u Linuxu

Da bismo ilustrirali kako ACL-ovi rade, upotrijebit ćemo grupu nazvanu programeri i u nju dodati korisnike walterwhite i saulgoodman (da, ja sam obožavatelj Breaking Bad-a):

# groupadd developers
# useradd walterwhite
# useradd saulgoodman
# usermod -a -G developers walterwhite
# usermod -a -G developers saulgoodman

Prije nego nastavimo, provjerimo jesu li oba korisnika dodana u grupu programera:

# id walterwhite
# id saulgoodman

Stvorimo sada direktorij zvan test u/mnt, a unutra datoteku s imenom acl.txt (/mnt/test/acl.txt).

Tada ćemo vlasnika grupe postaviti programerima i rekurzivno promijeniti zadana dozvola ugo/rwx na 770 (čime ćemo dodijeliti dozvole za čitanje, pisanje i izvršavanje dodijeljene i vlasniku i vlasniku grupe datoteke):

# mkdir /mnt/test
# touch /mnt/test/acl.txt
# chgrp -R developers /mnt/test
# chmod -R 770 /mnt/test

Kao što se očekivalo, na /mnt/test/acl.txt možete pisati kao walterwhite ili saulgoodman:

# su - walterwhite
# echo "My name is Walter White" > /mnt/test/acl.txt
# exit
# su - saulgoodman
# echo "My name is Saul Goodman" >> /mnt/test/acl.txt
# exit

Zasada je dobro. Međutim, uskoro ćemo vidjeti problem kada trebamo odobriti pristup pisanju /mnt/test/acl.txt za drugog korisnika koji nije u grupi programera.

Standardna dozvola ugo/rwx zahtijeva da se novi korisnik doda u grupu programera, ali to će mu dati ista dopuštenja nad svim objektima u vlasništvu grupe. Upravo tu ACL-ovi dobro dođu.

Postavljanje ACL-a u Linuxu

Postoje dvije vrste ACL-ova: pristupni ACL-ovi su (koji se primjenjuju na datoteku ili direktorij) i zadani (neobavezni) ACL-ovi koji se mogu primijeniti samo na direktorij.

Ako datoteke unutar direktorija u kojem je postavljen zadani ACL nemaju vlastiti ACL, nasljeđuju zadani ACL svog nadređenog direktorija.

Dajmo korisniku gacanepa pristup za čitanje i pisanje na /mnt/test/acl.txt. Prije nego što to učinimo, pogledajmo trenutne postavke ACL-a u tom direktoriju s:

# getfacl /mnt/test/acl.txt

Zatim promijenite ACL-ove na datoteci, upotrijebite u: nakon čega slijede korisničko ime i : rw da naznačite dozvole za čitanje/pisanje:

# setfacl -m u:gacanepa:rw /mnt/test/acl.txt

I ponovno pokrenite getfacl na datoteci za usporedbu. Sljedeća slika prikazuje "Prije" i "Poslije":

# getfacl /mnt/test/acl.txt

Dalje, trebat ćemo dati drugima dozvole za izvršavanje u direktoriju/mnt/test:

# chmod +x /mnt/test

Imajte na umu da za pristup sadržaju direktorija redoviti korisnik treba izvršiti dozvole za taj direktorij.

Korisnik gacanepa sada bi trebao moći pisati u datoteku. Prebacite se na taj korisnički račun i izvršite sljedeću naredbu za potvrdu:

# echo "My name is Gabriel Cánepa" >> /mnt/test/acl.txt

Da biste postavili zadani ACL na direktorij (koji će njegov sadržaj naslijediti ako se drugačije ne prepiše), dodajte d: prije pravila i navedite direktorij umjesto imena datoteke:

# setfacl -m d:o:r /mnt/test
# getfacl /mnt/test/

Gore navedeni ACL omogućit će korisnicima koji nisu u grupi vlasnika pristup za čitanje budućih sadržaja direktorija/mnt/test. Obratite pažnju na razliku u izlazu getfacl/mnt/test prije i nakon promjene:

Da biste uklonili određeni ACL, zamijenite -m u naredbama iznad s -x . Na primjer,

# setfacl -x d:o /mnt/test

Također možete upotrijebiti opciju -b da biste u jednom koraku uklonili SVE ACL-ove:

# setfacl -b /mnt/test

Za više informacija i primjere upotrebe ACL-a, pogledajte poglavlje 10, odjeljak 2, sigurnosnog vodiča openSUSE (također dostupan za besplatno preuzimanje u PDF formatu).

Postavite kvote Linux diska na korisnike i datotečne sustave

Prostor za pohranu je još jedan resurs koji se mora pažljivo koristiti i nadzirati. Da biste to učinili, kvote se mogu postaviti na osnovi datotečnog sustava, bilo za pojedinačne korisnike ili za grupe.

Dakle, ograničeno je korištenje diska dopušteno za određenog korisnika ili određenu skupinu, a možete biti sigurni da neoprezni (ili zlonamjerni) korisnik neće napuniti vaše diskove do kraja.

Prvo što morate učiniti da biste omogućili kvote na datotečnom sustavu jest da ih montirate s opcijama usrquota ili grpquota (za korisničke i grupne kvote) u/etc/fstab.

Na primjer, omogućimo korisničke kvote na/dev/vg00/vol_backups i grupne kvote na/dev/vg00/vol_projects.

Imajte na umu da se UUID koristi za identificiranje svakog datotečnog sustava.

UUID=f6d1eba2-9aed-40ea-99ac-75f4be05c05a /home/projects ext4 defaults,grpquota 0 0
UUID=e1929239-5087-44b1-9396-53e09db6eb9e /home/backups ext4 defaults,usrquota 0 0

Demontirajte i ponovo montirajte oba datotečna sustava:

# umount /home/projects
# umount /home/backups
# mount -o remount /home/projects
# mount -o remount /home/backups 

Zatim provjerite jesu li opcije usrquota i grpquota prisutne u izlazu mount-a (pogledajte dolje istaknuto):

# mount | grep vg00

Na kraju, pokrenite sljedeće naredbe za inicijalizaciju i omogućavanje kvota:

# quotacheck -avugc
# quotaon -vu /home/backups
# quotaon -vg /home/projects

No, dodijelimo sada kvote korisničkom imenu i grupi koje smo ranije spomenuli. Kasnije kvote možete onemogućiti kvotom.

Postavljanje kvota diska za Linux

Počnimo s postavljanjem ACL-a na/home/sigurnosne kopije za korisnika gacanepa, koji će mu dati dozvole za čitanje, pisanje i izvršavanje u tom direktoriju:

# setfacl -m u:gacanepa:rwx /home/backups/

Zatim sa,

# edquota -u gacanepa

Napravit ćemo meko ograničenje = 900 i tvrdo ograničenje = 1000 blokova (1024 bajta/blok * 1000 blokova = 1024000 bajtova = 1 MB) prostora na disku.

Također možemo postaviti ograničenje od 20 i 25 kao meke i tvrde granice broja datoteka koje ovaj korisnik može stvoriti.

Gornja naredba pokrenut će uređivač teksta ($EDITOR) s privremenom datotekom u kojoj možemo postaviti prethodno navedena ograničenja:

Te će postavke uzrokovati prikazivanje upozorenja korisniku gacanepa kada je dosegao ograničenja od 900 blokova ili 20 inoda za zadani period mirovanja od 7 dana.

Ako do tada situacija s pretjeranom kvotom nije eliminirana (na primjer, uklanjanjem datoteka), meko ograničenje postat će teško ograničenje i tom će korisniku biti onemogućeno da koristi više prostora za pohranu ili stvara više datoteka.

Da testiramo, neka korisnik gacanepa pokuša stvoriti praznu datoteku od 2 MB nazvanu test1 unutar/home/sigurnosne kopije:

# dd if=/dev/zero of=/home/backups/test1 bs=2M count=1
# ls -lh /home/backups/test1

Kao što vidite, datoteka operacije pisanja ne uspijeva zbog prekoračenja kvote diska. Budući da je samo prvih 1000 KB zapisano na disk, rezultat će u ovom slučaju najvjerojatnije biti oštećena datoteka.

Slično tome, možete stvoriti ACL za grupe programera kako biste članovima te grupe rwx omogućili pristup/home/projektima:

# setfacl -m g:developers:rwx /home/projects/

I postavite ograničenja kvote pomoću:

# edquota -g developers

Baš kao i ranije s korisnikom gacanepa.

Razdoblje počeka može se izvršenjem odrediti za bilo koji broj sekundi, minuta, sati, dana, tjedana ili mjeseci.

# edquota -t

i ažuriranje vrijednosti pod Block grace period i Inode grace period.

Za razliku od upotrebe blokova ili inoda (koji se postavljaju na osnovi korisnika ili grupe), razdoblje počeka postavlja se na razini cijelog sustava.

Da biste prijavili kvote, možete koristiti kvotu -u [user] ili quota -g [group] za brzi popis ili repquota -v [/ path/to/datotečni sustav] za detaljnije (detaljno) i lijepo oblikovano izvješće.

Naravno, željet ćete zamijeniti [user] , [group] i [/ path/to/filesystem] određenim korisnikom/imena grupa i datotečni sustav koji želite provjeriti.

Sažetak

U ovom smo članku objasnili kako postaviti popise za kontrolu pristupa i kvote diskova za korisnike i grupe. Koristeći oboje, moći ćete učinkovitije upravljati dozvolama i upotrebom diska.

Ako želite saznati više o kvotama, možete se pozvati na Mini-HowTo kvote u Projektu dokumentacije za Linux.

Nepotrebno je reći, možete računati i na to da ćemo odgovoriti na pitanja. Samo ih pošaljite pomoću obrasca za komentar u nastavku i bit će nam više nego drago pogledati.