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

