Benutzer-Werkzeuge

Webseiten-Werkzeuge


sammlung:acl

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.txt · Zuletzt geändert: von 127.0.0.1