Salama Faili/saraka kwa kutumia ACL (Orodha za Udhibiti wa Ufikiaji) katika Linux


Kama Msimamizi wa Mfumo, kipaumbele chetu cha kwanza kitakuwa kulinda na kulinda data dhidi ya ufikiaji ambao haujaidhinishwa. Sote tunafahamu ruhusa ambazo tunaweka kwa kutumia baadhi ya amri muhimu za Linux kama vile chmod, chown, chgrp... n.k. Hata hivyo, seti hizi za ruhusa chaguomsingi zina vikwazo na wakati mwingine huenda zisifanye kazi kulingana na mahitaji yetu. Kwa mfano, hatuwezi kusanidi seti tofauti za ruhusa kwa watumiaji tofauti kwenye saraka au faili moja. Hivyo, Orodha za Udhibiti wa Upatikanaji (ACLs) zilitekelezwa.

Wacha tuseme, una watumiaji watatu, 'tecmint1', 'tecmint2' na 'tecmint3'. Kila moja ikiwa na kundi la kawaida sema 'acl'. Mtumiaji ‘tecmint1’ anataka mtumiaji wa ‘tecmint2’ pekee ndiye anayeweza kusoma na kufikia faili zinazomilikiwa na ‘tecmint1’ na hakuna mtu mwingine anayepaswa kuwa na ufikiaji wowote kwa hilo.

ACLs (Orodha za Udhibiti wa Ufikiaji) huturuhusu kufanya hila sawa. ACL hizi huturuhusu kutoa ruhusa kwa mtumiaji, kikundi na kikundi chochote cha watumiaji wowote ambao hawako katika orodha ya kikundi cha mtumiaji.

Kumbuka: Kulingana na Hati ya Bidhaa ya Redhat, inatoa usaidizi wa ACL kwa mfumo wa faili wa ext3 na mifumo ya faili iliyosafirishwa ya NFS.

Jinsi ya Kuangalia Usaidizi wa ACL katika Mifumo ya Linux

Kabla ya kusonga mbele unapaswa kuwa na usaidizi wa ACL kwenye Kernel ya sasa na mifumo ya faili iliyowekwa.

Tekeleza amri ifuatayo ili kuangalia Usaidizi wa ACL kwa mfumo wa faili na chaguo la POSIX_ACL=Y (ikiwa kuna N badala ya Y, basi inamaanisha Kernel haitumii ACL na inahitaji kukusanywa tena).

 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

Kabla ya kuanza kucheza na ACL hakikisha kuwa umesakinisha vifurushi. Ifuatayo ni vifurushi vinavyohitajika ambavyo vinahitaji kusakinishwa kwa kutumia yum au 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)

Lakini kwa upande wetu haionyeshi acl kwa msingi. Kwa hivyo, inayofuata tunayo chaguo la kuweka tena kizigeu kilichowekwa tena kwa kutumia chaguo la acl. Lakini, kabla ya kusonga mbele, tuna chaguo lingine la kuhakikisha kuwa kizigeu kimewekwa na chaguo la acl au la, kwa sababu kwa mfumo wa hivi karibuni inaweza kuunganishwa na chaguo-msingi la kupachika.

 tune2fs -l /dev/mapper/fedora-root | grep acl

Default mount options:    user_xattr acl

Katika matokeo ya hapo juu, unaweza kuona kwamba chaguo-msingi la kuweka tayari lina usaidizi kwa acl. Chaguo jingine ni kuweka tena kizigeu kama inavyoonyeshwa hapa chini.

 mount -o remount,acl /

Kisha, ongeza ingizo lililo hapa chini kwenye faili ya '/etc/fstab' ili kuifanya iwe ya kudumu.

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

Tena, weka tena kizigeu.

 mount -o remount  /

Kwenye seva ya NFS, ikiwa mfumo wa faili unaosafirishwa na seva ya NSF unatumia ACL na ACL zinaweza kusomwa na Wateja wa NFS, basi ACL hutumiwa na Mfumo wa mteja.

Ili kuzima ACL kwenye kushiriki kwa NFS, lazima uongeze chaguo \no_acl katika faili ya ‘/etc/exportfs’ kwenye Seva ya NFS. Ili kuizima kwa upande wa mteja wa NSF tumia tena chaguo la \no_acl wakati wa kupachika.

