Sikre filer/mapper ved hjælp af ACL'er (adgangskontrolister) i Linux


Som systemadministrator vil vores første prioritet være at beskytte og sikre data mod uautoriseret adgang. Vi er alle opmærksomme på de tilladelser, vi indstiller ved hjælp af nogle nyttige Linux-kommandoer som chmod, chown, chgrp ... osv. Disse standardtilladelsessæt har dog en vis begrænsning og fungerer undertiden muligvis ikke i henhold til vores behov. For eksempel kan vi ikke oprette forskellige tilladelsessæt til forskellige brugere i samme bibliotek eller fil. Således blev adgangskontrollister (ACL'er) implementeret.

Lad os sige, du har tre brugere, 'tecmint1', 'tecmint2' og 'tecmint3'. Hver med fælles gruppe siger 'acl'. Bruger 'tecmint1' ønsker, at kun 'tecmint2' bruger kan læse og få adgang til filer, der ejes af 'tecmint1', og ingen andre skal have adgang til det.

ACL'er (adgangskontrolister) giver os mulighed for at gøre det samme trick. Disse ACL'er tillader os at give tilladelser til en bruger, gruppe og enhver gruppe af brugere, der ikke er på gruppelisten for en bruger.

Bemærk: I henhold til Redhat-produktdokumentation yder den ACL-understøttelse af ext3-filsystem og NFS-eksporterede filsystemer.

Sådan kontrolleres ACL-support i Linux-systemer

Inden du går videre, skal du have support til ACL'er på nuværende kerner og monterede filsystemer.

Kør følgende kommando for at kontrollere ACL Support til filsystem og POSIX_ACL = Y-indstilling (hvis der er N i stedet for Y, betyder det, at Kernel ikke understøtter ACL og skal kompileres igen).

 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

Før du begynder at spille med ACL'er, skal du sørge for, at du har installeret nødvendige pakker. Nedenfor er de nødvendige pakker, der skal installeres ved hjælp af yum eller 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)

Men i vores tilfælde viser det ikke acl som standard. Så næste har vi mulighed for at genmontere den monterede partition igen ved hjælp af acl-indstillingen. Men inden vi går videre, har vi en anden mulighed for at sikre, at partitionen er monteret med ACL-indstilling eller ej, fordi det for nyere system muligvis er integreret med standardmonteringsindstilling.

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

Default mount options:    user_xattr acl

I ovenstående output kan du se, at standardmonteringsmuligheden allerede har understøttelse af acl. En anden mulighed er at genmontere partitionen som vist nedenfor.

 mount -o remount,acl /

Dernæst tilføj nedenstående post til '/ etc/fstab' -filen for at gøre den permanent.

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

Genmonter partitionen igen.

 mount -o remount  /

På NFS-server, hvis filsystem, der eksporteres af NSF-server understøtter ACL, og ACL'er kan læses af NFS-klienter, bruges ACL'er af klientsystemet.

For at deaktivere ACL'er på NFS-deling skal du tilføje indstillingen "no_acl" i '/ etc/exportfs' fil på NFS Server. For at deaktivere det på NSF-klientsiden skal du bruge “no_acl” -muligheden under monteringstid.

Sådan implementeres ACL-support i Linux-systemer

Der er to typer ACL'er:

  1. Adgangs-ACL'er: Adgangs-ACL'er bruges til at give tilladelser til enhver fil eller mappe.
  2. Standard-ACL'er: Standard-ACL'er bruges kun til at tildele/indstille adgangskontroliste i et bestemt bibliotek.

Forskel mellem adgang ACL og standard ACL:

  1. Standard ACL kan kun bruges på katalogniveau.
  2. Enhver underkatalog eller fil, der oprettes i denne mappe, arver ACL'erne fra dens overordnede bibliotek. På den anden side arver en fil standard-ACL'erne som dens adgangs-ACL'er.
  3. Vi bruger “–d” til at indstille standard-ACL'er og standard-ACL'er er valgfri.

Brug kommandoen 'getfacl' til at bestemme standard-ACL'erne for en bestemt fil eller mappe. I eksemplet nedenfor bruges getfacl til at få standard ACL'erne til en mappe 'Musik'.

 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-

For at indstille standard ACL'erne for en bestemt fil eller mappe skal du bruge kommandoen 'setfacl'. I eksemplet nedenfor vil kommandoen setfacl indstille nye ACL'er (læse og udføre) på en mappe 'Musik'.

 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

Brug kommandoen 'setfacl' til indstilling eller ændring af enhver fil eller bibliotek. For eksempel at give læse- og skrivetilladelser til brugeren 'tecmint1'.

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

Brug kommandoen ‘getfacl’ til at se ACL i enhver fil eller mappe. For eksempel, for at se ACL på ‘/ tecmint1/eksempel’ brug nedenstående kommando.

# getfacl /tecmint1/example

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

Til fjernelse af ACL fra enhver fil/bibliotek bruger vi indstillingerne x og b som vist nedenfor.

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

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

Lad os implementere ACL'er på følgende scenarier.

To brugere (tecmint1 og tecmint2), som begge har en fælles sekundær gruppe med navnet 'acl'. Vi opretter en mappe, der ejes af 'tecmint1' og giver læsning og udførelse af tilladelse til denne mappe til brugeren 'tecmint2'.

Trin 1: Opret to brugere og fjern adgangskoden fra begge

 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

Trin 2: Opret en gruppe og brugere til sekundær gruppe.

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

Trin 3: Opret en mappe/tecmint og skift ejerskab til 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

Trin 4: Log ind med tecmint1, og opret en mappe i/tecmint-mappen.

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

Trin 5: Indstil nu ACL ved hjælp af 'setfacl', så 'tecmint1' har alle rwx-tilladelser, 'tecmint2' har kun læstilladelse i 'eksempel' -mappen, og andre har ingen tilladelser.

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

Trin 6: Log nu ind med en anden bruger, dvs. 'tecmint2' på en anden terminal, og skift mappe til '/ tecmint1'. Prøv nu at se indholdet ved hjælp af kommandoen 'ls', og prøv derefter at ændre bibliotek og se forskellen som nedenfor.

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

Trin 7: Giv nu 'udfør' tilladelse til 'tecmint2' i 'eksempel' mappe, og brug derefter kommandoen 'cd' for at se effekten. Nu har 'tecmint2' tilladelser til at se og ændre bibliotek, men har ikke tilladelse til at skrive noget.

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

Bemærk: Efter implementering af ACL vil du se et ekstra '+' tegn for 'ls –l' output som nedenfor.

 ll

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

Reference Links

ACL's dokumentation