Bestanden/mappen beveiligen met ACL’s (toegangsbeheerlijsten) in Linux

Als Systeembeheerder zal onze eerste prioriteit zijn om gegevens te beschermen en beveiligen tegen ongeautoriseerde toegang. We zijn allemaal bekend met de machtigingen die we instellen met behulp van enkele handige Linux-commando’s zoals chmod, chown, chgrp… etc. Deze standaardmachtigingsreeksen hebben echter enkele beperkingen en werken soms niet zoals we willen. We kunnen bijvoorbeeld geen verschillende machtigingsreeksen instellen voor verschillende gebruikers in dezelfde map of hetzelfde bestand. Daarom werden Toegangsbeheerlijsten (ACL’s) geïmplementeerd.

Linux Access Control Lists

Stel dat je drie gebruikers hebt, ’tecmint1′, ’tecmint2′ en ’tecmint3′. Elke gebruiker heeft een gemeenschappelijke groep genaamd ‘acl’. Gebruiker ’tecmint1′ wil dat alleen gebruiker ’tecmint2′ bestanden die eigendom zijn van ’tecmint1′ kan lezen en benaderen, en dat niemand anders toegang mag hebben.

ACL’s (Toegangsbeheerlijsten) stellen ons in staat om deze truc toe te passen. Deze ACL’s stellen ons in staat om machtigingen toe te kennen aan een gebruiker, groep en een groep van gebruikers die niet in de groepslijst van een gebruiker staan.

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

Hoe ACL-ondersteuning controleren in Linux-systemen

Voordat we verder gaan, moet je controleren of de huidige Kernel ACL’s ondersteunt en of de bestandssystemen zijn gemount met die ondersteuning.

1. Controleer de Kernel op ACL-ondersteuning

Voer de volgende opdracht uit om de ondersteuning voor ACL voor het bestandssysteem en de optie POSIX_ACL=Y te controleren (als er N in plaats van Y staat, betekent dit dat de kernel geen ACL ondersteunt en opnieuw moet 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 je met ACL’s gaat werken, zorg ervoor dat de vereiste pakketten zijn geïnstalleerd. Hieronder staan de vereiste pakketten die moeten worden geïnstalleerd met behulp van 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 het gemonteerde bestandssysteem voor ondersteuning van ACL’s

Controleer nu het gemonteerde bestandssysteem om te zien of het is gemonteerd met de ACL-optie of niet. We kunnen het commando ‘mount’ gebruiken om dit te controleren, zoals hieronder wordt weergegeven.

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

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

Maar in ons geval wordt het niet standaard weergegeven. Dus, vervolgens hebben we de optie om de gemonteerde partitie opnieuw te monteren met de acl-optie. Maar voordat we verder gaan, hebben we nog een optie om te controleren of de partitie is gemonteerd met de acl-optie of niet, omdat voor recente systemen dit kan zijn geïntegreerd met de standaard mountoptie.

[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 mountoptie al ondersteuning heeft voor acl. Een andere optie is om de partitie opnieuw te monteren zoals hieronder wordt weergegeven.

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

Voeg vervolgens de onderstaande invoer toe aan het bestand ‘/etc/fstab’ om deze 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

Op de NFS-server, als het bestandssysteem dat wordt geëxporteerd door de NFS-server ACL ondersteunt en ACL’s kunnen worden gelezen door NFS-clients, worden ACL’s gebruikt door het clientsysteem.

Voor het uitschakelen van ACL’s op een NFS-share moet je de optie “no_acl” toevoegen in het bestand ‘/etc/exportfs‘ op de NFS-server. Om het aan de kant van de NSF-client opnieuw uit te schakelen, gebruik je tijdens het monteren opnieuw de optie “no_acl“.

Hoe ACL-ondersteuning te implementeren in Linux-systemen

Er zijn twee soorten ACL’s:

  1. Toegangs-ACL’s: Toegangs-ACL’s worden gebruikt om machtigingen te verlenen voor elk bestand of elke map.
  2. Standaard-ACL’s: Standaard-ACL’s worden gebruikt om toegangsbeheerlijsten in te stellen voor een specifieke map.

Verschil tussen Toegangs-ACL en Standaard-ACL:

  1. Standaard-ACL’s kunnen alleen op mapniveau worden gebruikt.
  2. Elke submap of bestand gemaakt binnen die map erft de ACL’s van zijn oudermap. Aan de andere kant erft een bestand de standaard-ACL’s als zijn toegangs-ACL’s.
  3. We maken gebruik van “–d” om standaard-ACL’s in te stellen en standaard-ACL’s zijn optioneel.
Vóór het instellen van Standaard-ACL’s

Om de standaard-ACL’s voor een specifiek bestand of een map te bepalen, gebruik je het commando ‘getfacl‘. In het onderstaande voorbeeld wordt de getfacl gebruikt om de standaard-ACL’s voor een map ‘Muziek‘ te krijgen.

[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 een map in te stellen, gebruik je het commando ‘setfacl‘. In het onderstaande voorbeeld zal het setfacl-commando nieuwe ACL’s (lezen en uitvoeren) instellen voor een map ‘Muziek‘.

[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 nieuwe ACL’s in te stellen

Gebruik het ‘setfacl’-commando om ACL’s in te stellen of aan te passen op een bestand of map. Bijvoorbeeld, om de lees- en schrijfmachtigingen te geven aan gebruiker ’tecmint1′.

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

Hoe ACL’s te bekijken

Gebruik het ‘getfacl’ commando om ACL’s op een bestand of map te bekijken. Bijvoorbeeld, om ACL’s te bekijken voor ‘/tecmint1/example’, gebruik onderstaand 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

Om ACL van een bestand/map te verwijderen, gebruiken we de ‘x’ en ‘b’ opties 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 op de volgende scenario’s.

Twee gebruikers (tecmint1 en tecmint2), beide met een gemeenschappelijke secundaire groep genaamd ‘acl’. We zullen een map maken die eigendom is van ’tecmint1′ en de lees- en uitvoermachtigingen op 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 aan en voeg gebruikers toe aan de secundaire groep.

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

Stap 3: Maak een map /tecmint aan en wijzig de eigendom naar 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 map aan in de /tecmint-map.

[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-machtigingen heeft, ’tecmint2′ alleen leesmachtiging heeft op de map ‘voorbeeld’ en anderen geen machtigingen hebben.

$ 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, namelijk ’tecmint2′, op een ander terminal en wijzig de map naar ‘/tecmint1’. Probeer nu de inhoud te bekijken met het ‘ls’ commando en probeer vervolgens de map te wijzigen en bekijk 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 ‘uitvoer’ toestemming aan ’tecmint2′ op de map ‘voorbeeld’ en gebruik vervolgens het ‘cd’ commando om het effect te zien. Nu heeft ’tecmint2′ de toestemming 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 het implementeren van ACL ziet u een extra ‘+’ teken in de ‘ls -l’ output zoals hieronder.

[root@linux tecmint1]# ll

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

Referentielinks

Documentatie over ACL’s

Source:
https://www.tecmint.com/secure-files-using-acls-in-linux/