Zaščitite datoteke/imenike z uporabo ACL (seznami za nadzor dostopa) v Linuxu
Kot skrbnik sistema bo naša prva naloga zaščita in zaščita podatkov pred nepooblaščenim dostopom. Vsi se zavedamo dovoljenj, ki smo jih nastavili z nekaterimi koristnimi ukazi za Linux, kot so chmod, chown, chgrp ... itd. Vendar imajo ti privzeti nabori dovoljenj nekatere omejitve in včasih morda ne bodo delovali v skladu z našimi potrebami. V istem imeniku ali datoteki na primer ne moremo nastaviti različnih naborov dovoljenj za različne uporabnike. Tako so bili uvedeni seznami nadzora dostopa (ACL).
Recimo, da imate tri uporabnike, 'tecmint1', 'tecmint2' in 'tecmint3'. Vsak, ki ima skupno skupino, reče "acl". Uporabnik "tecmint1" želi, da lahko samo "tecmint2" uporabnik bere in dostopa do datotek v lasti "tecmint1" in nihče drug ne sme imeti dostopa do tega.
ACL (seznami za nadzor dostopa) nam omogočajo enak trik. Ti ACL-ji omogočajo dodelitev dovoljenj za uporabnika, skupino in katero koli skupino uporabnikov, ki niso na seznamu skupin uporabnika.
Opomba: V skladu z dokumentacijo o izdelku Redhat nudi podporo ACL za datotečni sistem ext3 in izvožene datotečne sisteme NFS.
Kako preveriti podporo za ACL v sistemih Linux
Preden nadaljujete, morate imeti podporo za ACL-je v trenutnem jedru in nameščenih datotečnih sistemih.
Zaženite naslednji ukaz, da preverite podporo za ACL za datotečni sistem in možnost POSIX_ACL = Y (če je namesto Y N, to pomeni, da jedro ne podpira ACL in ga je treba znova prevesti).
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
Preden začnete igrati z ACL-ji, se prepričajte, da ste namestili zahtevane pakete. Spodaj so navedeni paketi, ki jih je treba namestiti z uporabo yum ali apt-get.
yum install nfs4-acl-tools acl libacl [on RedHat based systems]
mount | grep -i root /dev/mapper/fedora-root on / type ext4 (rw,relatime,data=ordered)
Toda v našem primeru privzeto ne prikazuje acl. Nato imamo možnost ponovno namestiti nameščeno particijo z uporabo možnosti acl. Preden nadaljujemo, pa imamo še eno možnost, da se prepričamo, ali je particija nameščena z možnostjo acl ali ne, ker je v novejšem sistemu morda integrirana s privzeto možnostjo namestitve.
tune2fs -l /dev/mapper/fedora-root | grep acl Default mount options: user_xattr acl
V zgornjem izhodu lahko vidite, da privzeta možnost namestitve že ima podporo za acl. Druga možnost je ponovno namestitev particije, kot je prikazano spodaj.
mount -o remount,acl /
Nato dodajte spodnji vnos v datoteko ‘/ etc/fstab’, da bo trajna.
/dev/mapper/fedora-root / ext4 defaults,acl 1 1
Spet ponovno namestite particijo.
mount -o remount /
Če na strežniku NFS datotečni sistem, ki ga izvozi strežnik NSF, podpira ACL in odjemalci NFS berejo ACL, potem odjemalski sistem uporablja ACL.
Če želite onemogočiti ACL-je za skupno rabo NFS, morate dodati datoteko\"no_acl" v datoteko '/ etc/exportfs' na strežniku NFS. Če jo želite onemogočiti na odjemalski strani NSF, v času priklopa znova uporabite možnost\"no_acl".
Kako uporabiti podporo za ACL v sistemih Linux
Obstajata dve vrsti ACL:
- Access ACL: Access ACL se uporablja za dodelitev dovoljenj za katero koli datoteko ali imenik.
- Privzeti ACL-ji: privzeti ACL-ji se uporabljajo za odobritev/nastavitev seznama nadzora dostopa samo v določenem imeniku.
Razlika med ACL za dostop in privzetim ACL:
- Privzeti ACL lahko uporabljate samo na ravni imenika.
- Vsak podimenik ali datoteka, ustvarjena v tem imeniku, bo ACL podedovala iz nadrejenega imenika. Po drugi strani pa datoteka podeduje privzete ACL-je kot ACL-je za dostop.
- Za nastavitev privzetih ACL uporabljamo\"- d", privzeti ACL pa so neobvezni.
Če želite določiti privzete ACL-je za določeno datoteko ali imenik, uporabite ukaz "getfacl". V spodnjem primeru je getfacl uporabljen za pridobivanje privzetih ACL-ov za mapo »Glasba«.
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-
Če želite nastaviti privzete ACL-je za določeno datoteko ali imenik, uporabite ukaz 'setfacl'. V spodnjem primeru bo ukaz setfacl določil nove ACL-je (branje in izvajanje) v mapi »Glasba«.
setfacl -m d:o:rx Music/ 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
Za nastavitev ali spreminjanje katere koli datoteke ali imenika uporabite ukaz ‘setfacl’. Na primer, da uporabniku "tecmint1" daste dovoljenja za branje in pisanje.
# setfacl -m u:tecmint1:rw /tecmint1/example
Uporabite ukaz ‘getfacl’ za ogled ACL v kateri koli datoteki ali imeniku. Če si želite na primer ogledati ACL v '/ tecmint1/example', uporabite spodnji ukaz.
# getfacl /tecmint1/example # file: tecmint1/example/ # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
Za odstranitev ACL iz katere koli datoteke/imenika uporabljamo možnosti x in b, kot je prikazano spodaj.
# setfacl -x ACL file/directory # remove only specified ACL from file/directory. # setfacl -b file/directory #removing all ACL from file/direcoty
Uvedimo ACL na naslednjem scenariju.
Dva uporabnika (tecmint1 in tecmint2), oba s skupno sekundarno skupino z imenom "acl". Ustvarili bomo en imenik v lasti „tecmint1“ in uporabniku „tecmint2“ zagotovili dovoljenje za branje in izvajanje v tem imeniku.
1. korak: Ustvarite dva uporabnika in odstranite geslo za oba
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: Ustvarite skupino in uporabnike v sekundarno skupino.
groupadd acl usermod -G acl tecmint1 usermod -G acl tecmint2
3. korak: Ustvarite direktorij/tecmint in spremenite lastništvo v tecmint1.
mkdir /tecmint1 chown tecmint1 /tecmint1/
ls -ld /tecmint1/ drwxr-xr-x 2 tecmint1 root 4096 Apr 17 14:46 /tecmint1/
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 s tecmint1 in ustvarite imenik v mapi/tecmint.
[[email ~]$ su - tecmint1 Last login: Thu Apr 17 14:49:16 IST 2014 on pts/4
[[email ~]$ cd /tecmint1/ [[email tecmint1]$ mkdir example
[[email tecmint1]$ ll total 4 drwxrwxr-x 2 tecmint1 tecmint1 4096 Apr 17 14:50 example
[[email tecmint1]$ whoami tecmint1
5. korak: Zdaj nastavite ACL z uporabo "setfacl", tako da bo imel "tecmint1" vsa dovoljenja rwx, "tecmint2" pa bo imel dovoljenje za branje samo v mapi "example", drugi pa ne bodo imeli dovoljenj.
$ 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::---
6. korak: Zdaj se prijavite z drugim uporabnikom, tj. 'Tecmint2' na drugem terminalu in spremenite imenik v '/ tecmint1'. Zdaj si poskusite ogledati vsebino z ukazom ls in nato poskusite spremeniti imenik in videti razliko, kot je prikazano spodaj.
[[email ~]$ su - tecmint2 Last login: Thu Apr 17 15:03:31 IST 2014 on pts/5
[[email ~]$ cd /tecmint1/ [[email tecmint1]$ ls -lR example/ example/: total 0
[[email tecmint1]$ cd example/ -bash: cd: example/: Permission denied
[[email tecmint1]$ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-- group::rwx mask::rwx other::---
Korak 7: Zdaj dajte dovoljenje za "izvedbo" za "tecmint2" v mapi "example" in nato z ukazom "cd" vidite učinek. Zdaj ima "tecmint2" dovoljenja za ogled in spreminjanje imenika, vendar nima dovoljenj za pisanje ničesar.
[[email tecmint1]$ setfacl -m u:tecmint2:r-x example/ [[email tecmint1]$ getfacl example/ # file: example # owner: tecmint1 # group: tecmint1 user::rwx user:tecmint1:rwx user:tecmint2:r-x group::rwx mask::rwx other::---
[[email ~]$ su - tecmint2 Last login: Thu Apr 17 15:09:49 IST 2014 on pts/5
[[email ~]$ cd /tecmint1/ [[email tecmint1]$ cd example/ [[email example]$ getfacl .
[[email example]$ mkdir test mkdir: cannot create directory ‘test’: Permission denied
[[email example]$ touch test touch: cannot touch ‘test’: Permission denied
Opomba: Po uvedbi ACL boste videli dodaten znak "+" za izhod "ls –l", kot je prikazano spodaj.
ll total 4 drwxrwx---+ 2 tecmint1 tecmint1 4096 Apr 17 17:01 example
Referenčne povezave
Dokumentacija ACL