sammlung:acl

Dies ist eine alte Version des Dokuments!


Access Control Lists (ACL) unter Linux

Mit ACLs (Access Control Lists) und erweiterten Attributen können Zugriffsrechte auf Dateien und Verzeichnisse detaillierter vergeben werden als mit den klassischen Unix-Rechten (User/Group/Other).

Vorteile von ACL

  • Rechte für mehrere Benutzer und Gruppen gleichzeitig
  • Feingranulare Steuerung von Lese-, Schreib- und Ausführungsrechten
  • Erweiterte Attribute für zusätzliche Metadaten
  • Capabilities für präzise Rechtevergabe ohne volle Root-Rechte

Voraussetzungen

# Prüfen ob Dateisystem ACL unterstützt
mount | grep acl
tune2fs -l /dev/sda1 | grep acl
 
# ACL-Pakete installieren (falls nicht vorhanden)
sudo apt install acl attr         # Debian/Ubuntu
sudo dnf install acl attr         # RHEL/Fedora
 
# Dateisystem mit ACL mounten (falls nötig)
sudo mount -o remount,acl /partition
# Oder in /etc/fstab: defaults,acl

getfacl - ACL anzeigen

getfacl zeigt die Access Control Lists einer Datei oder eines Verzeichnisses an.

Syntax

getfacl [OPTIONEN] datei

Beispiele

# ACL einer Datei anzeigen
getfacl datei.txt
 
# Ausgabe:
# file: datei.txt
# owner: user
# group: group
user::rw-
user:alice:rwx
group::r--
mask::rwx
other::r--
 
# ACL für mehrere Dateien
getfacl datei1.txt datei2.txt
 
# Rekursiv für Verzeichnis
getfacl -R verzeichnis/
 
# Ohne Header/Kommentare (nur Rechte)
getfacl -c datei.txt
 
# Numerische IDs statt Namen
getfacl -n datei.txt
 
