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 passwd
und lief danach sync
und 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.
Antworten:
Ich konnte dieses Problem in einem frisch installierten CentOS 7.5-System duplizieren.
Folgendes passiert:
Beim Booten
init=/bin/bash
treten möglicherweise zwei Probleme auf:Das Root-Dateisystem kann schreibgeschützt gemountet werden. In diesem Fall
passwd
wird sich über eine beschwerenAuthentication 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
passwd
wird 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/shadow
Datei gespeichert . Diese Datei hat normalerweise den Typ SELinuxshadow_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ändertunlabeled_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:
init=/bin/bash
wie zuvor am Ende der Kernel-Befehlszeile in grub hinzu./usr/sbin/load_policy -i
.mount -o remount,rw /
.passwd root
mount -o remount,ro /
.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).
quelle
init=/bin/bash
.passwd
scheint "erfolgreich zu sein"?passwd
nämlich/etc/passwd
und geändert wurden/etc/shadow
. Wenn espasswd
ohne 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 eineswrong password
Fehlers fehl . Das Erzwingen, dass Selinux durch Berühren zu verlässlichen Dateikontexten wird,/.autorelabel
kann dieses Problem auch beheben, wenn Kennwörter ohne geladene Richtlinie geändert werden .