Drošie faili/direktoriji, izmantojot Linux ACL (piekļuves kontroles saraksti)


Kā sistēmas administratoram mūsu galvenā prioritāte būs aizsargāt un aizsargāt datus no nesankcionētas piekļuves. Mēs visi zinām par atļaujām, kuras esam iestatījuši, izmantojot dažas noderīgas Linux komandas, piemēram, chmod, chown, chgrp ... utt. Tomēr šīm noklusējuma atļauju kopām ir daži ierobežojumi, un dažreiz tās var nedarboties atbilstoši mūsu vajadzībām. Piemēram, mēs nevaram iestatīt dažādas atļauju kopas dažādiem lietotājiem vienā direktorijā vai failā. Tādējādi tika ieviesti piekļuves kontroles saraksti (ACL).

Pieņemsim, ka jums ir trīs lietotāji “tecmint1”, “tecmint2” un “tecmint3”. Katrs, kam ir kopīga grupa, saka “acl”. Lietotājs “tecmint1” vēlas, lai tikai “tecmint2” lietotājs varētu lasīt un piekļūt failiem, kas pieder “tecmint1”, un nevienam citam tam nebūtu jābūt piekļuvei.

ACL (piekļuves kontroles saraksti) ļauj mums veikt to pašu triku. Šīs ACL ļauj mums piešķirt atļaujas lietotājam, grupai un visām lietotāju grupām, kuras nav lietotāja grupu sarakstā.

Piezīme. Saskaņā ar Redhat produkta dokumentāciju tas nodrošina ACL atbalstu ext3 failu sistēmai un NFS eksportētajām failu sistēmām.

Kā pārbaudīt ACL atbalstu Linux sistēmās

Pirms virzīties uz priekšu, jums ir jāatbalsta ACL pašreizējā kodola un pievienoto failu sistēmās.

Palaidiet šo komandu, lai pārbaudītu failu sistēmas ACL atbalstu un opciju POSIX_ACL = Y (ja Y vietā ir N, tas nozīmē, ka kodols neatbalsta ACL un ir jāpārkompilē).

 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

Pirms sākat spēlēt ar ACL, pārliecinieties, vai ir instalētas pakotnes. Tālāk ir norādītas nepieciešamās pakotnes, kuras jāinstalē, izmantojot yum vai 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)

Bet mūsu gadījumā tā pēc noklusējuma nerāda acl. Tātad, pēc tam mums ir iespēja vēlreiz uzstādīt uzstādīto nodalījumu, izmantojot opciju acl. Bet, pirms virzīties uz priekšu, mums ir vēl viena iespēja pārliecināties, vai nodalījums ir uzstādīts ar acl opciju vai nē, jo jaunākajai sistēmai tas var būt integrēts ar noklusējuma stiprināšanas opciju.

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

Default mount options:    user_xattr acl

Iepriekš minētajā izvadē varat redzēt, ka noklusējuma stiprināšanas opcijai jau ir atbalsts acl. Vēl viena iespēja ir nodalījuma nodalīšana, kā parādīts zemāk.

 mount -o remount,acl /

Pēc tam pievienojiet zemāk esošo ierakstu failam “/ etc/fstab”, lai padarītu to pastāvīgu.

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

Atkal pārinstalējiet nodalījumu.

 mount -o remount  /

NFS serverī, ja failu sistēma, kuru eksportē NSF serveris, atbalsta ACL un ACL var nolasīt NFS klienti, klienta sistēma izmanto ACL.

Lai atspējotu ACL NFS koplietošanā, jums jāpievieno opcija “no_acl” failā “/ etc/exportfs” NFS serverī. Lai to atspējotu NSF klienta pusē, uzstādīšanas laikā vēlreiz izmantojiet opciju “no_acl”.

Kā ieviest ACL atbalstu Linux sistēmās

