Website-Suche

Sichere Dateien/Verzeichnisse mit ACLs (Access Control Lists) unter Linux


Als Systemadministrator besteht unsere oberste Priorität darin, Daten vor unbefugtem Zugriff zu schützen und zu sichern. Wir alle kennen die Berechtigungen, die wir mit einigen hilfreichen Linux-Befehlen wie chmod, chown, chgrp festlegen. etc. Diese Standardberechtigungssätze weisen jedoch einige Einschränkungen auf und funktionieren manchmal nicht gemäß unseren Anforderungen. Wir können z. B. keine unterschiedlichen Berechtigungssätze für verschiedene Benutzer für dasselbe Verzeichnis oder dieselbe Datei einrichten. So wurden Access Control Lists (ACLs) implementiert.

Nehmen wir an, Sie haben drei Benutzer, 'tecmint1', 'tecmint2' und 'tecmint3'. Jede mit einer gemeinsamen Gruppe sagt 'acl'. Der Benutzer 'tecmint1' möchte, dass nur der Benutzer 'tecmint2' Dateien lesen und darauf zugreifen kann, die 'tecmint1' gehören, und niemand sonst sollte Zugriff darauf haben.

ACLs (Access Control Lists) ermöglicht es uns, den gleichen Trick zu machen. Diese ACLs ermöglichen es uns, Berechtigungen für einen Benutzer, eine Gruppe und eine beliebige Gruppe von Benutzern zu erteilen, die nicht in der Gruppenliste eines Benutzers enthalten sind.

Hinweis: Gemäß der Redhat-Produktdokumentation bietet es ACL-Unterstützung für ext3-Dateisysteme und NFS-exportierte Dateisysteme.

So überprüfen Sie die ACL-Unterstützung in Linux-Systemen

Bevor Sie fortfahren, sollten Sie Unterstützung für ACLs auf aktuellen Kernel- und gemounteten Dateisystemen haben.

1. Überprüfen Sie den Kernel auf ACL-Unterstützung

Führen Sie den folgenden Befehl aus, um die ACL-Unterstützung für das Dateisystem und die Option POSIX_ACL=Y zu überprüfen (wenn N anstelle von Y vorhanden ist, bedeutet dies, dass der Kernel ACL nicht unterstützt und neu kompiliert werden muss).

