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:
- Zugriffs-ACLs: Zugriffs-ACLs werden zum Erteilen von Berechtigungen für jede Datei oder jedes Verzeichnis verwendet.
- 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:
- Die Standard-ACL kann nur auf Verzeichnisebene verwendet werden.
- 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.
- 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 „tecmint1“ Lese-- 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