durch einen dummen Fehler habe ich die Rechte von Dateien/Verzeichnissen auf dem linuxmuster.net-Server verändert. Zum Hintergrund: ich wollte in den Tauschverzeichnissen der Klassen die Besitzer mit
chmod root:root */*
setzen, dummerweise habe ich als Verzeichnis
/*/*
angegeben, so dass der Rechner pflichtgemäß die Verzeichnisbesitzer in den Unterverzeichnissen erster Ordnung und darunter verändert hat. Den Befehl habe ich nach weniger als 1 Sekunde abgebrochen, aber er hatte schon Schaden angerichtet.
Im Moment treten folgende Probleme auf:
Die Namensauflösung ist kaputt: Adressen nach außen werden aufgelöst, aber die Clients findet er nicht. Also ein „ping 10.72.1.1“ wird vom Client erwidert, aber „ping r72-01“ nicht.
Bei dem Befehl „linbo-ssh“ auf einen Client verlangt er nach "Enter passphrase for key ‚/root/.ssh/id_rsa‘:
", das war vorher nicht so.
Jetzt kommt’s. Das ganze ist jetzt mehr als eine Woche her. Weitere Seiteneffekte gibt es im Moment nicht, darum will ich auch ungern ein altes Backup einspielen (ich weiß, das hätte ich gleich machen sollen).
Bei welchen Dateien/Verzeichnissen könnte ich nach falschen Dateirechten suchen bzw. welche Logs geben mir mehr Aufschluss.
Vielen Dank schon mal.
… Oje: da hast du dir ja ein schönes Ei gelegt.
Und ja: gleich Backup zurückspielen wäre wohl besser gewesen.
Es ist sehr schwierig das jetzt wieder gerade zu biegen.
Natürlich kannst du einzeln nach Diensten auf die Suche gehen und
schauen, ob die Rechte nicht stimmen, aber wir reden hier allein unter
etc von ein etlichen Hundert Dateien…
Ich würde dir eher sowas empfehlen:
Backup in das Verzeichnis /backup/temp
zurückspielen (wenigstens von /etc/)
script schreiben, dass die Rechte dort mit denen unter /etc/
vergleicht und setzt.
Bei allem anderen kommst du vom hundertsten zum tausendsten und findest
in 2 Jahren noch eine Datei die dir deswegen gerade in den Hintern beißt …
das Verzeichnis /etc/ habe ich zurückgespielt und neu gestartet, die Fehler sind noch die gleichen. Naja, jetzt wartet er beim Hochfahren nicht mehr auf die Netzwerkverbindung.
Ich wurschtel mal noch weiter, irgendwie habe ich noch etwas Hoffnung, dass ich das ohne Zurücksetzen wieder hinbiegen kann.
wenn Du Dein Backup z. B. nach /mnt mounten kannst, dann müsste Folgendes gehen:
for f in /etc/*; do chown --reference=/mnt$f $f; done
Danach dann dasselbe Kommando mit /etc// usw., bis keine Dateien mehr gefunden werden. Anschließend würde ich mir /var und /home vornehmen. Ist etwas mühsam, aber vielleicht das, was Du suchst.
Bei sowas gehe ich immer auf Nummer sicher und schreibe zunächst:
for f in /etc/*; do echo chown --reference=/mnt$f $f; done
Dann sehe ich, was passieren würde, und wenn das gut aussieht, kommt das echo weg und es heißt Daumen drücken.
da sind jetzt ein paar Sterne verloren gegangen. Ich versuche es nochmal:
for f in /etc/*; do chown --reference=/mnt$f $f; done
for f in /etc/*/*; do chown --reference=/mnt$f $f; done
for f in /etc/*/*/*; do chown --reference=/mnt$f $f; done
Du kannst den anfangs genannten Befehl nicht eingegeben haben, denn er funktioniert nicht.
Vermutlich hast Du nicht chmod, sondern chown eingegeben.
Dann hast Du, wenn die sonstige Syntax stimmt, auch nicht rekursiv, wohl aber die komplette erste Ebene aller Dateien und Verzeichnisse unter / verändert, also:
/etc/
/etc/apt
aber nichts drunter -
usw.
Bringt mich zu einer Frage:
Warum in alles in der Welt willst Du die Homeverzeichnisse / Dateien der Benutzer “root” geben ? Das macht dort alles kaputt ! Und Du erreichst nicht mal alle Dateien
So:
Dann**, wenn Dein Befehl wirklich KEIN rekursives chmod / chown war, so also NICHT:**
chmod -R Zahl /*/*
oder
chown -R root:root /*/*
hast Du nur GANZ WENIG UNHEIL angerichtet, denn die meisten Dateien aus dieser Ebene gehören root schon !
Mach also folgendes:
Melde Dich normal als root an, werde dann ein Nullachtfünfzehnlehrer, bei mir
su cgsman
Dann führst DU den Befehl nochmal aus:
chown root:root /*/*
(Es wird nix passieren, Du bist gerade kein root)
Jetzt siehst Du Dir alle Dateien an, die (mit Fehlrmeldung, da DU ja keine Berechtigungen hattest) zurückgeliefert werden.
Irgendwo ist da eine, die root NICHT haben darf, die muss Du dem rechtmäßigen Besitzer wieder zurückgeben. Die Dateirechte zu vergleichen ist dann nicht schwer, wenn Du parallel Dein backup mountest und vergleichst.
Viel Glück,
Christoph Gü
P.S: Vielleicht hast Du ein weiteres / anderes Problem, das die Namensauflösung verhindert usw…
sieht gut aus. Alle Auffälligkeiten sind verschwunden. Ich habe jetzt alle Verzeichnisse der root - Platte (also ohne /home und /var) auf diese Art “geheilt”, bis in die 6. Verzeichnisebene.
Was habe ich gelernt:
chown hat einen Parameter --reference, der in diesem Fall sehr hilfreich war.
vor Veränderungen am System immer einen LVM-Snapshot erstellen
Backup läuft nun wöchentlich als Vollbackup und täglich per rsync
langsamer tippen
Danke auch allen anderen Helfern.
@cgsman (Christoph?): die Dateibesitzer werden nicht root:root, sondern wie die aus dem Backup, jedenfalls für die Dateien, die im Backup vorhanden waren.