Login
Newsletter
Di, 29. Februar 2000, 23:52

Eigentümer und Zugriffsrechte mittels rpm restaurieren

Tippfehler können böse Konsequenzen haben.

Tippt man statt eines ungefährlichen

chmod 755 /usr/local/mydir/*

aus Versehen ein

chmod 755 /usr/local/mydir/ *

dann hat man ein Problem. Durch das Leerzeichen zwischen /usr/local/mydir/ und * werden nicht die Berechtigungen der Dateien unter mydir geändert, sondern die Berechtigungen von mydir und von allen Dateien im aktuellen Arbeitsverzeichnis. Laut Murphy sind das mindestens 2000 Dateien, die zu mindestens 25 verschiedenen Paketen gehören...

Aber mit rpm ist das alles kein Problem.

  1. Erst mal herausfinden, welche Pakete eigentlich alle betroffen sind:

    rpm -q -f * 2>/dev/null sort uniq less
    

    rpm gibt auf die Anfrage (-q), zu welchem Paket die folgenden Dateien gehören (-f *), alle betroffenen Pakete aus, allerdings mehrfach, wenn mehrere Dateien eines Paketes betroffen sind. Daher sortiert man die Ausgabe von rpm sort) und lässt sich jede mehrfach vorkommende Zeile nur noch einmal anzeigen uniq). Und weil das immer noch ziemlich viele sein können, guckt man sich das Ergebnis seitenweise an less). Probiert's einfach mal unter /etc!

  2. Jetzt alle diese Pakete wieder in ihren Ursprungszustand bringen, zumindest was die Zugriffsrechte der Dateien betrifft:

    rpm --setperms `rpm -q -f * 2>/dev/null sort uniq`
    

    Die Backticks (`) bewirken, dass anstelle des Kommandos in den Backticks dort die *Ausgabe* des Kommandos eingesetzt wird. Und das ist, wie wir ja wissen, die Liste aller betroffenen Pakete. Die Option --setperms (set permissions) weist rpm nun an, die Berechtigungen aller Dateien der Pakete auf den Zustand zu setzen, wie sie installiert wurden. Voilà! Alles repariert.

  3. »Aber ich habe den Fehler nicht bei chmod, sondern bei chown/chgrp gemacht!« Kein Problem. Anstelle von --setperms setzt man einfach ein --setugids (set user and group IDs), und es werden die Eigentümerschaften und Gruppenzugehörigkeit der Dateien restauriert.

    Zwei Punkte wären noch zu erwähnen: Es gibt auch Dateien, die keinem Paket zugeordnet sind. Diese sind dann meistens von anderen Programmen erstellt worden, und die RPM-Datenbank enthält keine Informationen über sie. Hier muss man warten, ob Probleme auftreten und sie ggf. von Hand beheben. Die Dateien findet man über rpm -qf * >/dev/null, so dass nur noch die Fehlermeldungen (die nicht zugeordneten Dateien) ausgegeben werden. Es hilft ungemein, wenn man da mittels tar tvf /dev/st0 2>&1 grep dateiname die Informationen aus einer Bandsicherung des Systems ziehen kann...

    Weiterhin sind vielleicht manche Pakete gar nicht vollständig installiert, dann gibt der rpm --setperms/setugids-Lauf einige Fehler aus (nichtexistente Dateien können schlecht verändert werden). Diese sind typischerweise harmlos (schwedische linuxconf-Sprachunterstützung usw.), können aber auf eventuelle Probleme hinweisen.

  4. »Aber ich habe den Fehler nicht bei chmod/chgrp/chown, sondern bei rm gemacht!« Ihr habt doch alle Eure Backups, oder? :)

Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten