Zoeken op website

Beveilig bestanden/mappen met behulp van ACL's (Access Control Lists) in Linux


Als systeembeheerder is onze eerste prioriteit het beschermen en beveiligen van gegevens tegen ongeoorloofde toegang. We zijn ons allemaal bewust van de machtigingen die we instellen met behulp van enkele nuttige Linux-commando's zoals chmod, chown, chgrp... etc. Deze standaardmachtigingen zijn echter sets hebben enige beperkingen en werken soms niet volgens onze behoeften. We kunnen bijvoorbeeld geen verschillende machtigingensets instellen voor verschillende gebruikers in dezelfde map of hetzelfde bestand. Zo werden toegangscontrolelijsten (ACL's) geïmplementeerd.

Stel dat u drie gebruikers heeft: ‘tecmint1‘, ‘tecmint2‘ en ‘tecmint3‘. Elke gemeenschappelijke groep zegt ‘acl’. Gebruiker 'tecmint1' wil dat alleen de gebruiker 'tecmint2' bestanden kan lezen en toegang tot bestanden die eigendom zijn van ' tecmint1' en niemand anders zou daar toegang toe moeten hebben.

Met ACLs (Toegangscontrolelijsten) kunnen we hetzelfde trucje doen. Met deze ACL's kunnen we machtigingen verlenen aan een gebruiker, groep en elke groep gebruikers die niet in de groepslijst van een gebruiker staan.

Opmerking: Volgens de Redhat-productdocumentatie biedt het ACL-ondersteuning voor ext3-bestandssysteem en NFS-geëxporteerde bestandssystemen.

Hoe u ACL-ondersteuning in Linux-systemen kunt controleren

Voordat u verder gaat, moet u ondersteuning hebben voor ACL's op de huidige kernel- en aangekoppelde bestandssystemen.

1. Controleer Kernel op ACL-ondersteuning

Voer de volgende opdracht uit om ACL-ondersteuning voor bestandssysteem en POSIX_ACL=Y optie te controleren (als er N staat in plaats van Y, dan betekent dit Kernel ondersteunt geen ACL en moet opnieuw worden gecompileerd).

