Wie kann ich den Befehl chown zurücksetzen?

16

Wenn ich renne:

sudo chown -R user:user /

Kann ich es auf das zurücksetzen, was es war, bevor ich es ausgeführt habe?

Fronthem
quelle
1
Nur als Warnung für andere: Der folgende Befehl sudo chown -R user:user ..kann dieselbe Wirkung haben wie der hier erwähnte, wenn Sie sich eine Ebene unterhalb des Stammverzeichnisses des Dateisystems befinden. Versuchen Sie nicht so etwas.
Passant

Antworten:

22

Kurz gesagt: nein.

Sie müssen von einem Backup wiederherstellen. (Einige Sicherungstools verfügen möglicherweise über Optionen, mit denen nur Berechtigungen wiederhergestellt werden können, andere können gesicherte Dateien mit ihren Berechtigungen auflisten und Sie können diese verwenden, um Ihr System zu reparieren.)

Wenn Sie kein Backup haben, müssen Sie dies alles manuell beheben.

Matte
quelle
Danach sudo chown -R user:user /ist das System wahrscheinlich so stark ausgelastet, dass Sie es nicht aus einem Backup wiederherstellen können .
Keith Thompson
1
Wenn Sie die wichtigen Teile Ihrer Benutzerdaten in diesem Szenario nicht aus Ihrer Sicherung wiederherstellen können, ist Ihre "Sicherung" wirklich keine. Wenn Sie nicht das gesamte Betriebssystem wiederherstellen können, sollten Sie dennoch in der Lage sein, die Basis neu zu installieren und dann von der Sicherung wiederherzustellen. Benötigt in diesem Fall höchstwahrscheinlich eine Live-CD oder einen Netzwerkstart. Wenn sich Ihre Sicherungsstrategie jedoch nicht davon erholen lässt, ist dies nicht gut genug.
Mat
Mein früherer Kommentar war wahrscheinlich unklar. Ein funktionierendes System kann mit dem System selbst wiederhergestellt werden. Wenn Sie die chownbeschriebenen Schritte ausgeführt haben , ist es wahrscheinlich, dass Sie keine weiteren Schritte ausführen können, bevor Sie das gesamte System von Grund auf neu installiert haben. Das System hat noch nicht einmal einen rootAccount und sudofunktioniert auch nicht. Es lohnt sich wahrscheinlich, zu versuchen, von einer Einzelbenutzershell zu booten, aber Sie können nicht erwarten, dass dies funktioniert.
Keith Thompson
1
Das Root-Konto ist nicht weg (es ist immer noch UID 0); es besitzt einfach keine Dateien mehr, aber root umgeht die normalen Berechtigungsprüfungen trotzdem. Ob sudooder sogar su, wenn alle relevanten Dateien im Besitz von sind, weiterhin funktionieren wird, userist eine andere Sache (wahrscheinlich nicht, weil unter anderem das SUID-Bit auf der Exe weg sein wird).
JW013
6

Nur wenn Sie den Benutzer- und Gruppenbesitz jeder Datei und jedes Verzeichnisses in Ihrem /Verzeichnis kennen.

Selbst dann haben Sie bereits das Eigentum an kritischen Systemdateien blockiert, deren Eigentümer root sein muss, einschließlich des sudoBefehls. Möglicherweise müssen Sie die Festplatte auf einem anderen System einbinden - und beachten Sie, dass das andere System möglicherweise nicht die gleichen UID- und GID-Zuordnungen aufweist wie das, das Sie gerade überlastet haben.

Erstellen Sie nach Möglichkeit eine Kopie der gesamten Festplatte und installieren Sie dann Ihr Betriebssystem neu. Sobald Sie dies getan haben, können Sie versuchen, Dateien auf das neu gelöschte System zurück zu kopieren und deren Eigentümer wiederherzustellen. Sie können wahrscheinlich davon ausgehen (wenn auch nicht zu 100% zuverlässig), dass alles unter dem /home/fooBenutzer foogehört und dass jede Mail-Spooldatei /var/maildem entsprechenden Benutzer gehört (wenn Sie E-Mail auf dem System haben). Sie können wahrscheinlich davonkommen, ohne die meisten Dateien wiederherzustellen, die nicht darunter liegen /home, je nachdem, was Sie mit dem System gemacht haben.

Und dann pflegen Sie die Angewohnheit, jeden Befehl, unter dem Sie laufen, noch einmal zu überprüfen, sudo bevor Sie ihn treffen Enter.

Keith Thompson
quelle
6

Wenn Ihre Distribution RPM-basiert ist, können Sie NUR Dateien wiederherstellen, die von RPM-Paketen installiert wurden.

So stellen Sie alle Paketberechtigungen wieder her:

rpm --setperms -a

So stellen Sie alle Paketbesitzer (Benutzer / Gruppe) wieder her:

rpm --setugids -a

Wenn -a nicht ausgeführt wird, können Sie eine Bash-Schleife ausführen:

Für Berechtigungen:

for x in $(rpm -qa); do rpm --setperms $x; done

Für den Besitzer:

for x in $(rpm -qa); do rpm --setugids $x; done

Auszug aus: http://www.sysadmit.com/2016/10/linux-restaurar-permisos-de-un-paquete.html

Egon Spengler
quelle
1

Sie können die aktuellen Versionen speichern und diese dann mit der Option -v auswerten, um sie wiederherzustellen.

chown -R nobody:nobody -v /tmp/some_file > /tmp/chown.log
cat /tmp/chown.log

Der Inhalt wäre:

changed ownership of `/tmp/some_file' from me:users to nobody:nobody

Mit Ihrer bevorzugten Skriptsprache und regulären Ausdrücken können Sie den schmerzhaften Vorgang des Zurücksetzens ausführen (falls erforderlich).

Ich würde dringend empfehlen , auf / kein rekursives Chowning durchzuführen, da Sie / etc / shadow oder eine andere wichtige Datei verfügbar machen.

SailorCire
quelle
0

Wenn die Distribution auf U / min basiert:

rpm -a --setperms
shcherbak
quelle