Wie kann der Fernzugriff auf ein RHEL-System über erweiterte Berechtigungen für das gesamte Dateisystem wiederhergestellt werden?

Wie kann der Fernzugriff auf ein RHEL-System über erweiterte Berechtigungen für das gesamte Dateisystem wiederhergestellt werden?

Ursache des Problems

Ich wollte wie folgt Gruppenschreibberechtigungen für versteckte Dateien wie „.hgignore“ hinzufügen:

# Passwort
/opt
# sudo chmod -R g+w .*

Das Problem ist, dass „..“ diesem Muster entsprach und nun im gesamten RHEL-Dateisystem g+w gesetzt ist. Die unmittelbaren Probleme sind die folgenden:

  • /etc/sudoers muss auf 440 und nicht auf 460 eingestellt werden, sodass Benutzer jetzt sudo nicht verwenden können.
  • Ein ähnlicher Mechanismus wie der oben genannte erlaubt keinen SSH-Zugriff. (Remote-SSH-Clients erhalten die Fehlermeldung „ssh_exchange_identification: Verbindung vom Remote-Host geschlossen“)

Frage

Um die Möglichkeit zur Remote-Anmeldung wiederherzustellen, muss jemand mit physischem Zugriff auf den Server in die Reparatur des Systems eingewiesen werden.

Die Frage ist nun: Bei welchen wichtigen Dateien und Verzeichnissen muss die Berechtigung zurückgesetzt werden, um sshdie sudoFunktionalität wiederherzustellen?

Hinweis zu „Als Duplikat geschlossen“

Die FrageWarum ist „chmod -R 777 /“ destruktiv?bietet detaillierte Erklärungen dazu, welche Auswirkungen eine rekursive Erweiterung der Berechtigungen haben kann. Diese Frage soll die Frage beantworten, wie der Fernzugriff über SSH wiederhergestellt werden kann, damit umfangreichere Wiederherstellungen und Reparaturen durchgeführt werden können.

Antwort1

Bei Dateien, die Teil eines Pakets sind, können Sie den Fehler folgendermaßen herausfinden:

rpm --verify "Paketname"

wobei Paketname ein einzelnes Paket ist, oder Sie können die Ausgabe von „rpm -qa“ durchlaufen.

Dann sollten Sie in der Lage sein, RPM zu verwenden, um sie mit etwas wie zu beheben

rpm --setperm "Paketname"

Antwort2

Das Problem mit ssh ist nicht nur auf /etc beschränkt, sondern hängt auch damit zusammen, dass der .ssh-Ordner des Benutzers, mit dem Sie eine Verbindung herstellen möchten, nicht die richtigen Berechtigungen hat. Im Allgemeinen sollte der .ssh-Ordner für einen Benutzer 700 sein, private Schlüssel sollten 600 sein und alles andere kann 644 sein.

Der Ordner /etc/ssh sollte 755 sein, unter /etc/ssh sollten die privaten Schlüssel 600 sein und alles andere sollte 644 sein.

Wie kann ich einen Server mit fehlerhaften Berechtigungen in /etc wiederherstellen?

Eine der einfachsten Methoden ist wahrscheinlich die Wiederherstellung aus Ihrem Backup. Sie erstellen Backups und haben die Wiederherstellungsverfahren getestet, oder? :)

Wenn Sie über kein Backup verfügen, das Sie für eine Wiederherstellung verwenden können, müssen Sie möglicherweise ein sauberes, identisches System in einer VM einrichten und dann die Berechtigungen auf dem Host basierend auf Ihrem Server korrigieren, indem Sie die beiden vergleichen.

Antwort3

Wenn Sie einen nachweislich funktionierenden Server haben, kann Ihnen die Ausführung von etwas wie dem Folgenden auf dem funktionierenden Server dabei helfen, ihn wiederherzustellen. (Setzt rekursive Globbing-Fähigkeit voraus (zsh), könnte stattdessen find mit -exec / xargs verwenden):

for i in /etc/**/*; do
    perm=$(stat "$i" -c "%a")
    ssh root@badServerHostName "chmod $perm $i"
done

Möglicherweise müssen einige Unterverzeichnisse ausgeschlossen werden, andere könnten hinzugefügt werden ... Rsync wäre besser, wenn es das könntenurBerechtigungen, aber ich glaube nicht, dass dies möglich ist.

Antwort4

Wenn Sie über ein Backup, LVM und ausreichend Speicherplatz verfügen, können Sie Folgendes tun:

1. Stellen Sie das Backup auf einem neuen, temporären Level wieder her (mounten Sie es unter /oldperm).
2. Führen Sie etwa den folgenden Pseudocode aus:

foreach oldfile in /oldperm/* {  
  newf = strip "/oldperm" from oldfile  
  chmod --reference=oldfile newf  
}

Sie können eine teilweise Wiederherstellung durchführen, z. B. zunächst alles unter /etc, falls Sie Platzprobleme haben. Dieser Trick basiert auf dem Flag --reference von chmod, das eine andere Datei als Vorlage verwendet und das Argument hinsichtlich der Berechtigungen anpasst.

Auf diese Weise stellen Sie nur die alten Berechtigungen wieder her, ohne den Inhalt der Dateien zu ändern.

verwandte Informationen