Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
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-Attributetrusted.*- 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/nullfü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