[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. Controleer de vereiste pakketten

Voordat u met ACL's begint te spelen, moet u ervoor zorgen dat de vereiste pakketten zijn geïnstalleerd. Hieronder staan de vereiste pakketten die geïnstalleerd moeten worden met yum of 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. Controleer of het gekoppelde bestandssysteem ondersteuning biedt voor ACL's

Controleer nu het aangekoppelde bestandssysteem of het met de ACL-optie is aangekoppeld of niet. We kunnen het ‘mount‘ commando gebruiken om hetzelfde te controleren, zoals hieronder getoond.

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

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

Maar in ons geval wordt acl standaard niet weergegeven. Dus nu hebben we de mogelijkheid om de aangekoppelde partitie opnieuw te koppelen met behulp van de optie acl. Maar voordat we verder gaan, hebben we nog een andere optie om ervoor te zorgen dat de partitie al dan niet met de acl-optie is aangekoppeld, omdat deze voor recente systemen mogelijk is geïntegreerd met de standaard mount-optie.

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

Default mount options:    user_xattr acl

In de bovenstaande uitvoer kun je zien dat de standaard mount-optie al ondersteuning biedt voor acl. Een andere optie is om de partitie opnieuw te koppelen, zoals hieronder weergegeven.

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

Voeg vervolgens het onderstaande item toe aan het bestand ‘/etc/fstab’ om het permanent te maken.

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

Monteer de partitie opnieuw.

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

4. Voor NFS-server

Als op de NFS-server het bestandssysteem dat door de NSF-server wordt geëxporteerd ACL ondersteunt en ACL's kunnen worden gelezen door NFS-clients, worden ACL's gebruikt door het clientsysteem.

Om ACL's op NFS-share uit te schakelen, moet u de optie “no_acl” toevoegen aan het bestand ‘/etc/exportfs’ op de NFS-server. Om het aan de NSF-clientzijde opnieuw uit te schakelen, gebruikt u de optie “no_acl” tijdens de mount-tijd.

Hoe ACL-ondersteuning in Linux-systemen te implementeren

Er zijn twee typen ACL's:

  1. Toegangs-ACL's: Toegangs-ACL's worden gebruikt voor het verlenen van machtigingen voor elk bestand of elke map.
  2. Standaard-ACL's: standaard-ACL's worden alleen gebruikt voor het verlenen/instellen van de toegangscontrolelijst voor een specifieke map.

Verschil tussen toegangs-ACL en standaard-ACL:

  1. Standaard ACL kan alleen op mapniveau worden gebruikt.
  2. Elke submap of elk bestand dat in die map wordt gemaakt, zal de ACL's van de bovenliggende map overnemen. Aan de andere kant erft een bestand de standaard-ACL's als toegangs-ACL's.
  3. We maken gebruik van “–d ” voor het instellen van standaard ACL's en standaard ACL's zijn optioneel.
Voordat u standaard-ACL's instelt

Om de standaard ACL's voor een specifiek bestand of map te bepalen, gebruikt u de opdracht ‘getfacl’. In het onderstaande voorbeeld wordt de getfacl gebruikt om de standaard ACL's voor een map ‘Muziek‘ op te halen.

[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-
Na het instellen van standaard ACL's

Om de standaard ACL's voor een specifiek bestand of map in te stellen, gebruikt u de opdracht ‘setfacl’. In het onderstaande voorbeeld zal de opdracht setfacl nieuwe ACL's instellen (lezen en uitvoeren) voor een map 'Muziek' sterk>.

[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

Hoe u nieuwe ACL's instelt

Gebruik de opdracht ‘setfacl’ voor het instellen of wijzigen van een bestand of map. Om bijvoorbeeld lees en schrijf rechten te geven aan gebruiker ‘tecmint1‘.

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

ACL's bekijken

Gebruik de opdracht ‘getfacl’ om ACL in elk bestand of elke map te bekijken. Als u bijvoorbeeld ACL op ‘/tecmint1/example’ wilt bekijken, gebruikt u het onderstaande commando.

getfacl /tecmint1/example

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

Hoe ACL's te verwijderen

Voor het verwijderen van ACL uit elk bestand/map gebruiken we de opties x en b, zoals hieronder weergegeven.

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

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

Laten we ACL's implementeren in de volgende scenario's.

Twee gebruikers (tecmint1 en tecmint2), beide met een gemeenschappelijke secundaire groep met de naam ‘acl‘. We zullen één map aanmaken die eigendom is van 'tecmint1' en zullen de lees en uitvoer rechten voor die map geven aan gebruiker 'tecmint2'.

Stap 1: Maak twee gebruikers aan en verwijder het wachtwoord van beide

[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

Stap 2: maak een groep en gebruikers naar een secundaire groep.

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

Stap 3: maak een directory /tecmint en wijzig het eigendom in 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

Stap 4: Log in met tecmint1 en maak een directory aan in de map /tecmint.

[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

Stap 5: Stel nu ACL in met 'setfacl', zodat 'tecmint1' alle rwx-rechten heeft, 'tecmint2' heeft alleen lees rechten voor de map 'voorbeeld' en andere hebben geen rechten.

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

Stap 6: Log nu in met een andere gebruiker, bijvoorbeeld ‘tecmint2’ op een andere terminal en wijzig de directory naar ‘/tecmint1‘. Probeer nu de inhoud te bekijken met de opdracht ‘ls’ en probeer vervolgens van map te veranderen en zie het verschil zoals hieronder.

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

Stap 7: Geef nu 'uitvoeren' toestemming aan 'tecmint2' in de map 'example' en gebruik vervolgens 'cd' commando om het effect te zien. Nu heeft ‘tecmint2‘ de rechten om de map te bekijken en te wijzigen, maar heeft geen toestemming om iets te schrijven.

[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

Opmerking: Na de implementatie van ACL ziet u een extra ‘+’ teken voor ‘ls –l’ uitvoer, zoals hieronder.

[root@linux tecmint1]# ll

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

Referentiekoppelingen

Documentatie van ACL