Ir divu veidu ACL:

  1. Piekļuves ACL: piekļuves ACL izmanto, lai piešķirtu atļaujas jebkuram failam vai direktorijam.
  2. Noklusējuma ACL: noklusējuma ACL izmanto piekļuves kontroles saraksta piešķiršanai/iestatīšanai tikai noteiktā direktorijā.

Atšķirība starp piekļuves ACL un noklusējuma ACL:

  1. Noklusējuma ACL var izmantot tikai direktoriju līmenī.
  2. Jebkurš šajā direktorijā izveidots apakšdirektors vai fails mantos ACL no tā vecākdirektorija. No otras puses, fails manto noklusējuma ACL kā piekļuves ACL.
  3. Noklusējuma ACL iestatīšanai mēs izmantojam “–d”, un noklusējuma ACL ir izvēles iespējas.

Lai noteiktu noklusējuma ACL noteiktu failu vai direktoriju, izmantojiet komandu getfacl. Šajā piemērā getfacl tiek izmantots, lai noklusējuma ACL iegūtu mapei ‘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::rw-

Lai iestatītu noklusējuma ACL konkrētam failam vai direktorijai, izmantojiet komandu “setfacl”. Tālāk sniegtajā piemērā komanda setfacl iestatīs jaunus ACL (lasīt un izpildīt) mapē ‘Music’.

 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

Izmantojiet komandu “setfacl”, lai iestatītu vai modificētu jebkuru failu vai direktoriju. Piemēram, lai piešķirtu lasīšanas un rakstīšanas atļaujas lietotājam ‘tecmint1’.

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

Izmantojiet komandu getfacl, lai skatītu ACL jebkurā failā vai direktorijā. Piemēram, lai skatītu ACL mapē ‘/ tecmint1/example’, izmantojiet komandu zemāk.

# getfacl /tecmint1/example

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

Lai noņemtu ACL no jebkura faila/direktorija, mēs izmantojam opcijas x un b, kā parādīts zemāk.

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

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

Īstenosim ACL saskaņā ar šādiem scenārijiem.

Divi lietotāji (tecmint1 un tecmint2), kuriem abiem ir kopīga sekundārā grupa ar nosaukumu “acl”. Mēs izveidosim vienu direktoriju, kas pieder ‘tecmint1’, un nodrošināsim lasītāja un izpildītāja atļauju šajā direktorijā lietotājam ‘tecmint2’.

1. darbība: izveidojiet divus lietotājus un noņemiet paroli no abiem

 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. darbība: izveidojiet grupu un lietotājus sekundārajai grupai.

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

3. darbība: izveidojiet direktoriju/tecmint un mainiet īpašumtiesības uz 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. solis: Piesakieties, izmantojot tecmint1, un mapē/tecmint izveidojiet direktoriju.

[[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. solis: Tagad iestatiet ACL, izmantojot ‘setfacl’, tā ka ‘tecmint1’ būs visas rwx atļaujas, ‘tecmint2’ būs tikai lasīšanas atļauja mapē ‘example’, bet citām nebūs atļauju.

$ 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. solis: Tagad piesakieties ar citu lietotāju, t.i., ‘tecmint2’ citā terminālā un nomainiet direktoriju uz ‘/ tecmint1’. Tagad mēģiniet apskatīt saturu, izmantojot komandu ‘ls’, un pēc tam mēģiniet mainīt direktoriju un redzēt atšķirību, kā norādīts zemāk.

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

7. solis: Tagad dodiet ‘izpildīt’ atļauju ‘tecmint2’ mapē ‘piemērs’ un pēc tam izmantojiet komandu ‘cd’, lai redzētu efektu. Tagad ‘tecmint2’ ir atļaujas apskatīt un mainīt direktoriju, taču nav atļaujas neko rakstīt.

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

Piezīme: Pēc ACL ieviešanas jūs redzēsiet papildu “+” zīmi izejai “ls –l”, kā norādīts zemāk.

 ll

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

Atsauces saites

ACL dokumentācija