Anmerkung: Ich fragte eine ähnliche quesiton über Version 6 dieses Bündels hier . Beachten Sie, dass 7 systemd verwendet und möglicherweise eine andere Implementierung hat
In den seltenen Fällen, in denen das Booten eines RHEL- oder CentOS 7-Systems beispielsweise durch ein nicht ordnungsgemäßes Herunterfahren oder einen erzwungenen Fehler beim Fsck-Check beim Booten verhindert wird, fordert die Konsole den Benutzer zur Eingabe eines Root-Kennworts auf.
Wie deaktiviere ich die Passwortprüfung und lasse sie direkt auf einer Root-Shell ab?
Inakzeptable Antworten:
- Überschreiben
init
in der Kernel-Befehlszeile (dh Grub) - Verknüpfen / Ersetzen von / sbin / sulogin mit / sbin / sushell. (Dies würde funktionieren, aber es würde rote Fahnen mit dem Sicherheitsrahmen auslösen).
- Booten von einem anderen Gerät
Antworten:
Systemd arbeitet mit Diensten und Zielen . Ziele entsprechen Runlevels , Services entsprechen Init-Skripten . Der größte Teil der Systemkonfiguration befindet sich in
/usr/lib/systemd
, während sich die Standardinitialisierung in befindet/etc/{init.d,rc*.d,inittab}
.Wenn während des Startvorgangs ein Problem auftritt (Standard sind getty.target oder graphical.target , mit dem Sie es abrufen können
systemctl get-default
), wechselt systemd zu Emergency.target .Dieses "Notfall" -Ziel lädt wiederum die Datei
emergency.service
. Dieser Dienst enthält mehrere Zeilen, darunter:Wir müssen nur den Anruf ersetzen an
/sbin/sulogin
:Und wir werden direkt zu einer Shell weitergeleitet, anstatt über Sulogin zur Eingabe des Passworts aufgefordert zu werden. (Wir können verwenden
/bin/sh
,/sbin/sushell
stimmen aber mit den Antworten für CentOS6 / RHEL6 überein. Tatsächlichsushell
einfach exec's,$SUSHELL
die standardmäßig verwendet werden/bin/bash
.)Um diese Änderung "dauerhaft", dh immun gegen
yum
Aktualisierungen, zu machen, nehmen Sie die Änderung an einer Kopie dieser Datei vor und platzieren Sie sie in/etc/systemd/system/
. Ersetzen Sie dieselbe Zeile in, damit der "Rettungsmodus" auf die gleiche Weise funktioniertrescue.service
. Hier ist ein Shell / Sed-Skript, um den Prozess zu vereinfachen:Um dies zu testen, stellen Sie sicher, dass das System ansonsten nicht verwendet wird, und weisen Sie
systemd
an, zumrescue
Ziel zu wechseln :Dadurch werden Netzwerkverbindungen geschlossen und eine Shell an der Konsole geöffnet. Sie können mit dem
emergency
Ziel testen , aber das funktioniert nicht ganz so sauber (aus irgendeinem Grund) und erfordert möglicherweise einen vollständigen Neustart, um das Ziel zu erreichen.Sie können diese auch über das Boot-Menü (grub) testen. Zum Testen des Notfallmodus ist es einfach. Booten Sie und wenn Sie das Menü erhalten, drücken Sie "e", um es zu bearbeiten, und navigieren Sie mit dem Steuerkreuz zu der Zeile, die mit beginnt
linux16
und anhängt (drücken SieCTRL-A
, um zum Ende der Zeile zu gelangen)emergency
:Zum Testen des Rettungsmodus werden die gleichen Schritte wie oben ausgeführt, Sie müssen jedoch expliziter vorgehen:
quelle
/usr/lib/systemd/emergency.service
."ExecStart=-/bin/sh -c "/sbin/sulogin; /usr/bin/systemctl --fail --no-block default"
Entfernen Sie online das/sbin/sulogin ;
Teil. Sag mir, ob das funktioniert, also werde ich den Beitrag aktualisieren./bin/sh
oder eine andere Shell ersetzen . Und Sie können den gleichen Ersatz in/usr/lib/systemd/rescue.service
Die Methode, mit der ich das Root-Passwort umgangen und die Root-Shell erreicht habe, ist das Bearbeiten des Init in Grub (Kernel-Zeile).
quelle
init=/bin/bash
verlieren Sie die Jobkontrolle für die Konsole, was bedeutet, dass Strg-C nicht funktioniert. In einer Notsituation ist es viel schwerwiegender als "arm", einen Befehl auf Ihrer einzelnen Konsole nicht stoppen zu können ...