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=y2. Ü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 aclIn 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 1Mounten 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:
- Zugriffs-ACLs: Zugriffs-ACLs werden zum Erteilen von Berechtigungen für Dateien oder Verzeichnisse verwendet.
- 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:
- Die Standard-ACL kann nur auf Verzeichnisebene verwendet werden.
- 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.
- 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-xSo 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/exampleAnzeigen 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/direcotyLassen 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 tecmint2Schritt 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-xSchritt 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
tecmint1Schritt 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 exampleVerweise
Dokumentation von ACL
