Wie deaktiviere ich unheimliche Terminalbefehle?
Ich benutzte SSH, um auf einen entfernten Ubuntu-Server zuzugreifen, ohne auf den physischen Server zuzugreifen. Ich dachte, ich tippe ' shutdown
' in den NoSQL-Server, der auf dem Ubuntu-Betriebssystem läuft, aber eigentlich habe ich den Ubuntu-Server angewiesen, herunterzufahren. Dann musste ich dem Serveradministrator mitteilen, was ich getan habe, damit er den physischen Server für mich starten konnte. Das war peinlich
Wie kann ich das verhindern?
rm
schlimmer ist als das der Nebenwirkungenshutdown
. Fazit: Wenn Sie weiterhin zufällige Befehle als root ausführen, können Sie auf keinen Fall verhindern, dass etwas Schlimmes passiert.Antworten:
Die Standardantwort lautet "Nicht als root anmelden". Alle Befehle, die als root ausgeführt werden, sind beängstigend. Wenn dies keine Option ist, können Sie einige Alias-Befehle hinzufügen
.bashrc
, um Befehle zu deaktivieren, die Ihnen besonders unheimlich erscheinen. Zum Beispiel:Wenn Sie dann shutdown eingeben, wird die folgende Meldung angezeigt:
( Stellen Sie sicher, dass Ihr
.bashrc
Computer zuerst geladen wurde, bevor Sie dies auf einem Produktionsserver versuchen. )Beenden Sie Ihre aktuelle
ssh
Sitzung und. ~/.bashrc
melden Sie sich erneut an oder verwenden Sie sollte .bashrc laden / ausführen. Versuchen Sie möglicherweise,rm
ohne Argumente auszuführen, um sicherzustellen, dass Ihr Server das automatische Laden.bashrc
von Anmeldungen oder Ähnlichem nicht deaktiviert hat .Beachten Sie, dass Sie, wenn Sie hauptsächlich mit dem Anhalten und Herunterfahren befasst sind, die Installation von molly-guard in Betracht ziehen könnten , wodurch Sie den Hostnamen eingeben müssen, bevor Sie den Computer herunterfahren. Dies ist nützlicher, wenn Sie regelmäßig ganze Betriebssysteme über die Befehlszeile herunterfahren, aber sicherstellen möchten, dass Sie das richtige herunterfahren.
Sie können dies auch mit einem weniger beängstigenden Befehl wie Abmelden oder Beenden testen.
quelle
source
ist ein Alias für.
und wird nicht von allen Shells unterstützt.~/.bash_profile
Quelle.bashrc
, das ist nicht das Standardverhalten ist und auf den meisten Systemen.bashrc
nicht lesen , wenn via ssh anmelden, so dass dies keinen Unterschied machen. Es ist weitaus besser, die Aliase zu~/.profile
oder~/.bash_profile
stattdessen hinzuzufügen .sudo
existiert aus einem Grund - benutze es. Wenn Ihr Befehl (in diesem Fall eine interaktive CLI) beendet ist, kehren Sie zu Ihrer Shell auf Benutzerebene zurück, nicht zu einer Root-Shell. Es gibt nur sehr wenige Gründe, sich in einer Root-Shell zu befinden. (Ich bin überrascht, dass dies nicht bereits eine Antwort ist ...)Having said that, nicht ein Muppet sein , die verwendet
sudo
für alles . Verstehen Sie, was Sie tun, und verstehen Sie, warum Root-Rechte erforderlich sind.Zusätzlich können Sie Ihre Eingabeaufforderung für Root- / User-Shells differenzieren. Dies macht es auch offensichtlicher, dass Sie wieder an der Shell-Eingabeaufforderung und nicht an einer " anderen CLI " sind. Meins ist sehr farbenfroh und enthält viele nützliche Informationen (z. B. den Hostnamen). Dadurch ist es sehr einfach zu ermitteln, auf welchem Host der Befehl ausgeführt wird, und es ist einfacher, in Ihrem Verlauf nach Eingabeaufforderungen zu suchen - einem Stammverzeichnis Shell verwendet die Standardeingabeaufforderung.
Dies ist besser für " Ihr " Konto geeignet , aber wenn Sie Sicherheit / Systemadministration ernst nehmen, werden Sie keine Kennwörter / Konten freigeben und nicht in einer Root-Shell sitzen, ohne sich dessen voll bewusst zu sein.
Wie die Leute immer und immer wieder sagten, " Aliasing-Befehle zur Schaffung einer sicheren Umgebung sind eine schlechte Idee ". Sie werden es sich in Ihrer sicheren Umgebung gemütlich machen, indem Sie diese 'beängstigenden' Befehle eingeben, wo Sie es nicht sollten. Dann werden Sie eines Tages den Job wechseln oder sich auf einer neuen Maschine anmelden und dann " whoopsy, ich wollte nicht, es tut mir leid " boomen ...
quelle
sudo
Sie sind an der Reihe, den Kaffee zu holen.sudo shutdown
? Wenn er es auf dem falschen Computer ausführt, wird es immer noch eine Katastrophe sein.sudo
ist ein Shell-Befehl, der nichts mit der Datenbank zu tun hat.sudo shutdown
, da ich davon ausgehe , dasssudo
es sich nicht um einen NoSQL-Befehl handelt. Nicht in einer Root-Shell zu sein, hätte dieses Problem völlig gelöst und wäre eine sehr gute Idee gewesen. Also würde man sich die Eingabeaufforderung genau ansehen, bevor man wichtige Befehle ausführt.Das Paket 'molly-guard' (zumindest auf von Debian abgeleiteten Systemen) installiert einen Wrapper zum Herunterfahren, Anhalten, Ausschalten und Neustarten. Wenn festgestellt wird, dass es sich um ein entferntes Terminal handelt, wird der Name des Hosts abgefragt. Wenn es nicht übereinstimmt, wird der Befehl abgebrochen.
quelle
rm -rf /
?set -u
könnte in einigen Fällen dabei helfen, beispielsweise beim Schreibenrm -rf /$SOME_VARIABLE_WHICH_I_THOUGHT_EXISTS_BUT_DOESNT
.--no-preserve-root
es unwahrscheinlich , dass Sie es versehentlich eingeben .Ich habe eine Antwort akzeptiert, die ich sehr mag. Wenn jedoch jemand anderes liest und eine einfachere Antwort möchte, ist dies meine.
Suchen Sie die .bashrc-Datei und fügen Sie sie als letzte Zeile ein:
Wenn Sie dann shutdown eingeben, erhalten Sie so etwas wie
~bash: notforuse is not a command
Das mag albern sein, ist aber einfach und funktioniert. Ich freue mich jedoch über Antworten mit besseren Möglichkeiten!
quelle
rm
Leute zu trollen -alias rm='echo "You can't use rm!" #'
notforuse
auf dem Pfad aufgerufen wird.~/.SaveMyReputation
und fügen Sie als letzte Zeile Ihrer.bashrc
a-Zeile hinzu[ -f ~/.SaveMyReputation ] && source ~/,SaveMyReputation
. Möglicherweise möchten Sie eventuell eine zusätzliche Zeileecho "#Scaring command protected shell, comment the last line of .bashrc and log again to have a full working shell"
in diese Datei einfügen. Zumindest können Sie diese Alias-Datei auf einem anderen Computer mitbringen (dies sollte der Fall sein.bash_aliases
, aber in diesem "veralteten" Fall ist es besser, einen anderen Namen zu verwenden).alias shutdown=shutdown-disabled-by-an-alias
. (Hiermit wird nur das dritte und geringfügigste Problem behoben, auf das @DavidRicherby hingewiesen hat.) Obwohl es wahrscheinlich nur 2 Sekunden dauern wird, bis die nächste Person vom Anzeigennotforuse is not a command
zum Ausführentype -a shutdown
und Finden des Alias übergeht und dann die Aliaserweiterungsudo \shutdown
deaktiviert. (Vorausgesetzt, sie hatten einesudo
Alias-Beziehung,sudo='sudo '
so dass es Aliase in seinem ersten Argument erweitert).Für
shutdown
(reboot
,halt
und damit verbundene): Ich habe eine Kopie mit mich fragen , ob ich wirklich sicher bin (und es tut nichts sowieso). Ich speichere solche Skripte in/usr/local/sbin
. Unter Debian hat dies die Priorität other/sbin
(es ist das erste Verzeichnis von PATH).Systemskripte verwenden den vollständigen Pfad, so dass ein solcher Hack mich daran hindert, einen Remote-Server anstelle eines lokalen Computers anzuhalten (ein schlechtes Verhalten von Awesome WM), aber keine anderen indirekten Auswirkungen hat und ich sie weiterhin als / sbin / shutdown verwenden kann, wenn sie wirklich benötigt werden .
quelle
shutdown
auf einem kritischen System , das sich nicht haben Ihre Hack.Die Sudoers-Datei ermöglicht eine viel feinere Granularität, als nur * 'sudo' * verwenden darf. Insbesondere können Sie Befehls-Aliase verwenden, um weiße Listen von Befehlsgruppen zu erstellen, auf die ein bestimmter Benutzer oder eine bestimmte Gruppe beschränkt ist. Ich habe mit Remote-Servern gearbeitet, die auf SSH-Zugriff beschränkt waren und passwortloses Sudo zuließen (wir benötigten passwortgeschützte SSH-Schlüssel). Es gibt einige gute Gründe dafür, aber es birgt Gefahren. Daher haben wir Befehls-Aliase verwendet, um uneingeschränkten Zugriff auf die zu erledigenden Aufgaben (Neustarten von Servern usw.) zu ermöglichen, ohne ihnen Berechtigungen für Dinge zu gewähren, die sie nicht getan haben.
Es gibt auch eine Syntax, die besagt , dass dieser Befehl nicht ausgeführt werden kann . Es kann umgangen werden, sollte also nicht als echte Sicherheitsmaßnahme verwendet werden, sondern würde für das von Ihnen beschriebene Szenario funktionieren.
Man Sudoers hat einige gute Beispiele, wie man das alles einrichtet.
Natürlich erfordert dies die Verwendung von sudo, aber das sollte selbstverständlich sein.
quelle
Möglicherweise sind Sie Opfer einer neuen Dummheit von Ubuntu geworden.
Ubuntu hatte früher den normalen, klassischen
shutdown
Befehl, der ein obligatorisches Zeitargument benötigt.Folgendes passiert unter Ubuntu 12, wenn ich schreibe
shutdown
, auch als normaler Benutzer:Dann
Jetzt ist hier Ubuntu 16.10. Ich bin nicht root:
Ohne Argumente wird 60 Sekunden später ein Herunterfahren geplant, und selbst wenn Sie nicht als Root angemeldet sind - nur ein Konto, das mit Administratorrechten erstellt wurde.
Canonical die Schuld geben.
quelle
/sbin/shutdown
wirdsystemd-sysv
standardmäßig als Paket bereitgestellt , es ist also keine Ubuntu-Dummheit, es ist einesystemd
Dummheit, und es kommt nicht von Ubuntu, sondern zumindest von Debian, was wiederum die ganzesystemd
Bewegung von Red Hat zu übernehmen scheint . Wenn Sie beschuldigen, beschuldigen Sie die richtige Entität - nicht nur die, die Sie nicht mögen.Zum Herunterfahren gibt es Molly-Guard. Sie müssen es nur installieren und wenn Sie versuchen, über ssh herunterzufahren, werden Sie aufgefordert, den Hostnamen einzugeben.
Zum Löschen von Dateien gibt es Lösungen wie libtrash, die einen Papierkorb über eine
LD_PRELOAD
Bibliothek emulieren .Und Sie können mit dem Programm maybe testen, welche Dateien Sie ändern / löschen / .... Das ist ziemlich cool, wenn man etwas testet.
quelle
maybe
Sache scheint vom Design her kaputt zu sein: Das Stoppen einiger Syscalls mit No-Ops wird jedes nicht-triviale Programm zum Absturz bringen, das auf diese Syscalls angewiesen ist, um erfolgreich zu sein.Versuchen Sie Folgendes: Wenn Sie sich auf einer Remote-Shell befinden, halten Sie jedes Mal, wenn Sie die "Return" -Taste eingeben, 5 Sekunden lang an, während Sie mit dem Finger auf die "Return" -Taste zeigen, und lesen Sie den Befehl, den Sie senden möchten, erneut. Ist es o.k? Bist du sicher?
Dies scheint hart zu sein, aber andererseits sollten wir nicht viel Zeit für Remote-Shells aufwenden. Wir sollten alle Möglichkeiten finden, um unsere Wartungsarbeiten so zu automatisieren, dass wir uns selten oder nie bei einem Remote-Server anmelden müssen.
quelle
shutdown
, hielt für 5 Sekunden an, las den Befehl erneut (laut!) Und ich bin sicher, dass er korrekt war. Drücken Sie dann die Eingabetaste und der Befehl wird gerade ausgeführt. Ich fürchte, das hat die furchterregenden Befehle nicht deaktiviert. Ich werde mit diesem Finger schweben versuchen, vielleicht war der Abstand zu klein / groß.