So deaktivieren Sie die Root-Passwort-Eingabeaufforderung für den Wiederherstellungsmodus RHEL7 dauerhaft


8

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 initin 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

2
Booten von einem USB ist auch nicht akzeptabel?
YoMismo

Antworten:


11

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:

...
[Service]
Environment=HOME=/root
WorkingDirectory=/root
ExecStartPre=-/bin/plymouth quit
ExecStartPre=-/bin/echo -e 'Welcome to emergency mode! After logging in, type "journalctl -xb" to view\\nsystem logs, "systemctl reboot" to reboot, "systemctl default" to try again\\nto boot into default mode.'
ExecStart=-/bin/sh -c "/sbin/sulogin; /usr/bin/systemctl --fail --no-block default"
...

Wir müssen nur den Anruf ersetzen an /sbin/sulogin:

ExecStart=-/bin/sh -c "/sbin/sushell; /usr/bin/systemctl --fail --no-block default"

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/sushellstimmen aber mit den Antworten für CentOS6 / RHEL6 überein. Tatsächlich sushelleinfach exec's, $SUSHELLdie standardmäßig verwendet werden /bin/bash.)

Um diese Änderung "dauerhaft", dh immun gegen yumAktualisierungen, 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 funktioniert rescue.service. Hier ist ein Shell / Sed-Skript, um den Prozess zu vereinfachen:

for SERVICE in rescue emergency ; do 
   sed '/^ExecStart=/ s%"/sbin/sulogin;%"/sbin/sushell;%' /usr/lib/systemd/system/$SERVICE.service > /etc/systemd/system/$SERVICE.service
done

Um dies zu testen, stellen Sie sicher, dass das System ansonsten nicht verwendet wird, und weisen Sie systemdan, zum rescueZiel zu wechseln :

systemctl rescue

Dadurch werden Netzwerkverbindungen geschlossen und eine Shell an der Konsole geöffnet. Sie können mit dem emergencyZiel 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 linux16und anhängt (drücken Sie CTRL-A, um zum Ende der Zeile zu gelangen) emergency:

linux16 ... emergency

Zum Testen des Rettungsmodus werden die gleichen Schritte wie oben ausgeführt, Sie müssen jedoch expliziter vorgehen:

linux16 ... systemd.unit=rescue.target

Sie haben Recht, anscheinend ist machinectl nur für VMs und Container geeignet. Ich überprüfe mehr Details zu den systemd-ask-password-Systemen mit meinem lokalen Fedora und werde den Beitrag nach Bedarf bearbeiten.
Adrien M.

1
Ok, versuchen Sie dies: bearbeiten /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.
Adrien M.

Woops, vielleicht nicht entfernen, sondern durch /bin/shoder eine andere Shell ersetzen . Und Sie können den gleichen Ersatz in/usr/lib/systemd/rescue.service
Adrien M.

1
"Sie benötigen mindestens 2k Reputation, um die vorgeschlagenen Änderungen zu überprüfen." Auch auf meinem eigenen Post? lol, ein paar Bugs für die Entwickler :) Danke für den Test & Edit!
Adrien M.

1
In meinem Test habe ich meine / Home-Montierung geändert und sie wurde zur Rettung fallen gelassen. Nach dem, was ich gesehen habe (in diesem Beitrag: forums.fedoraforum.org/showthread.php?t=270936 ), ist "Rettung" das Äquivalent von Singleuser, "Notfall" ist das Äquivalent von init = / bin / sh. Wir müssen alle eine Menge Tricks mit systemd lernen :)
Adrien M.

-3

Die Methode, mit der ich das Root-Passwort umgangen und die Root-Shell erreicht habe, ist das Bearbeiten des Init in Grub (Kernel-Zeile).

init=/bin/bash

1
Downvoted, weil ich ausdrücklich erwähnt habe, dass das Überschreiben von init keine Option ist. Es gibt technische Gründe, warum dies schlecht funktioniert - vor allem, weil "init" viel "hinter den Kulissen" tut, um das System einigermaßen nutzbar zu machen.
Otheus

Mit init=/bin/bashverlieren 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 ...
Laszlo Valko

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.