Sikre filer/kataloger ved hjelp av ACL (Access Control Lists) i Linux


Som systemadministrator vil vår første prioritet være å beskytte og sikre data mot uautorisert tilgang. Vi er alle klar over tillatelsene som vi angir ved å bruke noen nyttige Linux-kommandoer som chmod, chown, chgrp... osv. Disse standardtillatelsessettene har imidlertid noen begrensninger og fungerer noen ganger ikke i henhold til våre behov. For eksempel kan vi ikke sette opp forskjellige tillatelsessett for forskjellige brukere i samme katalog eller fil. Dermed ble tilgangskontrolllister (ACLs) implementert.

La oss si at du har tre brukere, 'tecmint1', 'tecmint2' og 'tecmint3'. Hver med felles gruppe sier 'acl'. Brukeren 'tecmint1' vil at bare 'tecmint2'-brukeren kan lese og få tilgang til filer som eies av 'tecmint1', og ingen andre skal ha tilgang til det.

ACLs (Access Control Lists) lar oss gjøre det samme trikset. Disse tilgangskontrollistene lar oss gi tillatelser for en bruker, gruppe og enhver gruppe av brukere som ikke er i gruppelisten til en bruker.

Merk: I henhold til Redhat-produktdokumentasjonen gir den ACL-støtte for ext3 filsystem og NFS eksporterte filsystemer.

Hvordan sjekke ACL-støtte i Linux-systemer

Før du går videre bør du ha støtte for tilgangskontrollister på gjeldende kjerne og monterte filsystemer.

Kjør følgende kommando for å sjekke ACL-støtte for filsystem og POSIX_ACL=Y-alternativet (hvis det er N i stedet for Y, betyr det at kjernen ikke støtter ACL og må kompileres på nytt).

 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 begynner å spille med ACL-er, sørg for at du har nødvendige pakker installert. Nedenfor er de nødvendige pakkene som må installeres med 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 vårt tilfelle viser den ikke acl som standard. Så, neste har vi muligheten til å remontere den monterte partisjonen igjen ved å bruke acl-alternativet. Men før vi går videre, har vi et annet alternativ for å forsikre oss om at partisjonen er montert med acl-alternativ eller ikke, fordi for nyere system kan det være integrert med standard monteringsalternativ.

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

Default mount options:    user_xattr acl

I utgangen ovenfor kan du se at standard monteringsalternativ allerede har støtte for acl. Et annet alternativ er å remontere partisjonen som vist nedenfor.

 mount -o remount,acl /

Deretter legger du til oppføringen nedenfor til '/etc/fstab'-filen for å gjøre den permanent.

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

Igjen, monter partisjonen på nytt.

 mount -o remount  /

På NFS-server, hvis filsystemet som eksporteres av NSF-serveren støtter ACL og ACL-er kan leses av NFS-klienter, blir ACL-er brukt av klientsystemet.

For å deaktivere tilgangskontrollister på NFS-deling, må du legge til alternativet \no_acl i filen '/etc/exportfs' på NFS-serveren. For å deaktivere det på NSF-klientsiden igjen, bruk \no_acl-alternativet under monteringstiden.

Hvordan implementere ACL-støtte i Linux-systemer

Det finnes to typer ACLer:

  1. Tilgang ACLer: Tilgang ACLer brukes for å gi tillatelser til enhver fil eller katalog.
  2. Standard ACLer: Standard ACLer brukes kun for å gi/definere tilgangskontrolllister på en bestemt katalog.

Forskjellen mellom Access ACL og Standard ACL:

  1. Standard ACL kan bare brukes på katalognivå.
  2. Enhver underkatalog eller fil som er opprettet i den katalogen, vil arve tilgangskontrollistene fra den overordnede katalogen. På den annen side arver en fil standard-ACL-ene som tilgangs-ACL-er.
  3. Vi bruker \–d for å angi standard ACLer og standard ACLer er valgfrie.

For å bestemme standard ACL-er for en bestemt fil eller katalog, bruk 'getfacl'-kommandoen. I eksemplet nedenfor brukes getfacl for å få standard ACL-er for en mappe 'Musikk'.

 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 å angi standard ACL-er for en bestemt fil eller katalog, bruk 'setfacl'-kommandoen. I eksemplet nedenfor vil setfacl-kommandoen sette en ny ACL-er (lese og kjøre) på en mappe 'Musikk'.

 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

Bruk 'setfacl'-kommandoen for å sette eller endre på hvilken som helst fil eller katalog. For eksempel å gi lese- og skrivetillatelser til brukeren 'tecmint1'.

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

Bruk 'getfacl'-kommandoen for å se ACL på hvilken som helst fil eller katalog. For eksempel, for å se ACL på '/tecmint1/example' bruk kommandoen nedenfor.

# getfacl /tecmint1/example

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

For å fjerne ACL fra enhver fil/katalog, bruker vi x- og b-alternativene 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

La oss implementere ACL-er på følgende scenarioer.

To brukere (tecmint1 og tecmint2), begge har en felles sekundær gruppe kalt 'acl'. Vi vil opprette en katalog som eies av 'tecmint1' og vil gi lese- og utføringstillatelsen på den katalogen til brukeren 'tecmint2'.

Trinn 1: Opprett to brukere og fjern passord 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

Trinn 2: Opprett en gruppe og brukere til sekundærgruppe.

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

Trinn 3: Opprett en katalog /tecmint og endre eierskap 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

Trinn 4: Logg på med tecmint1 og lag en katalog 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

Trinn 5: Sett nå ACL ved å bruke 'setfacl', slik at 'tecmint1' vil ha alle rwx-tillatelser, 'tecmint2' vil bare ha lesetillatelse på 'eksempel'-mappen og andre vil ikke ha noen tillatelser.

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

Trinn 6: Logg nå på med en annen bruker, dvs. 'tecmint2' på en annen terminal og endre katalogen til '/tecmint1'. Prøv nå å se innholdet ved å bruke 'ls'-kommandoen og prøv deretter å endre katalog og se forskjellen 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::---

Trinn 7: Gi nå 'utfør'-tillatelse til 'tecmint2' på 'eksempel'-mappen og bruk deretter 'cd'-kommandoen for å se effekten. Nå har 'tecmint2' tillatelser til å se og endre katalog, men har ikke tillatelser til å skrive noe.

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

Merk: Etter å ha implementert ACL, vil du se et ekstra '+'-tegn for 'ls -l'-utgang som nedenfor.

 ll

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

Referanselenker

ACLs dokumentasjon