Jinsi ya Kutekeleza Usaidizi wa ACL katika Mifumo ya Linux

Kuna aina mbili za ACLs:

  1. Acl za Ufikiaji: ACL za Ufikiaji hutumiwa kutoa ruhusa kwenye faili au saraka yoyote.
  2. ACL Chaguomsingi: ACL chaguomsingi hutumika kutoa/kuweka orodha ya udhibiti wa ufikiaji kwenye saraka mahususi pekee.

Tofauti kati ya Access ACL na ACL Default:

  1. ACL chaguo-msingi inaweza kutumika katika kiwango cha saraka pekee.
  2. Saraka yoyote ndogo au faili iliyoundwa ndani ya saraka hiyo itarithi ACL kutoka saraka kuu yake. Kwa upande mwingine faili hurithi ACL chaguo-msingi kama ACL zake za ufikiaji.
  3. Tunatumia \–d kuweka ACL chaguomsingi na ACL Chaguomsingi ni chaguo.

Kuamua ACL chaguo-msingi kwa faili au saraka maalum, tumia amri ya 'getfacl'. Katika mfano ulio hapa chini, getfacl inatumika kupata ACL chaguo-msingi za folda ya 'Muziki'.

 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-

Ili kuweka ACL chaguo-msingi kwa faili au saraka maalum, tumia amri ya 'setfacl'. Katika mfano ulio hapa chini, amri ya setfacl itaweka ACL mpya (soma na kutekeleza) kwenye folda ya 'Muziki'.

 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

Tumia amri ya 'setfacl' kwa kuweka au kurekebisha kwenye faili au saraka yoyote. Kwa mfano, kutoa ruhusa za kusoma na kuandika kwa mtumiaji ‘tecmint1’.

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

Tumia amri ya 'getfacl' kwa kutazama ACL kwenye faili au saraka yoyote. Kwa mfano, kutazama ACL kwenye ‘/tecmint1/example‘ tumia amri iliyo hapa chini.

# getfacl /tecmint1/example

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

Kwa kuondoa ACL kutoka kwa faili/saraka yoyote, tunatumia chaguzi za x na b kama inavyoonyeshwa hapa chini.

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

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

Wacha tutekeleze ACL kwa kufuata hali.

Watumiaji Wawili (tecmint1 na tecmint2), wote wakiwa na kikundi cha upili kinachoitwa 'acl'. Tutaunda saraka moja inayomilikiwa na 'tecmint1' na tutatoa ruhusa ya kusoma na kutekeleza kwenye saraka hiyo kwa mtumiaji 'tecmint2'.

Hatua ya 1: Unda watumiaji wawili na uondoe nenosiri kutoka kwa wote wawili

 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

Hatua ya 2: Unda Kikundi na Watumiaji kwa Kikundi cha Sekondari.

 groupadd acl
 usermod -G acl tecmint1
 usermod -G acl tecmint2

Hatua ya 3: Unda Saraka /tecmint na ubadilishe umiliki kuwa 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

Hatua ya 4: Ingia na tecmint1 na uunde Saraka katika /tecmint folda.

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

Hatua ya 5: Sasa weka ACL ukitumia 'setfacl', ili 'tecmint1' iwe na ruhusa zote za rwx, 'tecmint2' itakuwa na ruhusa ya kusoma tu kwenye folda ya 'example' na nyingine haitakuwa na ruhusa.

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

Hatua ya 6: Sasa ingia na mtumiaji mwingine yaani 'tecmint2' kwenye terminal nyingine na ubadilishe saraka kuwa '/tecmint1'. Sasa jaribu kutazama yaliyomo kwa kutumia 'ls'amri kisha ujaribu kubadilisha saraka na uone tofauti kama ilivyo hapo chini.

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

Hatua ya 7: Sasa toa ruhusa ya 'kutekeleza' kwa 'tecmint2' kwenye folda ya 'mfano' kisha utumie amri ya 'cd' kuona athari. Sasa 'tecmint2' wana ruhusa ya kutazama na kubadilisha saraka, lakini huna ruhusa ya kuandika chochote.

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

Kumbuka: Baada ya kutekeleza ACL, utaona ishara ya ziada ya '+' ya towe la 'ls -l' kama ilivyo hapo chini.

 ll

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

Viungo vya Marejeleo

Nyaraka za ACL