Website-Suche

Sichern Sie Dateien/Verzeichnisse mithilfe von ACLs (Access Control Lists) unter Linux


Als Systemadministrator wird es für uns oberste Priorität sein, 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 usw. festlegen. Allerdings handelt es sich hierbei um Standardberechtigungen Sets haben einige Einschränkungen und funktionieren manchmal möglicherweise nicht entsprechend unseren Anforderungen. Wir können beispielsweise keine unterschiedlichen Berechtigungssätze für verschiedene Benutzer für dasselbe Verzeichnis oder dieselbe Datei einrichten. Daher wurden Access Control Lists (ACLs) implementiert.

Nehmen wir an, Sie haben drei Benutzer, „tecmint1“, „tecmint2“ und „tecmint3“. Jede gemeinsame Gruppe sagt „acl“. Der Benutzer „tecmint1“ möchte, dass nur der Benutzer „tecmint2“ Dateien lesen und darauf zugreifen kann, deren Eigentümer „“ ist tecmint1‘ und niemand sonst sollte Zugriff darauf haben.

Mit ACLss (Access Control Lists) können wir denselben Trick ausführen. Diese ACLs ermöglichen es uns, Berechtigungen für einen Benutzer, eine Gruppe und jede 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 über Unterstützung für ACLs auf aktuellen Kernel- und gemounteten Dateisystemen verfügen.

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 steht, bedeutet dies Kernel). unterstützt ACL nicht und muss neu kompiliert werden).

[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 sind die erforderlichen Pakete aufgeführt, 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 bereitgestellte Dateisystem auf ACL-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 dasselbe 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 bereitzustellen. Aber bevor wir fortfahren, haben wir noch eine weitere Möglichkeit, um sicherzustellen, dass die Partition mit der ACL-Option gemountet wird oder nicht, da sie bei neueren Systemen 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 Standard-Mount-Option bereits ACL unterstützt. Eine andere Möglichkeit besteht darin, die Partition wie unten gezeigt erneut bereitzustellen.

[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

Hängen Sie die Partition erneut ein.

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

4. Für NFS-Server

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

Um ACLs auf der NFS-Freigabe 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-Clientseite wieder zu deaktivieren, verwenden Sie während der Bereitstellung die Option „no_acl“.

So implementieren Sie ACL-Unterstützung in Linux-Systemen

Es gibt zwei Arten von ACLs:

  1. Zugriffs-ACLs: Zugriffs-ACLs werden zum Erteilen von Berechtigungen für jede Datei oder jedes Verzeichnis verwendet.
  2. Standard-ACLs: Standard-ACLs werden nur zum Gewähren/Festlegen einer Zugriffskontrollliste für ein bestimmtes Verzeichnis verwendet.

Unterschied zwischen Zugriffs-ACL und Standard-ACL:

  1. Die Standard-ACL kann nur auf Verzeichnisebene verwendet werden.
  2. Jedes in diesem Verzeichnis erstellte Unterverzeichnis oder jede in diesem Verzeichnis erstellte Datei erbt die ACLs vom übergeordneten Verzeichnis. Andererseits 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 einen 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 legt der Befehl setfacl neue ACLs (lesen und ausführen) für einen Ordner „Musik“ fest. .

[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“ zum Festlegen oder Ändern einer beliebigen Datei oder eines beliebigen Verzeichnisses. Beispielsweise können Sie dem Benutzer „tecmint1Lese-- und Schreib-Berechtigungen erteilen.

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

So zeigen Sie ACLs an

Verwenden Sie den Befehl „getfacl“, um die ACL für jede Datei oder jedes Verzeichnis anzuzeigen. Um beispielsweise die ACL für „/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 beliebigen Datei/einem beliebigen 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 für die folgenden Szenarios implementieren.

Zwei Benutzer (tecmint1 und tecmint2), beide mit einer gemeinsamen sekundären Gruppe namens „acl“. Wir erstellen ein Verzeichnis, dessen Eigentümer „tecmint1“ ist, und erteilen dem Benutzer „tecmint2“ die Berechtigung zum Lesen und Ausführen für dieses Verzeichnis'.

Schritt 1: Erstellen Sie zwei Benutzer und entfernen Sie das Passwort von beiden

[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 zur 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: Legen Sie nun die ACL mit „setfacl“ fest, sodass „tecmint1“ über alle rwx-Berechtigungen verfügt. „tecmint2“ hat nur die Berechtigung Lesen für den Ordner „example“ und andere haben keine Berechtigungen.

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, z. B. „tecmint2“, an einem anderen Terminal an und wechseln Sie in das Verzeichnis „/tecmint1“. Versuchen Sie nun, den Inhalt mit dem Befehl „ls“ anzuzeigen und versuchen Sie dann, das Verzeichnis zu wechseln, um 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: Erteilen Sie nun „tecmint2“ im Ordner „example“ die Berechtigung „Ausführen“ und verwenden Sie dann 'cd'-Befehl, um den Effekt zu sehen. Jetzt hat „tecmint2“ die Berechtigung zum Anzeigen und Ändern des Verzeichnisses, aber keine Berechtigung zum 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

Referenzlinks

ACL-Dokumentation