[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. Überprüfen Sie die erforderlichen Pakete

Bevor Sie mit ACLs spielen, stellen Sie sicher, dass Sie die erforderlichen Pakete installiert haben. Nachfolgend finden Sie die erforderlichen Pakete, die mit yum oder apt-get installiert werden müssen.

[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. Überprüfen Sie das gemountete Dateisystem auf ACLs-Unterstützung

Überprüfen Sie nun das gemountete Dateisystem, ob es mit der ACL-Option gemountet ist oder nicht. Wir können den Befehl 'mount' verwenden, um dies zu überprüfen, wie unten gezeigt.

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

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

Aber in unserem Fall wird ACL standardmäßig nicht angezeigt. Als nächstes haben wir die Möglichkeit, die gemountete Partition mit der Option acl erneut zu mounten. Bevor wir jedoch fortfahren, haben wir noch eine andere Option, um sicherzustellen, dass die Partition mit der Option acl gemountet ist oder nicht, da sie für neuere Systeme möglicherweise mit der Standard-Mount-Option integriert ist.

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

Default mount options:    user_xattr acl

In der obigen Ausgabe können Sie sehen, dass die Standardmount-Option bereits Unterstützung für acl bietet. Eine andere Möglichkeit besteht darin, die Partition wie unten gezeigt erneut zu mounten.

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

Fügen Sie als Nächstes den folgenden Eintrag zur Datei '/etc/fstab' hinzu, um ihn dauerhaft zu machen.

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

Mounten Sie die Partition erneut.

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

4. Für NFS-Server

Wenn auf dem NFS-Server das Dateisystem, das vom NSF-Server exportiert wird, ACLs unterstützt und ACLs von NFS-Clients gelesen werden können, werden ACLs vom Client-System verwendet.

Um ACLs auf NFS-Freigaben zu deaktivieren, müssen Sie die Option "no_acl" in der Datei '/etc/exportfs' auf dem NFS-Server hinzufügen. Um es auf der NSF-Client-Seite wieder zu deaktivieren, verwenden Sie die Option "no_acl" während der Mount-Zeit.

Implementieren der ACL-Unterstützung in Linux-Systemen

Es gibt zwei Arten von ACLs:

  1. Zugriffs-ACLs: Zugriffs-ACLs werden zum Erteilen von Berechtigungen für Dateien oder Verzeichnisse verwendet.
  2. Standard-ACLs: Standard-ACLs werden zum Gewähren/Festlegen der Zugriffssteuerungsliste nur für ein bestimmtes Verzeichnis verwendet.

Unterschied zwischen Access ACL und Default ACL:

  1. Die Standard-ACL kann nur auf Verzeichnisebene verwendet werden.
  2. Jedes Unterverzeichnis oder jede Datei, die in diesem Verzeichnis erstellt wird, erbt die ACLs vom übergeordneten Verzeichnis. Auf der anderen Seite erbt eine Datei die Standard-ACLs als Zugriffs-ACLs.
  3. Wir verwenden "–d " zum Festlegen von Standard-ACLs und Standard-ACLs sind optional.
Vor dem Festlegen von Standard-ACLs

Um die Standard-ACLs für eine bestimmte Datei oder ein bestimmtes Verzeichnis zu ermitteln, verwenden Sie den Befehl 'getfacl'. Im folgenden Beispiel wird getfacl verwendet, um die Standard-ACLs für den Ordner 'Music' abzurufen.

[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-
Nach dem Festlegen von Standard-ACLs

Um die Standard-ACLs für eine bestimmte Datei oder ein bestimmtes Verzeichnis festzulegen, verwenden Sie den Befehl 'setfacl'. Im folgenden Beispiel setzt der Befehl setfacl eine neue ACLs (lesen und ausführen) für den Ordner 'Music'.

[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

So legen Sie neue ACLs fest

Verwenden Sie den Befehl 'setfacl', um eine beliebige Datei oder ein Verzeichnis festzulegen oder zu ändern. Zum Beispiel, um dem Benutzer 'tecmint1' Lese- und Schreibrechte zu erteilen.

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

Anzeigen von ACLs

Verwenden Sie den Befehl 'getfacl', um die ACL für eine beliebige Datei oder ein Verzeichnis anzuzeigen. Um beispielsweise die ACL auf '/tecmint1/example' anzuzeigen, verwenden Sie den folgenden Befehl.

# getfacl /tecmint1/example

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

So entfernen Sie ACLs

Um ACL aus einer Datei/einem Verzeichnis zu entfernen, verwenden wir die Optionen x und b, wie unten gezeigt.

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

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

Lassen Sie uns ACLs in den folgenden Szenarien implementieren.

Zwei Benutzer (tecmint1 und tecmint2), die beide eine gemeinsame sekundäre Gruppe mit dem Namen "acl" haben. Wir erstellen ein Verzeichnis, das 'tecmint1' gehört, und stellen dem Benutzer 'tecmint2' die Lese- und Ausführungsberechtigung für dieses Verzeichnis zur Verfügung.

Schritt 1: Erstellen Sie zwei Benutzer und entfernen Sie das Kennwort für beide Benutzer

[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

Schritt 2: Erstellen Sie eine Gruppe und Benutzer in der sekundären Gruppe.

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

Schritt 3: Erstellen Sie ein Verzeichnis /tecmint und ändern Sie den Besitzer 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

Schritt 4: Melden Sie sich mit tecmint1 an und erstellen Sie ein Verzeichnis im Ordner /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

Schritt 5: Setzen Sie nun die ACL mit 'setfacl', so dass 'tecmint1' alle rwx-Berechtigungen hat, 'tecmint2' nur Leseberechtigung für den 'example'-Ordner hat und andere keine Berechtigungen haben.

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

Schritt 6: Melden Sie sich nun mit einem anderen Benutzer, d.h. 'tecmint2', auf einem anderen Terminal an und wechseln Sie das Verzeichnis auf '/tecmint1'. Versuchen Sie nun, den Inhalt mit dem Befehl 'ls' anzuzeigen, und versuchen Sie dann, das Verzeichnis zu wechseln und den Unterschied wie folgt zu sehen.

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

Schritt 7: Geben Sie nun 'tecmint2' die Berechtigung 'execute' für den Ordner 'example' und verwenden Sie dann den Befehl 'cd', um den Effekt zu sehen. Jetzt hat 'tecmint2' die Berechtigungen, das Verzeichnis anzuzeigen und zu wechseln, aber keine Berechtigungen, etwas zu schreiben.

[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

Hinweis: Nach der Implementierung von ACL sehen Sie ein zusätzliches '+'-Zeichen für die 'ls –l'-Ausgabe wie unten.

[root@linux tecmint1]# ll

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

Verweise

Dokumentation von ACL

Verwandte Artikel: