Es ist einfach, einen Prozess im Hintergrund zu starten oder ihn als systemd
Dienst zu nutzen.
Wenn ich jedoch einen Prozess starten möchte, der die Aktivitäten auf der Linux-Maschine überwacht, wird dieser zum Ziel von Angriffen. Wenn ein Benutzer etwas Böses tun möchte, wird dieser Prozess zuerst beendet, indem er einfach oder ausführt, selbst wenn es sich nur um sudo
Benutzer oder wheel
Ersteller handelt .kill
systemctl stop
Gibt es eine Möglichkeit, einen Prozess zu erzwingen, der nur root
beenden kann?
Leute, wenn man bedenkt, dass sogar rsyslog
Dienste beendet werden können, sollte man sich bewusst machen, wie anfällig Linux wirklich ist. Es ist, als ob ein Pilot die Blackbox ausschalten könnte. Lässt das irgendeine Fluggesellschaft zu? Oder gibt es eine, die dem Piloten eine Zulassungsliste gibt, die ihn daran hindert, alles zu tun, was er tun könnte, um das Flugzeug zu retten? Natürlich kann der Pilot das Flugzeug zum Absturz bringen, aber die Blackbox wird es aufzeichnen.
Mein Vorschlag für eine Sperrliste ist aus Sicherheitssicht legitim, auch wenn er Sie vielleicht ausflippen lässt. Versuchen Sie also nicht, demjenigen die Schuld zu geben, der die Frage gestellt hat, okay?
Antwort1
Mit uneingeschränkten Sudo/Wheel-Berechtigungen kann jeder alles rückgängig machen, was Sie getan haben. Selbst wenn Sie dies erreichen, indem Sie die Möglichkeit entfernen, Prozesse direkt zu beenden, z. B. mit sudo kill
, kann dies entweder immer noch mit anderen Sudo-Befehlen umgangen werden, oder Sie sperren sich selbst aus der Verwaltung aus.
Fragen Sie sich, warum nicht vertrauenswürdige Benutzer überhaupt uneingeschränkte Sudo-Berechtigungen haben? Das sollten sie nicht. Geben Sie solche Berechtigungen nur denjenigen, denen Sie vollkommen vertrauen. Wenn es einige privilegierte Befehle gibt, die noch ausgeführt werden müssen, aktivieren Sie Sudo nur für diese Befehle:
+netmgr /usr/sbin/ifup, /usr/sbin/ifdown
(verwenden Sie visudo -f /etc/sudoers.d/netmgr
es, um dies in die Sudoers-Add-On-Datei einzufügen).
sudo /usr/sbin/ifup
Auf diese Weise können Sie einem Benutzer erlauben, nur und auszuführen sudo /usr/sbin/ifdown
, aber keine anderen sudo-Befehle. Viele weitere Beispiele, Anweisungen und Sicherheitshinweise finden Sie in man sudoers
. Lesen Sie es!
Audits werden normalerweise anders durchgeführt. Insbesondere richten Sie einein andererMaschine, konfigurieren Sie ihr Syslog so, dass es Protokolle von Remote-Stationen akzeptiert. Auf der betreffenden Maschine richten Sie die Protokollierung so ein, dass sie alle Protokolle an die Protokollierungsmaschine sendet und sie lokal speichert. Selbst wenn jemand das Senden dieser Protokolle deaktiviert, wird die Deaktivierung selbst protokolliert, sodass Sie zumindest wissen, wer der Schuldige ist.
Antwort2
Sie können niemandem Macht verleihen und ihn dann daran hindern, sie zu nutzen. Sie müssen die Macht, die Sie jemandem verleihen, eng fokussieren, sodass sie nur das umfasst, was Sie ihm geben möchten.
In einem Kommentar sagten Sie:
Ich muss ihnen erlauben, sie zu verwenden
kill
, odersystemctl stop
weil es einige Anwendungen gibt, die diese Privilegien benötigen, um ihre Arbeit zu erledigen
Das bedeutet nicht, dass dieseBenutzerbrauchen Zugriff auf diese Befehle, nur diejenigenAnwendungen. Der Benutzer hat eingeschränkte Berechtigungen zum Ausführen sudo ./someprogram
und sobald das Programm als Root ausgeführt wird, kann es kill
nach Bedarf verwenden usw. Der Benutzer hat jedoch keinen direkten Zugriff auf diese internen Befehle.
Grundsätzlich benötigen Benutzer keinen Zugriff aufBefehle, sie benötigen Zugang zuFunktionalität. Wenn kill
das zu riskant ist, blockieren Sie den Zugriff darauf und bieten Sie eine andere, sicherere Möglichkeit, dasselbe Ergebnis zu erzielen. Vielleicht erstellen Sie ein kleines Dienstprogramm safekill
, das sich wie verhält, kill
aber Anfragen zum Beenden bestimmter Prozesse ablehnt. Geben Sie Ihren Benutzern sudo-Zugriff auf , safekill
aber nicht auf das echte kill
. Wenn Benutzer diese Befehle immer verwenden, um dasselbe zu tun, kapseln Sie den gesamten Prozess in ein kleines Programm und lassen Sie sie dieses verwenden, anstatt es manuell zu tun (z. B. würden sie sudo restart_webservers
alle verschiedenen Serverprozesse einzeln ausführen, anstatt sie zu beenden und neu zu starten). Ihre Benutzer haben immer noch Zugriff auf die Funktionen, die sie benötigen, aber sie können die gefährlichen Waffen nicht direkt einsetzen.
Es gibt einen weiteren, extremeren Durchsetzungsmechanismus, der je nach Ihrer speziellen Konfiguration verfügbar sein könnte. Einige Prozessoren habenWatchdog-Timerverfügbar. Ändern Sie Ihr Aktivitätsüberwachungsprogramm so, dass der Watchdog gestartet und alle paar Sekunden zurückgesetzt wird. Sollte es jemandem gelingen, Ihren Monitor zu beenden, würde der Watchdog-Timer ablaufen und das System würde sich selbst neu starten, wobei das Monitorprogramm beim Start neu gestartet würde. Dies würde zwar nicht unbedingt verhindern, dass der Monitor deaktiviert wird, aber es würde jeden daran hindern, nach der Deaktivierung irgendetwas Sinnvolles zu tun. Dies würde auch schöne große rote Flaggen in Ihren Systemprotokollen erzeugen. Die meisten Systeme mit Watchdogs melden, wenn ein bestimmter Neustart vom Watchdog ausgelöst wurde. Ein vom Watchdog ausgelöster Neustart, der auftritt, während ein Benutzer in der Shell angemeldet ist, sollte alssehrverdächtig.
Antwort3
Linux-Neuling hier. Könnten Sie in Erwägung ziehen, Programme oder Skripte zu schreiben, die nur das tun, was diese Typen tun sollen, sie dann zum Root-Eigentümer zu machen und ihnen das Setuid-Bit hinzuzufügen? Ein großes Problem ist natürlich, dass Sie vielleicht nicht möchten, dass andere Leute diese Befehle ausführen. Ich bin nicht sicher, ob Sie die ursprünglichen Benutzerinformationen erhalten können. Und natürlich ist bei Setuid/Setgid immer besondere Vorsicht geboten.
Antwort4
Ich habe mir einen Anfang ausgedacht!
root
können für einen Benutzer eine STANDARD-SHELL wie folgt festlegen:
useradd [someuser] -s [a certain executable]
Wenn die bestimmte ausführbare Datei = Ein Zensurskript ist, das:
Zensiert automatisch die Ausführung bestimmter Befehle. Gefällt mir
stop
undrsyslog
kombiniert.verbietet Befehle, diese Shell zu verlassen und eine andere zu verwenden, sogar die ursprüngliche
bash
verbietet Befehle, um zu verhindern, dass der Benutzer die Rolle erhält
root
, wie @user253751 oben erwähnt hat.Übergeben Sie die restlichen Befehle an
/bin/bash
Dann legen Sie es einfach r+x
für jeden beliebigen Benutzer fest.
Jeder Vorschlag unter dieser Antwort ist willkommen. Insbesondere für 2 und 3 scheint es verschiedene Möglichkeiten zu geben.
Bash lädt die Einstellungen zuerst in /etc/profile
und /etc/bashrc
. Mir ist aufgefallen, dass Letzteres mit der PROMPT_COMMAND
Variable zu tun hat. Es ist möglich, dies in der letzten Zeile zu kapern, um es in das Zensurskript einzufügen, aber für einige Systeme ist ein Ausnahmebenutzername erforderlich, da standardmäßig niemand über Root-Rechte verfügt, um ihn wieder zu ändern.
Eine vollständige Zensur, die die oben genannten 4+1 erfüllt, wird als legitime Antwort markiert.
Ich werde eine „Du wirst es aufgeben“-Antwort niemals als legitim markieren.
Verwandte Fragen sind:
Wie kann ich die Bash-Befehle von Benutzern protokollieren?
Wie kann ich Bash dazu bringen, Shell-Befehle in Syslog zu protokollieren?