Dateisystem-ACLs unter Linux

Neben den bei Linux-Admins allseits bekannten Permission-Bits (Read-, Write- und Execute-Berechtigungen für User, Gruppen bzw. World) gibt es noch weitere Möglichkeiten, die Berechtigungen von Dateien zu definieren. Eine davon ist die Verwendung von Access Control Lists, kurz ACLs.
Mit ACLs kann im Gegensatz zu traditionellen Unix-Berechtigungen für mehrere Benutzer und Gruppen definiert werden, wer Zugriff auf eine Datei erhalten soll. Um ACLs verwenden zu können, muss man ein Dateisystem verwenden, das diese unterstützt (z.B. ext3). Zusätzlich muss das Dateisystem mit der Option “acl” gemountet werden, wie folgendes fstab-Beispiel zeigt:

/dev/sda1     /           ext4    errors=remount-ro,acl	    0       1

Je nach verwendetem Dateisystem ist die “acl”-Option eventuell bereits standardmäßig aktiviert.
Zusätzlich müssen noch Tools installiert werden, um ACLs anzeigen und bearbeiten zu können. Bei Debian sind diese z.B. im Paket “acl” enthalten:

$ sudo aptitude install acl
The following NEW packages will be installed:
  acl
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/70,8 kB of archives. After unpacking 264 kB will be used.
Selecting previously unselected package acl.
(Reading database ... 104211 files and directories currently installed.)
Unpacking acl (from .../acl_2.2.51-8_amd64.deb) ...
Processing triggers for man-db ...
Setting up acl (2.2.51-8) ...

Danach können wir auch schon damit anfangen, ACLs zu verwenden. Zunächst legen wir ein Verzeichnis und eine Test-Datei an, die in den folgenden Beispielen verwendet werden:

$ mkdir acl
$ touch acl/test

Mit Hilfe des Tools “getfacl” können wir uns die ACLs eines Verzeichnisses bzw. einer Datei anzeigen lassen:

$ getfacl acl
# file: acl
# owner: gunnar
# group: gunnar
user::rwx
group::rwx
other::r-x

Obwohl wir noch gar keine ACLs definiert haben, hat das Verzeichnis bereits 3 Einträge. Diese entsprechen den UNIX-Berechtigungen, die z.B. auch von “ls -l” angezeigt werden.
Mit folgenden Befehlen können wir nun die Berechtigungen so anpassen, dass der Benutzer “gunnar” lesend und schreibend auf das Verzeichnis zugreifen kann, während der Benutzer “www-data” nur-lesenden Zugriff hat:

$ chmod 700 acl
$ setfacl -m user:www-data:rx acl

Wenn wir uns das Verzeichnis danach mit ls anzeigen lassen, erkennen wir an dem “+” bei den Berechtigungs-Bits, dass für dieses Verzeichnis ACLs definiert wurde:

$ ls -l
total 52
drwxr-x---+ 2 gunnar gunnar  4096 Mär 21 12:21 acl

Die ACLs können wir uns dann mit getfacl anzeigen lassen:

$ getfacl acl
# file: acl
# owner: gunnar
# group: gunnar
user::rwx
user:www-data:r-x
group::---
mask::r-x
other::---

ACLs von Verzeichnissen werden dabei nicht standardmäßig an Unterverzeichnisse oder Dateien vererbt. Hierzu können wir uns die Berechtigungen von “acl/test” anzeigen lassen:

$ getfacl acl/test
# file: acl/test
# owner: gunnar
# group: gunnar
user::rw-
group::rw-
other::r--

Falls wir Berechtigungen vererben wollen, z.B. damit der “www-data”-Benutzer rekursiv auf alle Dateien in einem Verzeichnis zugreifen kann, müssen wir für das Verzeichnis eine sogenannte Default-ACL definieren. Hierzu gibt es beim Befehl setfacl den Parameter “-d”:

$ setfacl -d -m user:www-data:rx acl

Die Default-ACL gilt dabei ausschließlich für neu-angelegte Unterverzeichnisse und Dateien:

$ touch acl/test2
$ getfacl acl/test2
# file: acl/test2
# owner: gunnar
# group: gunnar
user::rw-
user:www-data:r-x		#effective:r--
group::---
mask::r--
other::---

Weiterführende Informationen zu Unix-ACLs gibt es in den Manpages der Befehle getfacl und setfacl bzw. in acl(5). Neben ACLs gibt es auch noch weitere Möglichkeiten, Berechtigungen zu vergeben, wie beispielsweise SELinux-Labels oder in neueren Versionen des Linux-Kernels NFSv4 ACLs (“Richacls“).

sshfs – Mounten über SSH

Ich weiß gar nicht, ob Sie’s schon wussten (Rüdiger Hoffmann), aber Dateisysteme können auch sehr einfach über SSH zwischen Servern gemountet werden. Das Schöne an sshfs ist der minimale Installationsaufwand und das keinerlei Freigaben wie beispielsweise /etc/exports (NFS) oder /etc/samba/smb.conf (Samba) gepflegt werden müssen. Da sshfs – wie der Name schon vermuten lässt – auf SSH basiert, bekommt man eine saubere Authentifizierung und Verschlüsselung quasi “für umme” dazu.
Wie funktioniert nun die Raketentechnik?
Auf host-1 wird ein Testverzeichnis mit einer Testdatei vorbereitet. Mehr nicht.

host-1# mkdir /tmp/testfolder
host-1# touch /tmp/testfolder/testfile
host-1# ls /tmp/testfolder/
testfile
host-1#

Um nun auf host-2 das Verzeichnis /tmp/testfolder von host-1 zu mounten wird lediglich sshfs, ein SSH Account auf host-1 und die Zugriffsrechte im Dateisystem von host-1 benötigt.

host2# apt-get install sshfs
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
sshfs
0 upgraded, 1 newly installed, 0 to remove and 57 not upgraded.
Need to get 44.1 kB of archives.
After this operation, 160 kB of additional disk space will be used.
Get:1 http://ftp.de.debian.org/debian/ squeeze/main sshfs amd64 2.2-1 [44.1 kB]
Fetched 44.1 kB in 0s (121 kB/s)
Selecting previously deselected package sshfs.
(Reading database ... 40742 files and directories currently installed.)
Unpacking sshfs (from .../archives/sshfs_2.2-1_amd64.deb) ...
Processing triggers for man-db ...
Setting up sshfs (2.2-1) ...
host2#
host2# sshfs testuser@host-1:/tmp/testfolder /mnt
testuser@host-1's password:
host2#
host2# df -h /mnt
Filesystem Size Used Avail Use% Mounted on
testuser@host-1:/tmp/testfolder
5.0G 701M 4.0G 15% /mnt
host2#
host2# ls /mnt/
testfile
host2#

Letztendlich ist es so einfach das es schon wieder Genial ist 🙂

Tobias Redel
Tobias Redel
Head of Professional Services

Tobias hat nach seiner Ausbildung als Fachinformatiker bei der Deutschen Telekom bei T-Systems gearbeitet. Seit August 2008 ist er bei NETWAYS, wo er in der Consulting-Truppe unsere Kunden in Sachen Open Source, Monitoring und Systems Management unterstützt. Insgeheim führt er jedoch ein Doppelleben als Travel-Hacker, arbeitet an seiner dritten Millionen Euro (aus den ersten beiden ist nix geworden) und versucht die Weltherrschaft an sich zu reißen.