# Absolute Pfade anzeigen
getfacl -p verzeichnis/*
 
# Als Backup speichern
getfacl -R /home/user > acl-backup.txt

Wichtige Optionen

Option Bedeutung
-R Rekursiv
-c Ohne Kommentare
-e Alle effektiven Rechte anzeigen
-n Numerische User/Group IDs
-p Absolute Pfade nicht kürzen
-t Tabellarische Ausgabe

setfacl - ACL setzen/ändern

setfacl setzt oder ändert Access Control Lists für Dateien und Verzeichnisse.

Syntax

setfacl [OPTIONEN] [REGEL] datei

Grundlegende Beispiele

# Benutzer-Rechte hinzufügen
setfacl -m u:alice:rwx datei.txt      # alice erhält rwx
setfacl -m u:bob:r-- datei.txt        # bob erhält r--
 
# Gruppen-Rechte hinzufügen
setfacl -m g:projekt:rw- datei.txt    # Gruppe projekt erhält rw-
setfacl -m g:admin:rwx datei.txt      # Gruppe admin erhält rwx
 
# Other-Rechte ändern
setfacl -m o::r-- datei.txt            # Other erhält r--
 
# Mask setzen (maximale effektive Rechte)
setfacl -m m::rw- datei.txt            # Mask auf rw- setzen

Mehrere ACLs gleichzeitig

# Mehrere Regeln mit Komma
setfacl -m u:alice:rwx,u:bob:r--,g:team:rw- datei.txt
 
# Mit mehreren -m Optionen
setfacl -m u:alice:rwx -m u:bob:r-- datei.txt

ACLs entfernen

# Spezifischen Eintrag entfernen
setfacl -x u:alice datei.txt          # ACL für alice entfernen
setfacl -x g:projekt datei.txt        # ACL für Gruppe entfernen
 
# Alle ACLs entfernen
setfacl -b datei.txt                   # Alle Extended ACLs löschen
 
# Alle default ACLs entfernen
setfacl -k verzeichnis/                # Nur Default-ACLs löschen

Standard-ACL für Verzeichnisse

Default ACLs werden auf neu erstellte Dateien/Verzeichnisse vererbt:

# Default ACL setzen (mit d: Präfix)
setfacl -m d:u:alice:rwx verzeichnis/
setfacl -m d:g:team:rw- verzeichnis/
 
# Default und normale ACL gleichzeitig
setfacl -m u:alice:rwx,d:u:alice:rwx verzeichnis/
 
# Beispiel: Projekt-Verzeichnis
setfacl -m u:alice:rwx verzeichnis/            # Alice Zugriff auf bestehendes
setfacl -m d:u:alice:rwx verzeichnis/          # Alice Zugriff auf neue Dateien
setfacl -m d:g:projektteam:rw- verzeichnis/    # Team Zugriff auf neue Dateien
 
# Groß-X: Ausführungsrecht nur für Verzeichnisse
setfacl -m d:u:alice:rwX verzeichnis/

Rekursiv anwenden

# Rekursiv auf Verzeichnis und Inhalt
setfacl -R -m u:alice:rwx verzeichnis/
 
# Rekursiv + Default ACL für neue Dateien
setfacl -R -m u:alice:rwx verzeichnis/
setfacl -R -m d:u:alice:rwx verzeichnis/
 
# Kombiniert
setfacl -R -m u:alice:rwx,d:u:alice:rwx verzeichnis/

ACLs kopieren/wiederherstellen

# ACL von einer Datei auf andere kopieren
getfacl datei1.txt | setfacl --set-file=- datei2.txt
 
# ACL Backup erstellen und wiederherstellen
getfacl -R /home/user > acl-backup.txt
setfacl --restore=acl-backup.txt
 
# ACL von Verzeichnis auf anderes kopieren
getfacl -R /source/ | setfacl --restore=-

Wichtige Optionen

Option Bedeutung
-m Modify - ACL hinzufügen/ändern
-x Remove - ACL-Eintrag entfernen
-b Remove all - Alle ACLs entfernen
-k Remove default - Default ACLs entfernen
-R Rekursiv
–set ACL komplett ersetzen
–set-file ACL aus Datei setzen
–restore ACL-Backup wiederherstellen
-d Default ACL ändern (deprecated, nutze d: Präfix)
–test Testmodus (keine Änderungen)

ACL-Notation

[d:]<typ>:<name>:<rechte>

d:         = Default ACL (nur bei Verzeichnissen)
<typ>      = u (user), g (group), o (other), m (mask)
<name>     = Username oder Gruppenname (leer bei owner/other)
<rechte>   = rwx, rw-, r--, etc.

Beispiele:

u:alice:rwx        # User alice mit rwx
g:team:rw-         # Gruppe team mit rw-
u::rw-             # Dateibesitzer mit rw-
o::r--             # Other mit r--
m::rwx             # Mask mit rwx
d:u:alice:rwx      # Default für alice
d:g:team:rw-       # Default für Gruppe team

chacl - ACL setzen (IRIX/XFS Style)

chacl ist eine alternative Syntax für ACLs, ursprünglich von IRIX/XFS. Auf modernen Linux-Systemen wird meist setfacl bevorzugt.

Syntax

chacl acl datei

Beispiele

# ACL setzen (IRIX-Stil)
chacl u::rwx,g::r--,o::--- datei.txt
 
# Mit Named User
chacl u::rwx,u:alice:rwx,g::r--,o::--- datei.txt
 
# Rekursiv
chacl -r u::rwx,g::r--,o::--- verzeichnis/

Hinweis: Auf den meisten Linux-Systemen ist setfacl die bevorzugte Methode.

attr - Erweiterte Attribute verwalten

attr verwaltet erweiterte Dateiattribute (Extended Attributes), die zusätzliche Metadaten an Dateien anhängen.

Syntax

attr [OPTIONEN] datei

Beispiele

# Attribut setzen
attr -s attributname -V "wert" datei.txt
attr -s kommentar -V "Wichtiges Dokument" datei.txt
 
# Attribut anzeigen
attr -g attributname datei.txt
attr -g kommentar datei.txt
 
# Alle Attribute auflisten
attr -l datei.txt
 
# Attribut entfernen
attr -r attributname datei.txt
attr -r kommentar datei.txt
 
# Root-Namespace verwenden (nur root)
attr -Rs attribut -V "wert" datei.txt

Wichtige Optionen

Option Bedeutung
-s Set - Attribut setzen
-g Get - Attribut anzeigen
-r Remove - Attribut entfernen
-l List - Alle Attribute auflisten
-V Value - Wert des Attributs
-R Root-Namespace
-L Symlinks nicht folgen

Namespaces

Extended Attributes nutzen verschiedene Namespaces:

  • user.* - Normale Benutzer-Attribute
  • trusted.* - Nur für root (vertrauenswürdig)
  • system.* - Vom System verwendet (z.B. ACLs)
  • security.* - Sicherheitsmodule (SELinux, AppArmor)

getfattr - Erweiterte Attribute anzeigen

getfattr zeigt erweiterte Dateiattribute (Extended Attributes) an - moderner Nachfolger von attr -g.

Syntax

getfattr [OPTIONEN] datei

Beispiele

# Alle Extended Attributes anzeigen
getfattr -d datei.txt
 
# Bestimmtes Attribut anzeigen
getfattr -n user.kommentar datei.txt
 
# Alle user.* Attribute
getfattr -d -m "^user\." datei.txt
 
# Mit Attributwerten (hex encoding für binäre Daten)
getfattr -d -e hex datei.txt
 
# Rekursiv für Verzeichnis
getfattr -R -d verzeichnis/
 
# Nur Attributnamen (ohne Werte)
getfattr -d -m - --only-values datei.txt
 
# Für Symlink selbst (nicht Ziel)
getfattr -h symlink
 
# Backup aller Attribute
getfattr -R -d -m - /pfad > xattr-backup.txt

Wichtige Optionen

Option Bedeutung
-d Dump - Alle Attribute anzeigen
-n name Spezifisches Attribut anzeigen
-m pattern Pattern-Match für Attribute
-R Rekursiv
-h Symlinks nicht folgen
-e encoding Encoding: text, hex, base64
–only-values Nur Werte, keine Namen
–absolute-names Absolute Pfadnamen

Ausgabeformat

getfattr -d datei.txt
# Ausgabe:
# file: datei.txt
# user.kommentar="Wichtig"
# user.mime_type="text/plain"

setfattr - Erweiterte Attribute setzen

setfattr setzt oder ändert erweiterte Dateiattribute (Extended Attributes) - moderner Nachfolger von attr -s.

Syntax

setfattr [OPTIONEN] datei

Beispiele

# Attribut setzen
setfattr -n user.kommentar -v "Wichtiges Dokument" datei.txt
setfattr -n user.author -v "Max Mustermann" datei.txt
 
# Mehrere Attribute setzen
setfattr -n user.kommentar -v "Text" datei.txt
setfattr -n user.version -v "1.0" datei.txt
 
# Attribut entfernen
setfattr -x user.kommentar datei.txt
 
# Alle user.* Attribute entfernen
getfattr -d -m "user.*" datei.txt | \
  grep "^user\." | cut -d= -f1 | \
  xargs -I {} setfattr -x {} datei.txt
 
# Binäre Werte (hex)
setfattr -n user.checksum -v 0x48656c6c6f datei.txt
 
# Rekursiv anwenden
setfattr -R -n user.projekt -v "MyProject" verzeichnis/
 
# Für Symlink selbst (nicht Ziel)
setfattr -h -n user.type -v "symlink" link
 
# Attribute kopieren
getfattr -d datei1.txt | setfattr --restore=- datei2.txt

Wichtige Optionen

Option Bedeutung
-n name Name des Attributs
-v value Wert des Attributs
-x name Attribut entfernen
-R Rekursiv
-h Symlinks nicht folgen
–restore=file Attribute aus Datei wiederherstellen

Praktische Anwendungen

# Dateiklassifizierung
setfattr -n user.category -v "vertraulich" dokument.pdf
setfattr -n user.project -v "Projekt-X" datei.txt
 
# Metadaten für Bilder
setfattr -n user.copyright -v "© 2025 Firma" bild.jpg
setfattr -n user.description -v "Produktfoto" bild.jpg
 
# Checksums/Hashes speichern
md5sum datei.txt | cut -d' ' -f1 | xargs setfattr -n user.md5 -v
 
# Backup-Informationen
setfattr -n user.backup_date -v "$(date +%Y-%m-%d)" datei.txt
setfattr -n user.backup_host -v "$(hostname)" datei.txt
 
# Custom Flags
setfattr -n user.reviewed -v "yes" dokument.txt
setfattr -n user.approved_by -v "chef" bericht.pdf

getcap - Capabilities anzeigen

getcap zeigt die Linux Capabilities einer Datei an. Capabilities erlauben es, spezifische privilegierte Operationen auszuführen, ohne volle Root-Rechte zu benötigen.

Syntax

getcap [OPTIONEN] datei

Beispiele

# Capabilities einer Datei anzeigen
getcap /usr/bin/ping
# Ausgabe: /usr/bin/ping = cap_net_raw+ep
 
# Mehrere Dateien prüfen
getcap /usr/bin/* 2>/dev/null
 
# Rekursiv alle Dateien mit Capabilities finden
getcap -r / 2>/dev/null
 
# Rekursiv in Verzeichnis
getcap -r /usr/bin
 
# Mit Details
getcap -v /usr/bin/ping
 
# Alle ausführbaren Dateien mit Capabilities
find /usr/bin -type f -executable -exec getcap {} \; 2>/dev/null

Wichtige Optionen

Option Bedeutung
-r Rekursiv
-v Verbose (detaillierte Ausgabe)
-h Symlinks nicht folgen

Capability Flags

Flag Bedeutung
e Effective - Capability ist aktiv
p Permitted - Capability ist erlaubt
i Inheritable - Capability wird vererbt

Häufige Capabilities

Capability Bedeutung
cap_net_raw Raw Sockets (ping, traceroute)
cap_net_admin Netzwerk-Administration
cap_net_bind_service An privilegierte Ports binden (<1024)
cap_dac_override Datei-Zugriffskontrollen umgehen
cap_sys_admin System-Administration
cap_chown Dateibesitzer ändern
cap_setuid UID ändern
cap_setgid GID ändern
cap_sys_time Systemzeit ändern

setcap - Capabilities setzen

setcap setzt Linux Capabilities für Dateien. Dies ermöglicht Programme, spezifische privilegierte Operationen ohne SUID-Bit oder Root-Rechte auszuführen.

Syntax

setcap [capability][flags] datei

Beispiele

# Capability setzen
sudo setcap cap_net_raw+ep /usr/bin/ping
 
# Mehrere Capabilities
sudo setcap cap_net_raw,cap_net_admin+ep /pfad/zu/programm
 
# Port-Binding unter 1024 erlauben (z.B. für Webserver)
sudo setcap cap_net_bind_service+ep /usr/local/bin/webserver
 
# Alle Capabilities entfernen
sudo setcap -r /usr/bin/ping
 
# Capability prüfen und setzen
getcap /usr/bin/programm
sudo setcap cap_sys_admin+ep /usr/bin/programm
 
# Für Python-Binary (z.B. für Raw Sockets)
sudo setcap cap_net_raw+ep /usr/bin/python3.10

Praktische Anwendungen

Webserver ohne Root starten

# Apache/Nginx an Port 80/443 binden ohne Root
sudo setcap cap_net_bind_service+ep /usr/sbin/nginx
sudo setcap cap_net_bind_service+ep /usr/sbin/apache2
 
# Testen
nginx -t
sudo systemctl restart nginx

Ping ohne SUID

# Statt SUID-Bit Capability nutzen
sudo chmod u-s /usr/bin/ping           # SUID entfernen
sudo setcap cap_net_raw+ep /usr/bin/ping  # Capability setzen
 
# Testen
ping -c 1 8.8.8.8

Netzwerk-Tools

# tcpdump ohne Root
sudo setcap cap_net_raw,cap_net_admin+ep /usr/sbin/tcpdump
 
# wireshark ohne Root
sudo setcap cap_net_raw,cap_net_admin+eip /usr/bin/dumpcap
 
# traceroute
sudo setcap cap_net_raw+ep /usr/bin/traceroute

Custom-Programme

# Eigenes Programm compilieren und Capability setzen
gcc -o myserver myserver.c
sudo setcap cap_net_bind_service+ep ./myserver
./myserver --port 80  # Kann jetzt Port 80 nutzen ohne Root

Wichtige Flags

Flag Bedeutung
+ep Effective + Permitted (Standard)
+eip Effective + Inheritable + Permitted
+i Nur Inheritable
= Capability komplett ersetzen
-r Remove - Alle Capabilities entfernen

Sicherheitshinweise

# Alle Dateien mit Capabilities finden (Sicherheits-Audit)
sudo getcap -r / 2>/dev/null
 
# Oder mit find
sudo find / -type f -exec getcap {} \; 2>/dev/null | grep -v "="
 
# Capabilities nach System-Update prüfen (werden oft entfernt)
sudo setcap -v cap_net_bind_service+ep /usr/local/bin/myapp

Wichtig:

  • Capabilities werden bei Datei-Updates oft entfernt
  • Nach Paket-Updates müssen Capabilities neu gesetzt werden
  • Capabilities sind eine sicherere Alternative zu SUID
  • Minimalprinzip: Nur notwendige Capabilities setzen

Hinweise und Best Practices

ACL-Erkennung

# Dateien mit ACL finden (haben "+" in ls -l)
ls -l datei.txt
-rw-r--r--+ 1 user group 1234 Dez 24 10:00 datei.txt
            ^ Plus zeigt ACL an
 
# Alle Dateien mit ACL in Verzeichnis
find /pfad -exec ls -ld {} \; 2>/dev/null | grep "^.*+.*"
 
# Mit getfacl
getfacl -R verzeichnis/ | grep "^# file:"

Dateisystem-Unterstützung

Dateisystem ACL Extended Attributes Capabilities
ext4
xfs
btrfs
ntfs-3g ✓ (eingeschränkt)
vfat/FAT32
nfs ✓ (v4+) ✓ (v4+)
# Prüfen ob aktiviert
mount | grep acl
tune2fs -l /dev/sda1 | grep -i "default mount options"
 
# Aktivieren in /etc/fstab
UUID=xxx  /  ext4  defaults,acl,user_xattr  0  1

ACL vs. Traditionelle Rechte

# Problem: Mehrere Benutzer, aber nur eine Gruppe
# Traditionell: Komplizierte Gruppenverwaltung nötig
 
# Mit ACL: Einfache Lösung
setfacl -m u:alice:rwx datei.txt
setfacl -m u:bob:rw- datei.txt
setfacl -m u:charlie:r-- datei.txt

Backup und Migration

# Komplettes ACL/Extended Attribute Backup
getfacl -R /source > acl-backup.txt
getfattr -R -d -m - /source > xattr-backup.txt
 
# Wiederherstellen
cd /target
setfacl --restore=acl-backup.txt
setfattr --restore=xattr-backup.txt
 
# Mit rsync (ACL + xattr erhalten)
rsync -aAX /source/ /destination/
# -a = archive mode
# -A = ACLs erhalten
# -X = Extended Attributes erhalten
 
# Mit tar (ACL + xattr)
tar --acls --xattrs -czf backup.tar.gz /source
tar --acls --xattrs -xzf backup.tar.gz -C /destination
 
# Mit cp (ACL + xattr)
cp -a --preserve=all quelle ziel

Troubleshooting

ACLs funktionieren nicht

# 1. Dateisystem-Unterstützung prüfen
mount | grep acl
 
# 2. ACL-Pakete installieren
sudo apt install acl attr  # Debian/Ubuntu
sudo dnf install acl attr  # RHEL/Fedora
 
# 3. Partition mit ACL neu mounten
sudo mount -o remount,acl /
 
# 4. /etc/fstab anpassen
# Zeile finden und "acl" hinzufügen:
UUID=xxx  /  ext4  defaults,acl  0  1

Capabilities nach Update weg

# Capabilities werden oft bei Package-Updates entfernt
# Lösung: Capabilities in Startup-Skript setzen
 
# /etc/rc.local oder systemd service:
#!/bin/bash
setcap cap_net_bind_service+ep /usr/local/bin/myserver
setcap cap_net_raw+ep /usr/local/bin/mytool

Extended Attributes verschwinden

# Manche Tools entfernen xattr beim Kopieren
# Verwenden Sie:
cp -a --preserve=xattr quelle ziel
rsync -aX quelle ziel

Sicherheitsaspekte

  • ACL regelmäßig prüfen: getcap -r / 2>/dev/null für Audit
  • Minimalprinzip: Nur notwendige Rechte vergeben
  • Capabilities statt SUID: Reduziert Angriffsfläche
  • Backup von ACL/xattr: Bei wichtigen Systemen immer mit sichern
  • Dokumentation: ACL-Änderungen dokumentieren (wer, wann, warum)
  • Monitoring: Änderungen an Capabilities überwachen

Performance-Überlegungen

  • ACL-Lookups sind minimal langsamer als traditionelle Rechte
  • Extended Attributes verbrauchen zusätzlichen Speicher (meist < 1%)
  • Bei sehr vielen ACL-Einträgen: Performance-Tests empfohlen
  • NFS v4 benötigt für ACL-Unterstützung aktivierte ACL-Optionen

Praxis-Beispiele

Projekt-Verzeichnis mit Team-Zugriff

# Projekt-Verzeichnis erstellen
sudo mkdir /srv/projekt-x
sudo chown projektleiter:projektteam /srv/projekt-x
 
# ACL für Team-Mitglieder
sudo setfacl -m u:alice:rwx /srv/projekt-x
sudo setfacl -m u:bob:rwx /srv/projekt-x
sudo setfacl -m u:charlie:r-x /srv/projekt-x  # Nur lesen
 
# Default ACL für neue Dateien
sudo setfacl -m d:u:alice:rwx /srv/projekt-x
sudo setfacl -m d:u:bob:rwx /srv/projekt-x
sudo setfacl -m d:u:charlie:r-x /srv/projekt-x
sudo setfacl -m d:g:projektteam:rw- /srv/projekt-x
 
# Metadaten hinzufügen
sudo setfattr -n user.project -v "Projekt-X" /srv/projekt-x
sudo setfattr -n user.created -v "$(date +%Y-%m-%d)" /srv/projekt-x
 
# Prüfen
getfacl /srv/projekt-x
getfattr -d /srv/projekt-x

Webserver ohne Root-Rechte

# Webserver-Binary mit Capability ausstatten
sudo setcap cap_net_bind_service+ep /usr/local/bin/webserver
 
# Test
/usr/local/bin/webserver --port 80 --user www-data
# Läuft als www-data, kann aber Port 80 nutzen
 
# Prüfen
getcap /usr/local/bin/webserver
ps aux | grep webserver

Shared Folder mit ACL

# Shared Folder für Abteilung
sudo mkdir /srv/shared-marketing
sudo chmod 770 /srv/shared-marketing
sudo chgrp marketing /srv/shared-marketing
sudo chmod g+s /srv/shared-marketing  # SGID für Gruppenvererbung
 
# ACL für externe Berater (nur lesen)
sudo setfacl -m u:berater1:r-x /srv/shared-marketing
sudo setfacl -m d:u:berater1:r-- /srv/shared-marketing
 
# ACL für Management (nur lesen)
sudo setfacl -m g:management:r-x /srv/shared-marketing
sudo setfacl -m d:g:management:r-- /srv/shared-marketing
 
# Prüfen
getfacl /srv/shared-marketing

Siehe auch

Weitere Informationen

# Manpages
man getfacl
man setfacl
man getfattr
man setfattr
man getcap
man setcap
man capabilities
man acl
man attr
 
# Kernel-Dokumentation
man 7 capabilities
man 5 acl


sammlung/acl.1767698513.txt.gz · Zuletzt geändert: von Branislav Zeljak