it-swarm.com.de

Der beste Weg, um den Befehl zum Herunterfahren zu entfernen, aber weiterhin neu zu starten

Ich habe ein Gerät vom Typ Raspi in einem Rechenzentrum und habe kürzlich versehentlich einen Befehl zum Herunterfahren in das falsche Terminal auf meinem Bildschirm eingefügt. Gibt es eine Möglichkeit, shutdown -r aber entferne #poweroff#shutdown -P -H Optionen?

Ich möchte behalten shutdown -r Befehl. Ich mag es, einen Timer darauf zu setzen, wenn ich es schaffe, das System einzufrieren oder mich mit IP-Tabellenregeln auszusperren. Beispiel shutdown -r +10

27
foxtrot22

Sie sollten eine systemd-basierte Linux-Distribution verwenden. In diesem Fall sollten Sie in der Lage sein, Maske das Ausschaltziel zu verwenden, damit systemd die Ausführung verweigert (und ausschaltet). z.B.:

systemctl mask poweroff.target

Dies macht es absolut unmöglich, das System herunterzufahren, außer durch einen Neustart. Sehen Sie, dass nichts passiert:

(Debian9 animated demo

In diesem Fall funktioniert der virtuelle Netzschalter dieser VM nicht einmal mehr, um das System herunterzufahren. Aber es startet immer noch perfekt.

Um die Änderung rückgängig zu machen, entlarven Sie einfach das Ziel. Dann können Sie das System herunterfahren.

systemctl unmask poweroff.target
40
Michael Hampton

Es gibt einige Möglichkeiten, dies zu erreichen. Man würde mit einem regulären, nicht privilegierten Konto arbeiten, für das der Befehl mit Sudo ausgeführt und ein Kennwort eingegeben werden muss. Dann können Sie Folgendes an/etc/sudoers anhängen (indem Sie visudo ausführen):

## user is allowed to execute reboot -r only
jdoe ALL=NOPASSWD: /sbin/shutdown -r *

Fügen Sie außerdem Folgendes hinzu, um das Zwischenspeichern von Sudo-Anmeldeinformationen zu deaktivieren:

Defaults timestamp_timeout=0

Dadurch wird das Zwischenspeichern von Anmeldeinformationen verhindert, falls Sie zuvor einen Befehl mit Sudo aufgerufen haben.

Beispiel:

[[email protected] ~]# su - jdoe
[[email protected] ~]$ Sudo shutdown -c
[Sudo] password for jdoe:
[[email protected] ~]$ Sudo shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 18:51:13 IDT, use 'shutdown -c' to cancel.
[[email protected] ~]$ Sudo shutdown -H
[Sudo] password for jdoe:
^[[A[[email protected] ~]$ Sudo shutdown -c
[Sudo] password for jdoe:

Beachten Sie, dass ich im obigen Beispiel beim Ausführen von Sudo shutdown -r +10 Nicht mein Kennwort eingeben musste, sondern im Übrigen. Wenn Sie die Notwendigkeit der Eingabe von Sudo vor dem Befehl (Sudo shutdown -r +10) Entfernen möchten, fügen Sie Ihrem .bash_profile oder .bashrc Folgendes hinzu:

alias shutdown="Sudo shutdown"

Beispiel:

[[email protected] ~]$ source ~/.bash_profile
[[email protected] ~]$ shutdown -r +10
Shutdown scheduled for Mon 2018-09-03 19:03:14 IDT, use 'shutdown -c' to cancel.
[[email protected] ~]$ shutdown -c
[Sudo] password for jdoe:

Beachten Sie, dass es empfehlenswert ist, mit einem nicht privilegierten Konto zu arbeiten und bei Bedarf mit Sudo zu eskalieren.

16
John Doe

Es gibt ein Tool namens Molly-Guard , bei dem Sie den Hostnamen des Computers angeben müssen, den Sie herunterfahren oder neu starten möchten.

Falls Sie Debian nicht verwenden, sollte es trivial sein, dies aus dem Quellcode zu kompilieren, da das Programm eher primitiv ist.

10
Simon Richter

Um Pannen zu vermeiden, haben RHEL-basierte Distributionen bereits Aliase für rm, cp und mv eingerichtet, die vom Root-Benutzer etwas destruktiver sein können.

Sie können beispielsweise Ihre eigenen hinzufügen:

#/root/.bashrc
alias poweroff='echo  "poweroff: Command disabled - THINK before you type.
  Use /usr/sbin/poweroff if you really want to drive to the DC to restore power."'
9
HBruijn

Benennen Sie die ausführbare Shutdown-Datei in etwas um, das nicht versehentlich aufgerufen werden kann.

Dann ist der Alias ​​shutdown(whatever) -r

3
Wes Groleau