Apsaugokite failus/katalogus naudodami ACL (prieigos valdymo sąrašus) sistemoje „Linux“.


Mūsų, kaip sistemos administratorių, prioritetas bus apsaugoti ir apsaugoti duomenis nuo neteisėtos prieigos. Visi žinome apie leidimus, kuriuos nustatome naudodami kai kurias naudingas Linux komandas, pvz., chmod, chown, chgrp ir kt. Tačiau šie numatytieji leidimai rinkiniai turi tam tikrų apribojimų ir kartais gali neveikti pagal mūsų poreikius. Pavyzdžiui, negalime nustatyti skirtingų leidimų rinkinių skirtingiems vartotojams tame pačiame kataloge ar faile. Taigi buvo įdiegti Prieigos valdymo sąrašai (ACL).

Tarkime, turite tris naudotojus: tecmint1, tecmint2 ir tecmint3. Kiekvienas, turintis bendrą grupę, pasakykite „acl“. Naudotojas tecmint1 nori, kad tik tecmint2 naudotojas galėtų skaityti ir pasiekti failus, priklausančius tecmint1“ ir niekas kitas neturėtų turėti prieigos prie to.

ACL (Prieigos valdymo sąrašai) leidžia atlikti tą patį triuką. Šie ACL leidžia mums suteikti leidimus naudotojui, grupei ir bet kuriai naudotojų grupei, kurios nėra naudotojo grupių sąraše.

Pastaba: kaip nurodyta „Redhat“ produkto dokumentacijoje, ji teikia ACL palaikymą ext3 failų sistemai ir NFS eksportuotoms failų sistemoms.

Kaip patikrinti ACL palaikymą „Linux“ sistemose

Prieš pereidami į priekį, turėtumėte palaikyti ACL esamose branduolyje ir prijungtose failų sistemose.

1. Patikrinkite, ar branduolyje nėra ACL palaikymo

Vykdykite šią komandą, kad patikrintumėte failų sistemos ACL palaikymą ir parinktį POSIX_ACL=Y (jei vietoje Y yra N, tai reiškia branduolį nepalaiko ACL ir turi būti sukompiliuotas iš naujo).

