Konsolentipps | David Wolski | 5/2024 | 26. Juli 2024

Dateirechte: Vollautomatisch anpassen

Für gemeinsame Schreibrechte auf Dateien für mehrere Konten eines Linux-Systems sind Gruppen das adäquate Mittel: Alle Benutzer kommen in die gleiche Gruppe und diese dann die Schreibrechte auf den ausgewählten Ordner. Beim Kopieren und Verschieben von Dateien in diesen Ordner ist es dann allerdings immer wieder nötig, Besitzer, Gruppe und Rechte anzupassen, damit der Zugriff klappt.

Befehle wie cp, mv, rsync übertragen die ursprünglichen und im Ziel eventuell unpassenden Zugriffsrechte mit. Sollen Dateien in einem Verzeichnis automatisch bestimmte Rechte erhalten, sobald sie dorthin kopiert oder verschoben wurden, so hilft unter Linux der Kernel-Mechanismus Inotify. Dieser überprüft einen definierten Ordnerpfad auf neue Dateien und kann eine Aktion auslösen, sobald neue Dateien eintreffen. Inotify kann auch ein Script ausführen, das die Rechte für neue Dateien automatisch anpasst.

In dieser Anleitung mit passenden Beispieldateien auf Heft-DVD sollen Dateien in einem Verzeichnis sofort nach dem Eintreffen als Besitzer das Benutzerkonto „user“ erhalten, der Gruppe „gruppe“ gehören und jeweils die oktalen Rechte „664“ erhalten. Angelegte Verzeichnisse bekommen die Rechte „775“. Damit haben Besitzer und Gruppe nach Eintreffen neuer Dateien auf diese Vollzugriff, andere nur Leserecht.

1. Die Voraussetzung für Scripts, die Inotify verwenden, ist die Installation des Pakets „inotify-tools“, das in den Paketquellen aller Linux-Distributionen vorhanden ist und in Debian/Ubuntu mittels

sudo apt install inotify-tools

einzurichten ist.

2. In das Verzeichnis „/usr/local/bin“ kommt nun das eigentliche Script, welches mit dem Tool inotifywait im Hintergrund Änderungen im angegebenen Verzeichnis überwacht und die Rechte bei Bedarf neu setzt. Das Script ist im Listing „inotify-rechte.sh“ abgedruckt (auch auf Heft-DVD). Anzupassen sind die Variablen „Verzeichnis“ mit dem Pfad zum überwachten Ordner sowie die Variablen „User“ und „Group“ für den gewünschten Besitzer und die Gruppe auf dem Linux-System. Nachdem das Script etwa mit dem Editor Nano

sudo nano /usr/local/bin/inotify-rechte.sh

mit root-Recht unter „/usr/local/bin“ erstellt ist, macht dieser Befehl das Script ausführbar:

sudo chmod +x /usr/local/bin/inotify-rechte.sh

3. Das Wächter-Script ist damit einsatzbereit, zumindest erst mal testweise. Die Eingabe
sudo /usr/local/bin/inotify-rechte.sh
setzt die Überwachung in Gang und bestätigt deren Start mit „Watches established“. Das Script läuft mit minimalen Ressourcenbedarf, bis es mit Strg-C abgebrochen wird.

4. Ein manueller Aufruf nach jedem Systemstart ist nicht optimal: Besser ist ein Systemd-Dienst, der das Script automatisch in Gang setzt. Die passende Beispieldatei zeigt das Listing „Systemd: inotify-rechte.service“, das kaum noch Anpassung verlangt. Die Datei findet sich als „inotify-rechte.service“ auch auf Heft-DVD und muss zur Einrichtung als Systemd-Dienst mit root-Recht in den Ordner „/etc/systemd/system“ kopiert werden. Anschließend setzen die Befehle

sudo systemctl daemon-reload

sudo systemctl start inotify-rechte

den Systemd-Dienst in Gang. Zur Überprüfung, ob der Start erfolgreich war, dient dieses Kommando:

sudo systemctl status inotify-rechte

Soll das Wächter-Script permanent aktiv sein, so aktiviert die Eingabe

sudo systemctl enable inotify-rechte

den selbst gebauten Dienst dauerhaft.

Listing: inotify-rechte.sh

#!/usr/bin/env bash
Verzeichnis=Pfad #"Pfad" anpassen
User=Benutzer #"Benutzer" anpassen
Group=Gruppe #"Gruppe" anpassen
inotifywait -m $Verzeichnis -e create -e moved_to -r |
while read dir action file; do
chown $User:$Group $dir$file
find $dir$file -type d -exec chmod 775 {} \;
find $dir$file -type f -exec chmod 664 {} \;
done

Systemd: inotify-rechte.service

[Unit]
Description=Inotify-Wächter
After=network-online.target
[Service]
ExecStart=/usr/local/bin/inotify-rechte.sh
[Install]
WantedBy=multi-user.target