SELinux-Root-Passwort zurücksetzen

12

Haftungsausschluss: Diese Frage soll nicht das Problem der Änderung des Root-Passworts lösen, während SELinux aktiv ist, da es bereits viele Anleitungen gibt, um dies zu lösen. So macht SELinux das intern.

Ich bin ein neuer Benutzer von SELinux, aber in letzter Zeit habe ich mehr Kontakt damit. Es gab einen Moment, in dem mich jemand fragte, wie ich das Root-Passwort zurücksetzen könnte, falls ich es vergessen sollte.

Also habe ich mein CentOS gebootet, den Grub-Eintrag auf so etwas bearbeitet

linux16 <kernel_location> root=/dev/mapper/centos-root rw init=/bin/bash

Ich lief passwdund lief danach syncund erzwang einen Neustart. Nach dem Neustart wurde die Anmeldung mit dem neuen Passwort ebenso wie mit dem alten natürlich abgelehnt.

Erneuter Neustart und Übergabe des Parameters an den Kernel zum Deaktivieren von SELinux ( selinux=0). Ich habe versucht, mich mit dem neuen Passwort anzumelden, und es hat funktioniert. Danach habe ich ein fs Auto Relabel (über die Datei .autorelabel) erzwungen und bei aktivem SELinux war es nun möglich mich einzuloggen .

Meine Frage ist: Warum passiert das? Warum wirkt sich die Neukennzeichnung auf die Anmeldung aus, wenn lediglich das Kennwort und nicht Benutzer oder Objekte geändert wurden?

Vielen Dank für Ihre Aufmerksamkeit.

TL; DR: Das übliche Zurücksetzen des Root-Passworts funktioniert unter SELinux nicht. Warum?

Bearbeiten: Dies wurde auf einer virtuellen Maschine getestet, auf der CentOS7 mit KVM als Hypervisor ausgeführt wird.

Jorge Heleno
quelle
1
Bist du sicher, dass es nicht funktioniert? Versuchen Sie es erneut. Es wird wahrscheinlich gut funktionieren. Ich vermute, dass Sie bei einigen Dateien einfach falsche Dateikontexte hatten, wodurch alle Anmeldungen fehlschlugen. Somit war das Autorelabel das, was das Problem wirklich behoben hat.
Michael Hampton
@MichaelHampton Ich habe gerade alle meine Schritte zurückverfolgt und konnte mich mit aktivem SELinux nicht erneut anmelden. Nach dem Deaktivieren konnte ich mich problemlos anmelden. Korrigieren Sie mich, wenn ich falsch liege, aber das Ändern eines Passworts sollte den Dateikontext nicht ändern, oder?
Jorge Heleno
1
Nein, sollte es nicht. Sie scheinen etwas Seltsames und Unerwartetes entdeckt zu haben.
Michael Hampton

Antworten:

17

Ich konnte dieses Problem in einem frisch installierten CentOS 7.5-System duplizieren.

Folgendes passiert:

Beim Booten init=/bin/bashtreten möglicherweise zwei Probleme auf:

  • Das Root-Dateisystem kann schreibgeschützt gemountet werden. In diesem Fall passwdwird sich über eine beschweren Authentication token manipulation error.

    Dies ist ziemlich offensichtlich: Wenn das Dateisystem nicht schreibgeschützt ist, kann nicht darauf geschrieben werden.

  • Die SELinux-Richtlinie wird möglicherweise nicht geladen. In diesem Fall passwdwird das Passwort erfolgreich geändert, aber Sie haben das in der ursprünglichen Frage oben beschriebene Problem: Niemand kann sich anmelden.

    Passwort-Hashes werden in der /etc/shadowDatei gespeichert . Diese Datei hat normalerweise den Typ SELinux shadow_t. Wenn Sie die Datei jedoch ändern, während keine SELinux-Richtlinie geladen ist, wird der SELinux-Typ aus der Datei entfernt und bleibt unverändert unlabeled_t. Dienste, die versuchen, die Datei zur Authentifizierung von Anmeldungen zu lesen, können sie daher nicht mehr lesen.

Um das Root-Passwort unter RHEL / CentOS 7 zu ändern, müssen Sie daher folgende Schritte ausführen:

  1. Fügen Sie init=/bin/bashwie zuvor am Ende der Kernel-Befehlszeile in grub hinzu.
  2. Laden Sie an der Bash-Eingabeaufforderung die SELinux-Richtlinie mit /usr/sbin/load_policy -i.
  3. Hängen Sie das Root-Dateisystem mit Lese- und Schreibzugriff ein mount -o remount,rw /.
  4. Ändern Sie nun das Passwort und es wird erfolgreich sein. passwd root
  5. Hängen Sie das Dateisystem schreibgeschützt erneut ein, um Änderungen festzuschreiben und beim nächsten Start ein sauberes Dateisystem zu haben mount -o remount,ro /.
  6. Beenden Sie die Shell oder starten Sie das System mit neu exec /sbin/init 6.

Jetzt können Sie sich mit dem geänderten Root-Passwort anmelden.

Eine längere Erklärung dieses Verfahrens erhalten Sie bei Red Hat (Abonnement erforderlich).

Michael Hampton
quelle
Das Problem lag in den Richtlinien, die nicht geladen wurden. Warum werden sie nicht geladen? SELinux sollte auf Kernel-Ebene arbeiten, sodass kein Init-System erforderlich sein sollte.
Jorge Heleno
4
@JorgeHeleno SELinux ist zwar standardmäßig ein- oder ausgeschaltet, wenn der Kernel gestartet wird, aber das Benutzerland ist dafür verantwortlich, zu entscheiden, welche Richtlinien geladen werden. Der Kernel konnte dies nicht entscheiden, da einige Installationen möglicherweise andere Richtlinien wünschen (z. B. gezielt, streng, mls). Dies geschieht zu Beginn des Startvorgangs, aber Sie umgehen dies beim Ausführen init=/bin/bash.
Michael Hampton
1
Wenn eine Richtlinie nicht geladen ist, warum passwdscheint "erfolgreich zu sein"?
Andrew Savinykh
und wenn es nicht gelungen ist, warum ist die Anmeldung mit dem alten Passwort immer noch fehlgeschlagen?
Leichtigkeit Rennen mit Monica
2
@ George Helen: Ihre Erklärung ist fast vollständig. Der Punkt sind die Dateien, die passwdnämlich /etc/passwdund geändert wurden /etc/shadow. Wenn es passwdohne geladene Richtlinie ausgeführt wird, wird es nicht im richtigen Selinux-Kontext ausgeführt, und die geänderten Dateien haben einen anderen Selinux-Kontext. Beim Booten mit aktiviertem Selinux und aktiven Richtlinien schlägt die Kennwortprüfung aufgrund eines unangemessenen Dateikontexts und nicht aufgrund eines wrong passwordFehlers fehl . Das Erzwingen, dass Selinux durch Berühren zu verlässlichen Dateikontexten wird, /.autorelabelkann dieses Problem auch beheben, wenn Kennwörter ohne geladene Richtlinie geändert werden .
Hargut