[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. Patikrinkite reikalingus paketus

Prieš pradėdami žaisti su ACL įsitikinkite, kad įdiegėte reikiamus paketus. Toliau pateikiami reikalingi paketai, kuriuos reikia įdiegti naudojant yum arba 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. Patikrinkite, ar prijungtoje failų sistemoje nėra ACL palaikymo

Dabar patikrinkite prijungtą failų sistemą, ar ji prijungta su ACL parinktimi, ar ne. Galime naudoti komandą „mount“, kad patikrintume tą patį, kaip parodyta toliau.

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

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

Bet mūsų atveju pagal numatytuosius nustatymus acl nerodomas. Taigi, toliau turime galimybę iš naujo įdiegti prijungtą skaidinį naudodami acl parinktį. Tačiau prieš pereidami į priekį turime kitą parinktį įsitikinti, kad skaidinys yra prijungtas su acl parinktimi, ar ne, nes naujausioje sistemoje jis gali būti integruotas su numatytuoju prijungimo parinktimi.

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

Default mount options:    user_xattr acl

Aukščiau pateiktoje išvestyje galite pamatyti, kad numatytoji prijungimo parinktis jau palaiko acl. Kita galimybė yra iš naujo įdiegti skaidinį, kaip parodyta toliau.

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

Tada pridėkite žemiau esantį įrašą prie „/etc/fstab“ failo, kad jis būtų nuolatinis.

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

Vėlgi, iš naujo prijunkite skaidinį.

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

4. NFS serveriui

Jei NFS serveryje failų sistema, kurią eksportuoja NSF serveris, palaiko ACL ir ACL gali nuskaityti NFS klientai, tada ACL naudoja kliento sistema.

Norėdami išjungti NFS bendrinimo ACL, turite pridėti parinktį „no_acl“ prie „/etc/exportfs“ failo NFS serveryje. Norėdami vėl jį išjungti NSF kliento pusėje, diegimo metu naudokite parinktį no_acl.

Kaip įdiegti ACL palaikymą „Linux“ sistemose

Yra dviejų tipų ACL:

  1. Prieigos ACL: prieigos ACL naudojamos suteikiant bet kurio failo ar katalogo leidimus.
  2. Numatytieji ACL: numatytieji ACL naudojami prieigos valdymo sąrašui suteikti/nustatyti tik konkrečiame kataloge.

Skirtumas tarp prieigos ACL ir numatytojo ACL:

  1. Numatytąjį ACL galima naudoti tik katalogo lygiu.
  2. Bet kuris tame kataloge sukurtas pakatalogis arba failas paveldės ACL iš savo pirminio katalogo. Kita vertus, failas paveldi numatytuosius ACL kaip savo prieigos ACL.
  3. Naudojame „–d“, norėdami nustatyti numatytuosius ACL, o numatytieji ACL yra neprivalomi.
Prieš nustatydami numatytuosius ACL

Norėdami nustatyti numatytuosius konkretaus failo ar katalogo ACL, naudokite komandą getfacl. Toliau pateiktame pavyzdyje getfacl naudojamas numatytiesiems aplanko „Muzika“ ACL gauti.

[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-
Nustačius numatytuosius ACL

Norėdami nustatyti numatytuosius konkretaus failo ar katalogo ACL, naudokite komandą setfacl. Toliau pateiktame pavyzdyje komanda setfacl nustatys naujus ACL (skaityti ir vykdyti) aplanke „Muzika“..

[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

Kaip nustatyti naujus ACL

Naudokite komandą setfacl, norėdami nustatyti arba modifikuoti bet kurį failą ar katalogą. Pavyzdžiui, suteikti skaitymo ir rašymo leidimus naudotojui „tecmint1“.

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

Kaip peržiūrėti ACL

Jei norite peržiūrėti bet kurio failo ar katalogo ACL, naudokite komandą getfacl. Pavyzdžiui, norėdami peržiūrėti ACL adresu /tecmint1/example, naudokite toliau pateiktą komandą.

getfacl /tecmint1/example

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

Kaip pašalinti ACL

Norėdami pašalinti ACL iš bet kurio failo/katalogo, naudojame parinktis x ir b, kaip parodyta toliau.

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

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

Įdiegkime ACL pagal šiuos scenarijus.

Du naudotojai (tecmint1 ir tecmint2), abu turi bendrą antrinę grupę, pavadintą „acl“. Sukursime vieną katalogą, priklausantį tecmint1, ir suteiksime skaityti ir vykdymo leidimą tame kataloge vartotojui tecmint2<“.

1 veiksmas: sukurkite du naudotojus ir pašalinkite abiejų slaptažodžius

[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 veiksmas: sukurkite grupę ir naudotojus į antrinę grupę.

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

3 veiksmas: sukurkite katalogą /tecmint ir pakeiskite nuosavybės teisę į 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 veiksmas: prisijunkite naudodami tecmint1 ir aplanke /tecmint sukurkite katalogą.

[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

5 veiksmas: dabar nustatykite ACL naudodami „setfacl“, kad „tecmint1“ turėtų visus rwx leidimus, „tecmint2“ turės tik skaityti leidimą aplanke „example“, o kiti neturės jokių leidimų.

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 veiksmas: dabar prisijunkite su kitu naudotoju, pvz., „tecmint2“, kitame terminale ir pakeiskite katalogą į „/tecmint1“. Dabar pabandykite peržiūrėti turinį naudodami komandą „ls“, tada pabandykite pakeisti katalogą ir pamatyti skirtumą, kaip nurodyta toliau.

[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::---

7 veiksmas: dabar suteikite vykdyti leidimą tecmint2 aplanke example, tada naudokite < komanda'cd', kad pamatytumėte efektą. Dabar „tecmint2“ turi leidimus peržiūrėti ir keisti katalogą, bet neturi leidimų nieko rašyti.

[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

Pastaba: įdiegę ACL pamatysite papildomą „ls –l“ išvesties ženklą „+“, kaip nurodyta toliau.

[root@linux tecmint1]# ll

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

Nuorodų nuorodos

ACL dokumentacija